1717import tempfile
1818from unittest import mock
1919
20- from cinderclient import api_versions
20+ from openstack . block_storage . v2 import volume as _volume
2121from openstack import exceptions as sdk_exceptions
22+ from openstack .test import fakes as sdk_fakes
2223from osc_lib .cli import format_columns
2324from osc_lib import exceptions
2425
@@ -37,12 +38,6 @@ def setUp(self):
3738 self .project_mock .reset_mock ()
3839 self .domain_mock = self .identity_client .domains
3940 self .domain_mock .reset_mock ()
40- self .volumes_mock = self .volume_client .volumes
41- fake_body = {
42- 'os-volume_upload_image' : {'volume_type' : {'name' : 'fake_type' }}
43- }
44- self .volumes_mock .upload_to_image .return_value = (200 , fake_body )
45- self .volumes_mock .reset_mock ()
4641
4742
4843class TestImageCreate (TestImage ):
@@ -312,7 +307,6 @@ def test_image_create_import(self, raw_input):
312307
313308 columns , data = self .cmd .take_action (parsed_args )
314309
315- # ImageManager.create(name=, **)
316310 self .image_client .create_image .assert_called_with (
317311 name = self .new_image .name ,
318312 allow_duplicates = True ,
@@ -322,20 +316,19 @@ def test_image_create_import(self, raw_input):
322316 )
323317 self .image_client .get_image .assert_called_once_with (self .new_image )
324318
325- @mock .patch ('osc_lib.utils.find_resource' )
326319 @mock .patch ('openstackclient.image.v2.image.get_data_from_stdin' )
327- def test_image_create_from_volume (self , mock_get_data_f , mock_get_vol ):
328- fake_vol_id = 'fake-volume-id'
320+ def test_image_create_from_volume (self , mock_get_data_f ):
329321 mock_get_data_f .return_value = None
330322
331- class FakeVolume :
332- id = fake_vol_id
333-
334- mock_get_vol .return_value = FakeVolume ()
323+ volume = sdk_fakes .generate_fake_resource (_volume .Volume )
324+ self .volume_sdk_client .find_volume .return_value = volume
325+ self .volume_sdk_client .upload_volume_to_image .return_value = {
326+ 'volume_type' : {'name' : 'fake_type' }
327+ }
335328
336329 arglist = [
337330 '--volume' ,
338- fake_vol_id ,
331+ volume . id ,
339332 self .new_image .name ,
340333 ]
341334 verifylist = [
@@ -345,66 +338,73 @@ class FakeVolume:
345338
346339 columns , data = self .cmd .take_action (parsed_args )
347340
348- self .volumes_mock .upload_to_image .assert_called_with (
349- fake_vol_id ,
350- False ,
341+ self .volume_sdk_client .upload_volume_to_image .assert_called_once_with (
342+ volume .id ,
351343 self .new_image .name ,
352- 'bare' ,
353- 'raw' ,
344+ force = False ,
345+ disk_format = 'raw' ,
346+ container_format = 'bare' ,
354347 visibility = None ,
355348 protected = None ,
356349 )
357350
358- @mock .patch ('osc_lib.utils.find_resource' )
359351 @mock .patch ('openstackclient.image.v2.image.get_data_from_stdin' )
360- def test_image_create_from_volume_fail (
361- self , mock_get_data_f , mock_get_vol
362- ):
363- fake_vol_id = 'fake-volume-id'
352+ def test_image_create_from_volume_pre_v31 (self , mock_get_data_f ):
364353 mock_get_data_f .return_value = None
365354
366- class FakeVolume :
367- id = fake_vol_id
368-
369- mock_get_vol .return_value = FakeVolume ()
355+ volume = sdk_fakes .generate_fake_resource (_volume .Volume )
356+ self .volume_sdk_client .find_volume .return_value = volume
357+ self .volume_sdk_client .upload_volume_to_image .return_value = {
358+ 'volume_type' : {'name' : 'fake_type' }
359+ }
370360
371- arglist = ['--volume' , fake_vol_id , self .new_image .name , '--public' ]
361+ arglist = [
362+ '--volume' ,
363+ volume .id ,
364+ self .new_image .name ,
365+ '--public' ,
366+ ]
372367 verifylist = [
373368 ('name' , self .new_image .name ),
374369 ]
375370 parsed_args = self .check_parser (self .cmd , arglist , verifylist )
376371
377- self .assertRaises (
372+ exc = self .assertRaises (
378373 exceptions .CommandError , self .cmd .take_action , parsed_args
379374 )
375+ self .assertIn ('--os-volume-api-version 3.1 or greater ' , str (exc ))
380376
381- @mock .patch ('osc_lib.utils.find_resource' )
382377 @mock .patch ('openstackclient.image.v2.image.get_data_from_stdin' )
383- def test_image_create_from_volume_v31 (self , mock_get_data_f , mock_get_vol ):
384- self .volume_client . api_version = api_versions . APIVersion ('3.1' )
378+ def test_image_create_from_volume_v31 (self , mock_get_data_f ):
379+ self .set_volume_api_version ('3.1' )
385380
386- fake_vol_id = 'fake-volume-id'
387381 mock_get_data_f .return_value = None
388382
389- class FakeVolume :
390- id = fake_vol_id
391-
392- mock_get_vol .return_value = FakeVolume ()
383+ volume = sdk_fakes .generate_fake_resource (_volume .Volume )
384+ self .volume_sdk_client .find_volume .return_value = volume
385+ self .volume_sdk_client .upload_volume_to_image .return_value = {
386+ 'volume_type' : {'name' : 'fake_type' }
387+ }
393388
394- arglist = ['--volume' , fake_vol_id , self .new_image .name , '--public' ]
389+ arglist = [
390+ '--volume' ,
391+ volume .id ,
392+ self .new_image .name ,
393+ '--public' ,
394+ ]
395395 verifylist = [
396396 ('name' , self .new_image .name ),
397397 ]
398398 parsed_args = self .check_parser (self .cmd , arglist , verifylist )
399399
400400 columns , data = self .cmd .take_action (parsed_args )
401401
402- self .volumes_mock .upload_to_image .assert_called_with (
403- fake_vol_id ,
404- False ,
402+ self .volume_sdk_client .upload_volume_to_image .assert_called_once_with (
403+ volume .id ,
405404 self .new_image .name ,
406- 'bare' ,
407- 'raw' ,
405+ force = False ,
406+ disk_format = 'raw' ,
407+ container_format = 'bare' ,
408408 visibility = 'public' ,
409409 protected = False ,
410410 )
0 commit comments