2424from openstackclient .tests import fakes
2525from openstackclient .tests .image .v2 import fakes as image_fakes
2626from openstackclient .tests import utils
27+ from openstackclient .tests .volume .v2 import fakes as volume_fakes
2728
2829
2930class TestServer (compute_fakes .TestComputev2 ):
@@ -47,6 +48,10 @@ def setUp(self):
4748 self .images_mock = self .app .client_manager .image .images
4849 self .images_mock .reset_mock ()
4950
51+ # Get a shortcut to the VolumeManager Mock
52+ self .volumes_mock = self .app .client_manager .volume .volumes
53+ self .volumes_mock .reset_mock ()
54+
5055
5156class TestServerCreate (TestServer ):
5257
@@ -80,6 +85,13 @@ def setUp(self):
8085 )
8186 self .flavors_mock .get .return_value = self .flavor
8287
88+ self .volume = fakes .FakeResource (
89+ None ,
90+ copy .deepcopy (volume_fakes .VOLUME ),
91+ loaded = True ,
92+ )
93+ self .volumes_mock .get .return_value = self .volume
94+
8395 # Get the command object to test
8496 self .cmd = server .CreateServer (self .app , None )
8597
@@ -289,6 +301,67 @@ def test_server_create_userdata(self, mock_open):
289301 )
290302 self .assertEqual (datalist , data )
291303
304+ def test_server_create_with_block_device_mapping (self ):
305+ arglist = [
306+ '--image' , 'image1' ,
307+ '--flavor' , compute_fakes .flavor_id ,
308+ '--block-device-mapping' , compute_fakes .block_device_mapping ,
309+ compute_fakes .server_name ,
310+ ]
311+ verifylist = [
312+ ('image' , 'image1' ),
313+ ('flavor' , compute_fakes .flavor_id ),
314+ ('block_device_mapping' , [compute_fakes .block_device_mapping ]),
315+ ('config_drive' , False ),
316+ ('server_name' , compute_fakes .server_name ),
317+ ]
318+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
319+
320+ # CreateServer.take_action() returns two tuples
321+ columns , data = self .cmd .take_action (parsed_args )
322+
323+ real_volume_mapping = (
324+ (compute_fakes .block_device_mapping .split ('=' , 1 )[1 ]).replace (
325+ volume_fakes .volume_name ,
326+ volume_fakes .volume_id ))
327+
328+ # Set expected values
329+ kwargs = dict (
330+ meta = None ,
331+ files = {},
332+ reservation_id = None ,
333+ min_count = 1 ,
334+ max_count = 1 ,
335+ security_groups = [],
336+ userdata = None ,
337+ key_name = None ,
338+ availability_zone = None ,
339+ block_device_mapping = {
340+ 'vda' : real_volume_mapping
341+ },
342+ nics = [],
343+ scheduler_hints = {},
344+ config_drive = None ,
345+ )
346+ # ServerManager.create(name, image, flavor, **kwargs)
347+ self .servers_mock .create .assert_called_with (
348+ compute_fakes .server_name ,
349+ self .image ,
350+ self .flavor ,
351+ ** kwargs
352+ )
353+
354+ collist = ('addresses' , 'flavor' , 'id' , 'name' , 'properties' )
355+ self .assertEqual (collist , columns )
356+ datalist = (
357+ '' ,
358+ 'Large ()' ,
359+ compute_fakes .server_id ,
360+ compute_fakes .server_name ,
361+ '' ,
362+ )
363+ self .assertEqual (datalist , data )
364+
292365
293366class TestServerDelete (TestServer ):
294367
0 commit comments