1818from openstackclient .compute .v2 import server
1919from openstackclient .tests .compute .v2 import fakes as compute_fakes
2020from openstackclient .tests import fakes
21+ from openstackclient .tests .image .v2 import fakes as image_fakes
2122
2223
2324class TestServer (compute_fakes .TestComputev2 ):
@@ -29,6 +30,10 @@ def setUp(self):
2930 self .servers_mock = self .app .client_manager .compute .servers
3031 self .servers_mock .reset_mock ()
3132
33+ # Get a shortcut to the ImageManager Mock
34+ self .images_mock = self .app .client_manager .image .images
35+ self .images_mock .reset_mock ()
36+
3237
3338class TestServerDelete (TestServer ):
3439
@@ -61,3 +66,89 @@ def test_server_delete_no_options(self):
6166 self .servers_mock .delete .assert_called_with (
6267 compute_fakes .server_id ,
6368 )
69+
70+
71+ class TestServerImageCreate (TestServer ):
72+
73+ def setUp (self ):
74+ super (TestServerImageCreate , self ).setUp ()
75+
76+ # This is the return value for utils.find_resource()
77+ self .servers_mock .get .return_value = fakes .FakeResource (
78+ None ,
79+ copy .deepcopy (compute_fakes .SERVER ),
80+ loaded = True ,
81+ )
82+
83+ self .servers_mock .create_image .return_value = fakes .FakeResource (
84+ None ,
85+ copy .deepcopy (image_fakes .IMAGE ),
86+ loaded = True ,
87+ )
88+
89+ self .images_mock .get .return_value = fakes .FakeResource (
90+ None ,
91+ copy .deepcopy (image_fakes .IMAGE ),
92+ loaded = True ,
93+ )
94+
95+ # Get the command object to test
96+ self .cmd = server .CreateServerImage (self .app , None )
97+
98+ def test_server_image_create_no_options (self ):
99+ arglist = [
100+ compute_fakes .server_id ,
101+ ]
102+ verifylist = [
103+ ('server' , compute_fakes .server_id ),
104+ ]
105+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
106+
107+ # DisplayCommandBase.take_action() returns two tuples
108+ columns , data = self .cmd .take_action (parsed_args )
109+
110+ # ServerManager.create_image(server, image_name, metadata=)
111+ self .servers_mock .create_image .assert_called_with (
112+ self .servers_mock .get .return_value ,
113+ compute_fakes .server_name ,
114+ )
115+
116+ collist = ('id' , 'is_public' , 'name' , 'owner' )
117+ self .assertEqual (columns , collist )
118+ datalist = (
119+ image_fakes .image_id ,
120+ False ,
121+ image_fakes .image_name ,
122+ image_fakes .image_owner ,
123+ )
124+ self .assertEqual (data , datalist )
125+
126+ def test_server_image_create_name (self ):
127+ arglist = [
128+ '--name' , 'img-nam' ,
129+ compute_fakes .server_id ,
130+ ]
131+ verifylist = [
132+ ('name' , 'img-nam' ),
133+ ('server' , compute_fakes .server_id ),
134+ ]
135+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
136+
137+ # DisplayCommandBase.take_action() returns two tuples
138+ columns , data = self .cmd .take_action (parsed_args )
139+
140+ # ServerManager.create_image(server, image_name, metadata=)
141+ self .servers_mock .create_image .assert_called_with (
142+ self .servers_mock .get .return_value ,
143+ 'img-nam' ,
144+ )
145+
146+ collist = ('id' , 'is_public' , 'name' , 'owner' )
147+ self .assertEqual (columns , collist )
148+ datalist = (
149+ image_fakes .image_id ,
150+ False ,
151+ image_fakes .image_name ,
152+ image_fakes .image_owner ,
153+ )
154+ self .assertEqual (data , datalist )
0 commit comments