diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py index 96dd7cf..33eb4ee 100644 --- a/cinderclient/tests/unit/v3/test_shell.py +++ b/cinderclient/tests/unit/v3/test_shell.py @@ -23,6 +23,7 @@ import six from cinderclient import client from cinderclient import exceptions from cinderclient import shell +from cinderclient import utils as cinderclient_utils from cinderclient.v3 import volumes from cinderclient.v3 import volume_snapshots from cinderclient.tests.unit import utils @@ -248,15 +249,36 @@ class ShellTest(utils.TestCase): 'mountpoint': '/123', 'initiator': 'aabbccdd', 'platform': 'x86_xx'}, + 'volume_uuid': '1234'}}, + {'cmd': 'abc 1233', + 'body': {'instance_uuid': '1233', + 'connector': {}, 'volume_uuid': '1234'}}) + @mock.patch.object(cinderclient_utils, 'find_volume') @ddt.unpack - def test_attachment_create(self, cmd, body): + def test_attachment_create(self, mock_find_volume, cmd, body): + mock_find_volume.return_value = volumes.Volume(self, + {'id': '1234'}, + loaded=True) command = '--os-volume-api-version 3.27 attachment-create ' command += cmd self.run_command(command) expected = {'attachment': body} + self.assertTrue(mock_find_volume.called) self.assert_called('POST', '/attachments', body=expected) + @mock.patch.object(volumes.VolumeManager, 'findall') + def test_attachment_create_duplicate_name_vol(self, mock_findall): + found = [volumes.Volume(self, {'id': '7654', 'name': 'abc'}, + loaded=True), + volumes.Volume(self, {'id': '9876', 'name': 'abc'}, + loaded=True)] + mock_findall.return_value = found + self.assertRaises(exceptions.CommandError, + self.run_command, + '--os-volume-api-version 3.27 ' + 'attachment-create abc 789') + @ddt.data({'cmd': '', 'expected': ''}, {'cmd': '--volume-id 1234', diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py index 94aecb1..05dea07 100644 --- a/cinderclient/v3/shell.py +++ b/cinderclient/v3/shell.py @@ -1828,7 +1828,8 @@ def do_attachment_create(cs, args): 'os_type': args.ostype, 'multipath': args.multipath, 'mountpoint': args.mountpoint} - attachment = cs.attachments.create(args.volume, + volume = utils.find_volume(cs, args.volume) + attachment = cs.attachments.create(volume.id, connector, args.server_id) connector_dict = attachment.pop('connection_info', None)