@@ -90,7 +90,14 @@ def run_method_with_servers(self, method_name, server_count):
9090
9191 for s in servers :
9292 method = getattr (s , method_name )
93- method .assert_called_with ()
93+ if method_name == 'lock' :
94+ version = self .app .client_manager .compute .api_version
95+ if version >= api_versions .APIVersion ('2.73' ):
96+ method .assert_called_with (reason = None )
97+ else :
98+ method .assert_called_with ()
99+ else :
100+ method .assert_called_with ()
94101 self .assertIsNone (result )
95102
96103
@@ -2210,6 +2217,80 @@ def test_server_list_with_image(self):
22102217 self .assertEqual (self .columns , columns )
22112218 self .assertEqual (tuple (self .data ), tuple (data ))
22122219
2220+ def test_server_list_with_locked_pre_v273 (self ):
2221+
2222+ arglist = [
2223+ '--locked'
2224+ ]
2225+ verifylist = [
2226+ ('locked' , True )
2227+ ]
2228+
2229+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2230+ ex = self .assertRaises (exceptions .CommandError ,
2231+ self .cmd .take_action ,
2232+ parsed_args )
2233+ self .assertIn (
2234+ '--os-compute-api-version 2.73 or greater is required' , str (ex ))
2235+
2236+ def test_server_list_with_locked_v273 (self ):
2237+
2238+ self .app .client_manager .compute .api_version = \
2239+ api_versions .APIVersion ('2.73' )
2240+ arglist = [
2241+ '--locked'
2242+ ]
2243+ verifylist = [
2244+ ('locked' , True )
2245+ ]
2246+
2247+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2248+ columns , data = self .cmd .take_action (parsed_args )
2249+
2250+ self .search_opts ['locked' ] = True
2251+ self .servers_mock .list .assert_called_with (** self .kwargs )
2252+
2253+ self .assertEqual (self .columns , columns )
2254+ self .assertEqual (tuple (self .data ), tuple (data ))
2255+
2256+ def test_server_list_with_unlocked_v273 (self ):
2257+
2258+ self .app .client_manager .compute .api_version = \
2259+ api_versions .APIVersion ('2.73' )
2260+ arglist = [
2261+ '--unlocked'
2262+ ]
2263+ verifylist = [
2264+ ('unlocked' , True )
2265+ ]
2266+
2267+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2268+ columns , data = self .cmd .take_action (parsed_args )
2269+
2270+ self .search_opts ['locked' ] = False
2271+ self .servers_mock .list .assert_called_with (** self .kwargs )
2272+
2273+ self .assertEqual (self .columns , columns )
2274+ self .assertEqual (tuple (self .data ), tuple (data ))
2275+
2276+ def test_server_list_with_locked_and_unlocked_v273 (self ):
2277+
2278+ self .app .client_manager .compute .api_version = \
2279+ api_versions .APIVersion ('2.73' )
2280+ arglist = [
2281+ '--locked' ,
2282+ '--unlocked'
2283+ ]
2284+ verifylist = [
2285+ ('locked' , True ),
2286+ ('unlocked' , True )
2287+ ]
2288+
2289+ ex = self .assertRaises (
2290+ utils .ParserException ,
2291+ self .check_parser , self .cmd , arglist , verifylist )
2292+ self .assertIn ('Argument parse failed' , str (ex ))
2293+
22132294 def test_server_list_with_flavor (self ):
22142295
22152296 arglist = [
@@ -2336,6 +2417,72 @@ def test_server_lock_one_server(self):
23362417 def test_server_lock_multi_servers (self ):
23372418 self .run_method_with_servers ('lock' , 3 )
23382419
2420+ def test_server_lock_with_reason (self ):
2421+ server = compute_fakes .FakeServer .create_one_server ()
2422+ arglist = [
2423+ server .id ,
2424+ '--reason' , "blah" ,
2425+ ]
2426+ verifylist = [
2427+ ('reason' , "blah" ),
2428+ ('server' , [server .id ])
2429+ ]
2430+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2431+ ex = self .assertRaises (exceptions .CommandError ,
2432+ self .cmd .take_action ,
2433+ parsed_args )
2434+ self .assertIn (
2435+ '--os-compute-api-version 2.73 or greater is required' , str (ex ))
2436+
2437+
2438+ class TestServerLockV273 (TestServerLock ):
2439+
2440+ def setUp (self ):
2441+ super (TestServerLockV273 , self ).setUp ()
2442+
2443+ self .server = compute_fakes .FakeServer .create_one_server (
2444+ methods = self .methods )
2445+
2446+ # This is the return value for utils.find_resource()
2447+ self .servers_mock .get .return_value = self .server
2448+
2449+ self .app .client_manager .compute .api_version = \
2450+ api_versions .APIVersion ('2.73' )
2451+
2452+ # Get the command object to test
2453+ self .cmd = server .LockServer (self .app , None )
2454+
2455+ def test_server_lock_with_reason (self ):
2456+ arglist = [
2457+ self .server .id ,
2458+ '--reason' , "blah" ,
2459+ ]
2460+ verifylist = [
2461+ ('reason' , "blah" ),
2462+ ('server' , [self .server .id ])
2463+ ]
2464+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2465+ self .cmd .take_action (parsed_args )
2466+ self .servers_mock .get .assert_called_with (self .server .id )
2467+ self .server .lock .assert_called_with (reason = "blah" )
2468+
2469+ def test_server_lock_multi_servers_with_reason (self ):
2470+ server2 = compute_fakes .FakeServer .create_one_server (
2471+ methods = self .methods )
2472+ arglist = [
2473+ self .server .id , server2 .id ,
2474+ '--reason' , "choo..choo" ,
2475+ ]
2476+ verifylist = [
2477+ ('reason' , "choo..choo" ),
2478+ ('server' , [self .server .id , server2 .id ])
2479+ ]
2480+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
2481+ self .cmd .take_action (parsed_args )
2482+ self .assertEqual (2 , self .servers_mock .get .call_count )
2483+ self .server .lock .assert_called_with (reason = "choo..choo" )
2484+ self .assertEqual (2 , self .server .lock .call_count )
2485+
23392486
23402487class TestServerMigrate (TestServer ):
23412488
0 commit comments