~ubuntu-branches/ubuntu/vivid/ironic/vivid-proposed

« back to all changes in this revision

Viewing changes to ironic/tests/api/v1/test_ports.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2015-04-17 09:28:31 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20150417092831-wu2awfbqomnzpeim
Tags: 2015.1~rc1-0ubuntu1
* New upstream milestone release:
  - d/control: Align with upstream dependencies
  - d/p/fix-requirements.patch: Dropped no longer needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
from oslo_config import cfg
22
22
from oslo_utils import timeutils
23
23
from oslo_utils import uuidutils
 
24
import six
24
25
from six.moves.urllib import parse as urlparse
25
26
from testtools.matchers import HasLength
26
27
from wsme import types as wtypes
27
28
 
 
29
from ironic.api.controllers import base as api_controller
28
30
from ironic.api.controllers.v1 import port as api_port
 
31
from ironic.api.controllers.v1 import utils as api_utils
29
32
from ironic.common import exception
30
33
from ironic.conductor import rpcapi
31
34
from ironic.tests.api import base as api_base
109
112
        self.assertEqual(len(ports), len(data['ports']))
110
113
 
111
114
        uuids = [n['uuid'] for n in data['ports']]
112
 
        self.assertEqual(ports.sort(), uuids.sort())
 
115
        six.assertCountEqual(self, ports, uuids)
113
116
 
114
117
    def test_links(self):
115
118
        uuid = uuidutils.generate_uuid()
180
183
        self.assertEqual('application/json', response.content_type)
181
184
        self.assertIn(invalid_address, response.json['error_message'])
182
185
 
 
186
    @mock.patch.object(api_utils, 'get_rpc_node')
 
187
    def test_get_all_by_node_name_ok(self, mock_get_rpc_node):
 
188
        # GET /v1/ports specifying node_name - success
 
189
        mock_get_rpc_node.return_value = self.node
 
190
        for i in range(5):
 
191
            if i < 3:
 
192
                node_id = self.node.id
 
193
            else:
 
194
                node_id = 100000 + i
 
195
            obj_utils.create_test_port(self.context,
 
196
                                       node_id=node_id,
 
197
                                       uuid=uuidutils.generate_uuid(),
 
198
                                       address='52:54:00:cf:2d:3%s' % i)
 
199
        data = self.get_json("/ports?node=%s" % 'test-node',
 
200
                             headers={api_controller.Version.string: '1.5'})
 
201
        self.assertEqual(3, len(data['ports']))
 
202
 
 
203
    @mock.patch.object(api_utils, 'get_rpc_node')
 
204
    def test_get_all_by_node_uuid_and_name(self, mock_get_rpc_node):
 
205
        # GET /v1/ports specifying node and uuid - should only use node_uuid
 
206
        mock_get_rpc_node.return_value = self.node
 
207
        obj_utils.create_test_port(self.context, node_id=self.node.id)
 
208
        self.get_json('/ports/detail?node_uuid=%s&node=%s' %
 
209
            (self.node.uuid, 'node-name'))
 
210
        mock_get_rpc_node.assert_called_once_with(self.node.uuid)
 
211
 
 
212
    @mock.patch.object(api_utils, 'get_rpc_node')
 
213
    def test_get_all_by_node_name_not_supported(self, mock_get_rpc_node):
 
214
        # GET /v1/ports specifying node_name - name not supported
 
215
        mock_get_rpc_node.side_effect = exception.InvalidUuidOrName(
 
216
                                            name=self.node.uuid)
 
217
        for i in range(3):
 
218
            obj_utils.create_test_port(self.context,
 
219
                                       node_id=self.node.id,
 
220
                                       uuid=uuidutils.generate_uuid(),
 
221
                                       address='52:54:00:cf:2d:3%s' % i)
 
222
        data = self.get_json("/ports?node=%s" % 'test-node',
 
223
                             expect_errors=True)
 
224
        self.assertEqual(0, mock_get_rpc_node.call_count)
 
225
        self.assertEqual(406, data.status_int)
 
226
 
 
227
    @mock.patch.object(api_utils, 'get_rpc_node')
 
228
    def test_detail_by_node_name_ok(self, mock_get_rpc_node):
 
229
        # GET /v1/ports/detail specifying node_name - success
 
230
        mock_get_rpc_node.return_value = self.node
 
231
        port = obj_utils.create_test_port(self.context, node_id=self.node.id)
 
232
        data = self.get_json('/ports/detail?node=%s' % 'test-node',
 
233
                             headers={api_controller.Version.string: '1.5'})
 
234
        self.assertEqual(port.uuid, data['ports'][0]['uuid'])
 
235
        self.assertEqual(self.node.uuid, data['ports'][0]['node_uuid'])
 
236
 
 
237
    @mock.patch.object(api_utils, 'get_rpc_node')
 
238
    def test_detail_by_node_name_not_supported(self, mock_get_rpc_node):
 
239
        # GET /v1/ports/detail specifying node_name - name not supported
 
240
        mock_get_rpc_node.side_effect = exception.InvalidUuidOrName(
 
241
                                            name=self.node.uuid)
 
242
        obj_utils.create_test_port(self.context, node_id=self.node.id)
 
243
        data = self.get_json('/ports/detail?node=%s' % 'test-node',
 
244
                             expect_errors=True)
 
245
        self.assertEqual(0, mock_get_rpc_node.call_count)
 
246
        self.assertEqual(406, data.status_int)
 
247
 
 
248
    @mock.patch.object(api_port.PortsController, '_get_ports_collection')
 
249
    def test_detail_with_incorrect_api_usage(self, mock_gpc):
 
250
        # GET /v1/ports/detail specifying node and node_uuid.  In this case
 
251
        # we expect the node_uuid interface to be used.
 
252
        self.get_json('/ports/detail?node=%s&node_uuid=%s' %
 
253
                     ('test-node', self.node.uuid))
 
254
        mock_gpc.assert_called_once_with(self.node.uuid, mock.ANY, mock.ANY,
 
255
                                         mock.ANY, mock.ANY, mock.ANY,
 
256
                                         mock.ANY, mock.ANY)
 
257
 
183
258
 
184
259
@mock.patch.object(rpcapi.ConductorAPI, 'update_port')
185
260
class TestPatch(api_base.FunctionalTest):