@@ -2176,6 +2176,30 @@ def test_do_node_deploy_disallowed_step_raises(self, mock_start,
21762176 node .refresh ()
21772177 self .assertEqual (states .AVAILABLE , node .provision_state )
21782178
2179+ @mock .patch .object (deployments , 'start_deploy' , autospec = True )
2180+ def test_do_node_deploy_disallowed_step_raises_send_raw (
2181+ self , mock_start , mock_iwdi ):
2182+ mock_iwdi .return_value = False
2183+ self ._start_service ()
2184+ deploy_steps = [
2185+ {'step' : 'send_raw' ,
2186+ 'priority' : 7 ,
2187+ 'interface' : 'vendor' }
2188+ ]
2189+ node = obj_utils .create_test_node (
2190+ self .context , driver = 'fake-hardware' ,
2191+ provision_state = states .AVAILABLE ,
2192+ target_provision_state = states .NOSTATE )
2193+ exc = self .assertRaises (messaging .rpc .ExpectedException ,
2194+ self .service .do_node_deploy ,
2195+ self .context , node .uuid ,
2196+ deploy_steps = deploy_steps )
2197+ self .assertEqual (exception .StepNotAllowed , exc .exc_info [0 ])
2198+ # start_deploy must NOT have been called
2199+ self .assertFalse (mock_start .called )
2200+ node .refresh ()
2201+ self .assertEqual (states .AVAILABLE , node .provision_state )
2202+
21792203 @mock .patch .object (deployments , 'start_deploy' , autospec = True )
21802204 def test_do_node_deploy_allowed_step_proceeds (self , mock_start ,
21812205 mock_iwdi ):
@@ -3535,6 +3559,36 @@ def test_do_node_clean_disallowed_step_raises(self, mock_power_valid,
35353559 # Node stays in original state
35363560 self .assertEqual (states .MANAGEABLE , node .provision_state )
35373561
3562+ @mock .patch ('ironic.conductor.task_manager.TaskManager.process_event' ,
3563+ autospec = True )
3564+ @mock .patch ('ironic.drivers.modules.network.flat.FlatNetwork.validate' ,
3565+ autospec = True )
3566+ @mock .patch ('ironic.drivers.modules.fake.FakePower.validate' ,
3567+ autospec = True )
3568+ def test_do_node_clean_disallowed_step_raises_send_raw (
3569+ self , mock_power_valid ,
3570+ mock_network_valid ,
3571+ mock_process ):
3572+ node = obj_utils .create_test_node (
3573+ self .context , driver = 'fake-hardware' ,
3574+ provision_state = states .MANAGEABLE ,
3575+ target_provision_state = states .NOSTATE )
3576+ self ._start_service ()
3577+ clean_steps = [
3578+ {'step' : 'send_raw' ,
3579+ 'priority' : 7 ,
3580+ 'interface' : 'vendor' }
3581+ ]
3582+ exc = self .assertRaises (messaging .rpc .ExpectedException ,
3583+ self .service .do_node_clean ,
3584+ self .context , node .uuid , clean_steps )
3585+ self .assertEqual (exception .StepNotAllowed , exc .exc_info [0 ])
3586+ # process_event must NOT have been called
3587+ self .assertFalse (mock_process .called )
3588+ node .refresh ()
3589+ # Node stays in original state
3590+ self .assertEqual (states .MANAGEABLE , node .provision_state )
3591+
35383592 @mock .patch ('ironic.conductor.task_manager.TaskManager.process_event' ,
35393593 autospec = True )
35403594 @mock .patch ('ironic.drivers.modules.network.flat.FlatNetwork.validate' ,
@@ -3750,15 +3804,19 @@ def test_do_node_service(self, mock_pv, mock_nv, mock_event):
37503804 target_provision_state = states .NOSTATE )
37513805 self ._start_service ()
37523806 self .service .do_node_service (self .context ,
3753- node .uuid , {'foo' : 'bar' })
3807+ node .uuid ,
3808+ [{'step' : 'foo' ,
3809+ 'priority' : 7 ,
3810+ 'interface' : 'management' }])
37543811 self .assertTrue (mock_pv .called )
37553812 self .assertTrue (mock_nv .called )
37563813 mock_event .assert_called_once_with (
37573814 mock .ANY ,
37583815 'service' ,
37593816 callback = mock .ANY ,
37603817 call_args = (servicing .do_node_service , mock .ANY ,
3761- {'foo' : 'bar' }, False ),
3818+ [{'step' : 'foo' , 'priority' : 7 ,
3819+ 'interface' : 'management' }], False ),
37623820 err_handler = mock .ANY , target_state = 'active' )
37633821
37643822 @mock .patch ('ironic.conductor.manager.ConductorManager._spawn_worker' ,
@@ -3805,6 +3863,33 @@ def test_do_node_service_disallowed_step_raises(self, mock_pv, mock_nv,
38053863 node .refresh ()
38063864 self .assertEqual (states .ACTIVE , node .provision_state )
38073865
3866+ @mock .patch ('ironic.conductor.task_manager.TaskManager.process_event' ,
3867+ autospec = True )
3868+ @mock .patch ('ironic.drivers.modules.network.flat.FlatNetwork.validate' ,
3869+ autospec = True )
3870+ @mock .patch ('ironic.drivers.modules.fake.FakePower.validate' ,
3871+ autospec = True )
3872+ def test_do_node_service_disallowed_step_raises_on_send_raw (
3873+ self , mock_pv , mock_nv ,
3874+ mock_event ):
3875+ node = obj_utils .create_test_node (
3876+ self .context , driver = 'fake-hardware' ,
3877+ provision_state = states .ACTIVE ,
3878+ target_provision_state = states .NOSTATE )
3879+ self ._start_service ()
3880+ service_steps = [
3881+ {'step' : 'send_raw' ,
3882+ 'priority' : 7 ,
3883+ 'interface' : 'vendor' }
3884+ ]
3885+ exc = self .assertRaises (messaging .rpc .ExpectedException ,
3886+ self .service .do_node_service ,
3887+ self .context , node .uuid , service_steps )
3888+ self .assertEqual (exception .StepNotAllowed , exc .exc_info [0 ])
3889+ self .assertFalse (mock_event .called )
3890+ node .refresh ()
3891+ self .assertEqual (states .ACTIVE , node .provision_state )
3892+
38083893 @mock .patch ('ironic.conductor.task_manager.TaskManager.process_event' ,
38093894 autospec = True )
38103895 @mock .patch ('ironic.drivers.modules.network.flat.FlatNetwork.validate' ,
0 commit comments