21
21
from oslo_config import cfg
22
22
from oslo_utils import timeutils
23
23
from oslo_utils import uuidutils
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
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
180
183
self.assertEqual('application/json', response.content_type)
181
184
self.assertIn(invalid_address, response.json['error_message'])
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
192
node_id = self.node.id
195
obj_utils.create_test_port(self.context,
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']))
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)
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(
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',
224
self.assertEqual(0, mock_get_rpc_node.call_count)
225
self.assertEqual(406, data.status_int)
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'])
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(
242
obj_utils.create_test_port(self.context, node_id=self.node.id)
243
data = self.get_json('/ports/detail?node=%s' % 'test-node',
245
self.assertEqual(0, mock_get_rpc_node.call_count)
246
self.assertEqual(406, data.status_int)
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,
184
259
@mock.patch.object(rpcapi.ConductorAPI, 'update_port')
185
260
class TestPatch(api_base.FunctionalTest):