def setUp(self): mock_clients = self._create_service_mock('transform_management') self.transform_service = TransformManagementService() self.transform_service.clients = mock_clients self.transform_service.clients.pubsub_management = DotDict() self.transform_service.clients.pubsub_management['XP'] = 'science.data' self.transform_service.clients.pubsub_management['create_stream'] = Mock() self.transform_service.clients.pubsub_management['create_subscription'] = Mock() self.transform_service.clients.pubsub_management['register_producer'] = Mock() self.transform_service.clients.pubsub_management['activate_subscription'] = Mock() self.transform_service.clients.pubsub_management['read_subscription'] = Mock() self.transform_service.container = DotDict() self.transform_service.container['spawn_process'] = Mock() self.transform_service.container['id'] = 'mock_container_id' self.transform_service.container['proc_manager'] = DotDict() self.transform_service.container.proc_manager['terminate_process'] = Mock() self.transform_service.container.proc_manager['procs'] = {} # CRUD Shortcuts self.mock_rr_create = self.transform_service.clients.resource_registry.create self.mock_rr_read = self.transform_service.clients.resource_registry.read self.mock_rr_update = self.transform_service.clients.resource_registry.update self.mock_rr_delete = self.transform_service.clients.resource_registry.delete self.mock_rr_find = self.transform_service.clients.resource_registry.find_objects self.mock_rr_find_res = self.transform_service.clients.resource_registry.find_resources self.mock_rr_assoc = self.transform_service.clients.resource_registry.find_associations self.mock_rr_create_assoc = self.transform_service.clients.resource_registry.create_association self.mock_rr_del_assoc = self.transform_service.clients.resource_registry.delete_association self.mock_pd_create = self.transform_service.clients.process_dispatcher.create_process_definition self.mock_pd_read = self.transform_service.clients.process_dispatcher.read_process_definition self.mock_pd_update = self.transform_service.clients.process_dispatcher.update_process_definition self.mock_pd_delete = self.transform_service.clients.process_dispatcher.delete_process_definition self.mock_pd_schedule = self.transform_service.clients.process_dispatcher.schedule_process self.mock_pd_cancel = self.transform_service.clients.process_dispatcher.cancel_process self.mock_ps_create_stream = self.transform_service.clients.pubsub_management.create_stream self.mock_ps_create_sub = self.transform_service.clients.pubsub_management.create_subscription self.mock_ps_register = self.transform_service.clients.pubsub_management.register_producer self.mock_ps_activate = self.transform_service.clients.pubsub_management.activate_subscription self.mock_ps_read_sub = self.transform_service.clients.pubsub_management.read_subscription self.mock_cc_spawn = self.transform_service.container.spawn_process self.mock_cc_terminate = self.transform_service.container.proc_manager.terminate_process self.mock_cc_procs = self.transform_service.container.proc_manager.procs
def setUp(self): mock_clients = self._create_service_mock("transform_management") self.transform_service = TransformManagementService() self.transform_service.clients = mock_clients self.transform_service.clients.pubsub_management = DotDict() self.transform_service.clients.pubsub_management["XP"] = "science.data" self.transform_service.clients.pubsub_management["create_stream"] = Mock() self.transform_service.clients.pubsub_management["create_subscription"] = Mock() self.transform_service.clients.pubsub_management["register_producer"] = Mock() self.transform_service.clients.pubsub_management["activate_subscription"] = Mock() self.transform_service.clients.pubsub_management["read_subscription"] = Mock() self.transform_service.container = DotDict() self.transform_service.container["spawn_process"] = Mock() self.transform_service.container["id"] = "mock_container_id" self.transform_service.container["proc_manager"] = DotDict() self.transform_service.container.proc_manager["terminate_process"] = Mock() self.transform_service.container.proc_manager["procs"] = {} # CRUD Shortcuts self.mock_rr_create = self.transform_service.clients.resource_registry.create self.mock_rr_read = self.transform_service.clients.resource_registry.read self.mock_rr_update = self.transform_service.clients.resource_registry.update self.mock_rr_delete = self.transform_service.clients.resource_registry.delete self.mock_rr_find = self.transform_service.clients.resource_registry.find_objects self.mock_rr_find_res = self.transform_service.clients.resource_registry.find_resources self.mock_rr_assoc = self.transform_service.clients.resource_registry.find_associations self.mock_rr_create_assoc = self.transform_service.clients.resource_registry.create_association self.mock_rr_del_assoc = self.transform_service.clients.resource_registry.delete_association self.mock_pd_create = self.transform_service.clients.process_dispatcher.create_process_definition self.mock_pd_read = self.transform_service.clients.process_dispatcher.read_process_definition self.mock_pd_update = self.transform_service.clients.process_dispatcher.update_process_definition self.mock_pd_delete = self.transform_service.clients.process_dispatcher.delete_process_definition self.mock_pd_schedule = self.transform_service.clients.process_dispatcher.schedule_process self.mock_pd_cancel = self.transform_service.clients.process_dispatcher.cancel_process self.mock_ps_create_stream = self.transform_service.clients.pubsub_management.create_stream self.mock_ps_create_sub = self.transform_service.clients.pubsub_management.create_subscription self.mock_ps_register = self.transform_service.clients.pubsub_management.register_producer self.mock_ps_activate = self.transform_service.clients.pubsub_management.activate_subscription self.mock_ps_read_sub = self.transform_service.clients.pubsub_management.read_subscription self.mock_cc_spawn = self.transform_service.container.spawn_process self.mock_cc_terminate = self.transform_service.container.proc_manager.terminate_process self.mock_cc_procs = self.transform_service.container.proc_manager.procs
class TransformManagementServiceTest(PyonTestCase): """Unit test for TransformManagementService """ def setUp(self): mock_clients = self._create_service_mock('transform_management') self.transform_service = TransformManagementService() self.transform_service.clients = mock_clients self.transform_service.clients.pubsub_management = DotDict() self.transform_service.clients.pubsub_management['XP'] = 'science.data' self.transform_service.clients.pubsub_management['create_stream'] = Mock() self.transform_service.clients.pubsub_management['create_subscription'] = Mock() self.transform_service.clients.pubsub_management['register_producer'] = Mock() self.transform_service.clients.pubsub_management['activate_subscription'] = Mock() self.transform_service.clients.pubsub_management['read_subscription'] = Mock() self.transform_service.container = DotDict() self.transform_service.container['spawn_process'] = Mock() self.transform_service.container['id'] = 'mock_container_id' self.transform_service.container['proc_manager'] = DotDict() self.transform_service.container.proc_manager['terminate_process'] = Mock() self.transform_service.container.proc_manager['procs'] = {} # CRUD Shortcuts self.mock_rr_create = self.transform_service.clients.resource_registry.create self.mock_rr_read = self.transform_service.clients.resource_registry.read self.mock_rr_update = self.transform_service.clients.resource_registry.update self.mock_rr_delete = self.transform_service.clients.resource_registry.delete self.mock_rr_find = self.transform_service.clients.resource_registry.find_objects self.mock_rr_find_res = self.transform_service.clients.resource_registry.find_resources self.mock_rr_assoc = self.transform_service.clients.resource_registry.find_associations self.mock_rr_create_assoc = self.transform_service.clients.resource_registry.create_association self.mock_rr_del_assoc = self.transform_service.clients.resource_registry.delete_association self.mock_pd_create = self.transform_service.clients.process_dispatcher.create_process_definition self.mock_pd_read = self.transform_service.clients.process_dispatcher.read_process_definition self.mock_pd_delete = self.transform_service.clients.process_dispatcher.delete_process_definition self.mock_pd_schedule = self.transform_service.clients.process_dispatcher.schedule_process self.mock_pd_cancel = self.transform_service.clients.process_dispatcher.cancel_process self.mock_ps_create_stream = self.transform_service.clients.pubsub_management.create_stream self.mock_ps_create_sub = self.transform_service.clients.pubsub_management.create_subscription self.mock_ps_register = self.transform_service.clients.pubsub_management.register_producer self.mock_ps_activate = self.transform_service.clients.pubsub_management.activate_subscription self.mock_ps_read_sub = self.transform_service.clients.pubsub_management.read_subscription self.mock_cc_spawn = self.transform_service.container.spawn_process self.mock_cc_terminate = self.transform_service.container.proc_manager.terminate_process self.mock_cc_procs = self.transform_service.container.proc_manager.procs # test a create transform with identical names here def test_create_transform_full_config(self): # mocks proc_def = DotDict() proc_def['executable'] = {'module':'my_module', 'class':'class'} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([],[]) self.mock_pd_schedule.return_value = '123' # PID self.mock_rr_create.return_value = ('transform_id','garbage') self.mock_ps_read_sub.return_value = DotDict({'exchange_name':'input_stream_id'}) # execution configuration = {'proc_args':{'arg1':'value'}} ret = self.transform_service.create_transform(name='test_transform', process_definition_id='mock_procdef_id', in_subscription_id='mock_subscription_id', out_streams={'output':'mock_output_stream_id'}, configuration=configuration) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id='mock_subscription_id') # (1) sub, (1) stream, (1) procdef out_config = { 'process':{ 'name':'test_transform', 'type':'stream_process', 'listen_name':'input_stream_id', 'publish_streams':{'output':'mock_output_stream_id'}, 'transform_id': 'transform_id' }, 'proc_args':{ 'arg1':'value' } } self.assertEquals(self.mock_rr_create_assoc.call_count,3) self.mock_pd_schedule.assert_called_with( 'mock_procdef_id', None, out_config, "" ) self.assertTrue(self.mock_rr_create.called) def test_create_transform_no_config(self): # mocks proc_def = DotDict() proc_def['executable'] = {'module':'my_module', 'class':'class'} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([],[]) self.mock_cc_spawn.return_value = '123' #PID self.mock_pd_schedule.return_value = '123' # PID self.mock_rr_create.return_value = ('transform_id','garbage') self.mock_ps_read_sub.return_value = DotDict({'exchange_name':'input_stream_id'}) # execution configuration = {} ret = self.transform_service.create_transform(name='test_transform', process_definition_id='mock_procdef_id', in_subscription_id='mock_subscription_id', out_streams={'output':'mock_output_stream_id'}, configuration=configuration) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id='mock_subscription_id') # (1) sub, (1) stream, (1) procdef out_config = { 'process':{ 'name':'test_transform', 'type':'stream_process', 'listen_name':'input_stream_id', 'publish_streams':{'output':'mock_output_stream_id'}, 'transform_id': 'transform_id' } } self.assertEquals(self.mock_rr_create_assoc.call_count,3) self.mock_pd_schedule.assert_called_with( 'mock_procdef_id', None, out_config, "" ) self.assertTrue(self.mock_rr_create.called) def test_create_transform_no_stream(self): # mocks proc_def = DotDict() proc_def['executable'] = {'module':'my_module', 'class':'class'} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([],[]) self.mock_pd_schedule.return_value = '123' # PID self.mock_rr_create.return_value = ('transform_id','garbage') self.mock_ps_read_sub.return_value = DotDict({'exchange_name':'input_stream_id'}) # execution configuration = {'proc_args':{'arg1':'value'}} ret = self.transform_service.create_transform(name='test_transform', process_definition_id='mock_procdef_id', in_subscription_id='mock_subscription_id', configuration=configuration) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id='mock_subscription_id') # (1) sub, (1) stream, (1) procdef out_config = { 'process':{ 'name':'test_transform', 'type':'stream_process', 'listen_name':'input_stream_id', 'transform_id': 'transform_id' }, 'proc_args':{ 'arg1':'value' } } self.assertEquals(self.mock_rr_create_assoc.call_count,2) self.mock_pd_schedule.assert_called_with( 'mock_procdef_id', None, out_config, "" ) self.assertTrue(self.mock_rr_create.called) def test_update_transform(self): with self.assertRaises(NotImplementedError): self.transform_service.update_transform() def test_read_transform(self): # mocks self.mock_rr_read.return_value = 'mock_object' # execution ret = self.transform_service.read_transform('transform_id') # assertions self.mock_rr_read.assert_called_with('transform_id','') self.assertEquals(ret,'mock_object') def test_delete_transform(self): # mocks self.transform_service.read_transform = Mock() self.transform_service.read_transform.return_value = DotDict({'process_id':'pid'}) find_list = ['process_definition','subscription_id','stream_id'] def finds(*args, **kwargs): return ([find_list.pop(0)],'junk') self.mock_rr_find.side_effect = finds association_list = ['one','two','three'] def associations(*args,**kwargs): return [association_list.pop(0)] self.mock_rr_assoc.side_effect = associations # execution ret = self.transform_service.delete_transform('mock_transform_id') # assertions self.transform_service.read_transform.assert_called_with(transform_id='mock_transform_id') self.mock_pd_cancel.assert_called_with('pid') self.assertEquals(self.mock_rr_find.call_count,3) self.assertEquals(self.mock_rr_del_assoc.call_count,3) self.assertEquals(self.mock_rr_delete.call_count,1) def test_activate_transform(self): # mocks self.mock_rr_find.return_value = [['one','two','three'],'garbage'] # execution ret = self.transform_service.activate_transform('transform_id') # assertions self.mock_rr_find.assert_called_with('transform_id',PRED.hasSubscription,RT.Subscription,True) self.assertEquals(self.mock_ps_activate.call_count,3) # --- def test_activate_transform_nonexist(self): # mocks self.mock_rr_find.return_value = ([],'') # execution with self.assertRaises(NotFound): ret = self.transform_service.activate_transform('transform_id') def test_schedule_transform(self): # not implemented with self.assertRaises(NotImplementedError): self.transform_service.schedule_transform() def test_execute_transform(self): # Mocks procdef = ProcessDefinition( executable={ 'module':'ion.processes.data.transforms.transform_example', 'class':'ReverseTransform'} ) self.mock_pd_read.return_value = procdef retval = self.transform_service.execute_transform('1234',[1,2,3,4]) self.assertEquals(retval,[4,3,2,1])
class TransformManagementServiceTest(PyonTestCase): """Unit test for TransformManagementService """ def setUp(self): mock_clients = self._create_service_mock('transform_management') self.transform_service = TransformManagementService() self.transform_service.clients = mock_clients self.transform_service.clients.pubsub_management = DotDict() self.transform_service.clients.pubsub_management['XP'] = 'science.data' self.transform_service.clients.pubsub_management['create_stream'] = Mock() self.transform_service.clients.pubsub_management['create_subscription'] = Mock() self.transform_service.clients.pubsub_management['register_producer'] = Mock() self.transform_service.clients.pubsub_management['activate_subscription'] = Mock() self.transform_service.clients.pubsub_management['read_subscription'] = Mock() self.transform_service.container = DotDict() self.transform_service.container['spawn_process'] = Mock() self.transform_service.container['id'] = 'mock_container_id' self.transform_service.container['proc_manager'] = DotDict() self.transform_service.container.proc_manager['terminate_process'] = Mock() self.transform_service.container.proc_manager['procs'] = {} # CRUD Shortcuts self.mock_rr_create = self.transform_service.clients.resource_registry.create self.mock_rr_read = self.transform_service.clients.resource_registry.read self.mock_rr_update = self.transform_service.clients.resource_registry.update self.mock_rr_delete = self.transform_service.clients.resource_registry.delete self.mock_rr_find = self.transform_service.clients.resource_registry.find_objects self.mock_rr_find_res = self.transform_service.clients.resource_registry.find_resources self.mock_rr_assoc = self.transform_service.clients.resource_registry.find_associations self.mock_rr_create_assoc = self.transform_service.clients.resource_registry.create_association self.mock_rr_del_assoc = self.transform_service.clients.resource_registry.delete_association self.mock_pd_create = self.transform_service.clients.process_dispatcher.create_process_definition self.mock_pd_read = self.transform_service.clients.process_dispatcher.read_process_definition self.mock_pd_update = self.transform_service.clients.process_dispatcher.update_process_definition self.mock_pd_delete = self.transform_service.clients.process_dispatcher.delete_process_definition self.mock_pd_schedule = self.transform_service.clients.process_dispatcher.schedule_process self.mock_pd_cancel = self.transform_service.clients.process_dispatcher.cancel_process self.mock_ps_create_stream = self.transform_service.clients.pubsub_management.create_stream self.mock_ps_create_sub = self.transform_service.clients.pubsub_management.create_subscription self.mock_ps_register = self.transform_service.clients.pubsub_management.register_producer self.mock_ps_activate = self.transform_service.clients.pubsub_management.activate_subscription self.mock_ps_read_sub = self.transform_service.clients.pubsub_management.read_subscription self.mock_cc_spawn = self.transform_service.container.spawn_process self.mock_cc_terminate = self.transform_service.container.proc_manager.terminate_process self.mock_cc_procs = self.transform_service.container.proc_manager.procs # test a create transform with identical names here def test_create_transform_full_config(self): # mocks proc_def = DotDict() proc_def['executable'] = {'module':'my_module', 'class':'class'} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([],[]) self.mock_pd_schedule.return_value = '123' # PID self.mock_rr_create.return_value = ('transform_id','garbage') self.mock_ps_read_sub.return_value = DotDict({'exchange_name':'input_stream_id'}) # execution configuration = {'proc_args':{'arg1':'value'}} ret = self.transform_service.create_transform(name='test_transform', process_definition_id='mock_procdef_id', in_subscription_id='mock_subscription_id', out_streams={'output':'mock_output_stream_id'}, configuration=configuration) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id='mock_subscription_id') # (1) sub, (1) stream, (1) procdef out_config = { 'process':{ 'name':'test_transform', 'type':'stream_process', 'listen_name':'input_stream_id', 'publish_streams':{'output':'mock_output_stream_id'}, 'transform_id': 'transform_id' }, 'proc_args':{ 'arg1':'value' } } self.assertEquals(self.mock_rr_create_assoc.call_count,3) self.mock_pd_schedule.assert_called_with( 'mock_procdef_id', None, out_config, "" ) self.assertTrue(self.mock_rr_create.called) def test_create_transform_no_config(self): # mocks proc_def = DotDict() proc_def['executable'] = {'module':'my_module', 'class':'class'} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([],[]) self.mock_cc_spawn.return_value = '123' #PID self.mock_pd_schedule.return_value = '123' # PID self.mock_rr_create.return_value = ('transform_id','garbage') self.mock_ps_read_sub.return_value = DotDict({'exchange_name':'input_stream_id'}) # execution configuration = {} ret = self.transform_service.create_transform(name='test_transform', process_definition_id='mock_procdef_id', in_subscription_id='mock_subscription_id', out_streams={'output':'mock_output_stream_id'}, configuration=configuration) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id='mock_subscription_id') # (1) sub, (1) stream, (1) procdef out_config = { 'process':{ 'name':'test_transform', 'type':'stream_process', 'listen_name':'input_stream_id', 'publish_streams':{'output':'mock_output_stream_id'}, 'transform_id': 'transform_id' } } self.assertEquals(self.mock_rr_create_assoc.call_count,3) self.mock_pd_schedule.assert_called_with( 'mock_procdef_id', None, out_config, "" ) self.assertTrue(self.mock_rr_create.called) def test_create_transform_no_stream(self): # mocks proc_def = DotDict() proc_def['executable'] = {'module':'my_module', 'class':'class'} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([],[]) self.mock_pd_schedule.return_value = '123' # PID self.mock_rr_create.return_value = ('transform_id','garbage') self.mock_ps_read_sub.return_value = DotDict({'exchange_name':'input_stream_id'}) # execution configuration = {'proc_args':{'arg1':'value'}} ret = self.transform_service.create_transform(name='test_transform', process_definition_id='mock_procdef_id', in_subscription_id='mock_subscription_id', configuration=configuration) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id='mock_subscription_id') # (1) sub, (1) stream, (1) procdef out_config = { 'process':{ 'name':'test_transform', 'type':'stream_process', 'listen_name':'input_stream_id', 'transform_id': 'transform_id' }, 'proc_args':{ 'arg1':'value' } } self.assertEquals(self.mock_rr_create_assoc.call_count,2) self.mock_pd_schedule.assert_called_with( 'mock_procdef_id', None, out_config, "" ) self.assertTrue(self.mock_rr_create.called) def test_update_transform(self): with self.assertRaises(NotImplementedError): self.transform_service.update_transform() def test_read_transform(self): # mocks self.mock_rr_read.return_value = 'mock_object' # execution ret = self.transform_service.read_transform('transform_id') # assertions self.mock_rr_read.assert_called_with('transform_id','') self.assertEquals(ret,'mock_object') def test_delete_transform(self): # mocks self.transform_service.read_transform = Mock() self.transform_service.read_transform.return_value = DotDict({'process_id':'pid'}) find_list = ['process_definition','subscription_id','stream_id'] def finds(*args, **kwargs): return ([find_list.pop(0)],'junk') self.mock_rr_find.side_effect = finds association_list = ['one','two','three'] def associations(*args,**kwargs): return [association_list.pop(0)] self.mock_rr_assoc.side_effect = associations # execution ret = self.transform_service.delete_transform('mock_transform_id') # assertions self.transform_service.read_transform.assert_called_with(transform_id='mock_transform_id') self.mock_pd_cancel.assert_called_with('pid') self.assertEquals(self.mock_rr_find.call_count,3) self.assertEquals(self.mock_rr_del_assoc.call_count,3) self.assertEquals(self.mock_rr_delete.call_count,1) def test_activate_transform(self): # mocks self.mock_rr_find.return_value = [['one','two','three'],'garbage'] # execution ret = self.transform_service.activate_transform('transform_id') # assertions self.mock_rr_find.assert_called_with('transform_id',PRED.hasSubscription,RT.Subscription,True) self.assertEquals(self.mock_ps_activate.call_count,3) # --- def test_activate_transform_nonexist(self): # mocks self.mock_rr_find.return_value = ([],'') # execution with self.assertRaises(NotFound): ret = self.transform_service.activate_transform('transform_id') def test_schedule_transform(self): # not implemented with self.assertRaises(NotImplementedError): self.transform_service.schedule_transform() def test_execute_transform(self): # Mocks procdef = ProcessDefinition( executable={ 'module':'ion.processes.data.transforms.transform_example', 'class':'ReverseTransform'} ) self.mock_pd_read.return_value = procdef retval = self.transform_service.execute_transform('1234',[1,2,3,4]) self.assertEquals(retval,[4,3,2,1])
class TransformManagementServiceTest(PyonTestCase): """Unit test for TransformManagementService """ def setUp(self): mock_clients = self._create_service_mock("transform_management") self.transform_service = TransformManagementService() self.transform_service.clients = mock_clients self.transform_service.clients.pubsub_management = DotDict() self.transform_service.clients.pubsub_management["XP"] = "science.data" self.transform_service.clients.pubsub_management["create_stream"] = Mock() self.transform_service.clients.pubsub_management["create_subscription"] = Mock() self.transform_service.clients.pubsub_management["register_producer"] = Mock() self.transform_service.clients.pubsub_management["activate_subscription"] = Mock() self.transform_service.clients.pubsub_management["read_subscription"] = Mock() self.transform_service.container = DotDict() self.transform_service.container["spawn_process"] = Mock() self.transform_service.container["id"] = "mock_container_id" self.transform_service.container["proc_manager"] = DotDict() self.transform_service.container.proc_manager["terminate_process"] = Mock() self.transform_service.container.proc_manager["procs"] = {} # CRUD Shortcuts self.mock_rr_create = self.transform_service.clients.resource_registry.create self.mock_rr_read = self.transform_service.clients.resource_registry.read self.mock_rr_update = self.transform_service.clients.resource_registry.update self.mock_rr_delete = self.transform_service.clients.resource_registry.delete self.mock_rr_find = self.transform_service.clients.resource_registry.find_objects self.mock_rr_find_res = self.transform_service.clients.resource_registry.find_resources self.mock_rr_assoc = self.transform_service.clients.resource_registry.find_associations self.mock_rr_create_assoc = self.transform_service.clients.resource_registry.create_association self.mock_rr_del_assoc = self.transform_service.clients.resource_registry.delete_association self.mock_pd_create = self.transform_service.clients.process_dispatcher.create_process_definition self.mock_pd_read = self.transform_service.clients.process_dispatcher.read_process_definition self.mock_pd_update = self.transform_service.clients.process_dispatcher.update_process_definition self.mock_pd_delete = self.transform_service.clients.process_dispatcher.delete_process_definition self.mock_pd_schedule = self.transform_service.clients.process_dispatcher.schedule_process self.mock_pd_cancel = self.transform_service.clients.process_dispatcher.cancel_process self.mock_ps_create_stream = self.transform_service.clients.pubsub_management.create_stream self.mock_ps_create_sub = self.transform_service.clients.pubsub_management.create_subscription self.mock_ps_register = self.transform_service.clients.pubsub_management.register_producer self.mock_ps_activate = self.transform_service.clients.pubsub_management.activate_subscription self.mock_ps_read_sub = self.transform_service.clients.pubsub_management.read_subscription self.mock_cc_spawn = self.transform_service.container.spawn_process self.mock_cc_terminate = self.transform_service.container.proc_manager.terminate_process self.mock_cc_procs = self.transform_service.container.proc_manager.procs # test a create transform with identical names here def test_create_transform_full_config(self): # mocks proc_def = DotDict() proc_def["executable"] = {"module": "my_module", "class": "class"} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([], []) self.mock_pd_schedule.return_value = "123" # PID self.mock_rr_create.return_value = ("transform_id", "garbage") self.mock_ps_read_sub.return_value = DotDict({"exchange_name": "input_stream_id"}) # execution configuration = {"proc_args": {"arg1": "value"}} ret = self.transform_service.create_transform( name="test_transform", process_definition_id="mock_procdef_id", in_subscription_id="mock_subscription_id", out_streams={"output": "mock_output_stream_id"}, configuration=configuration, ) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id="mock_subscription_id") # (1) sub, (1) stream, (1) procdef out_config = { "process": { "name": "test_transform", "type": "stream_process", "listen_name": "input_stream_id", "publish_streams": {"output": "mock_output_stream_id"}, "transform_id": "transform_id", }, "proc_args": {"arg1": "value"}, } self.assertEquals(self.mock_rr_create_assoc.call_count, 3) self.mock_pd_schedule.assert_called_with("mock_procdef_id", None, out_config, "") self.assertTrue(self.mock_rr_create.called) def test_create_transform_no_config(self): # mocks proc_def = DotDict() proc_def["executable"] = {"module": "my_module", "class": "class"} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([], []) self.mock_cc_spawn.return_value = "123" # PID self.mock_pd_schedule.return_value = "123" # PID self.mock_rr_create.return_value = ("transform_id", "garbage") self.mock_ps_read_sub.return_value = DotDict({"exchange_name": "input_stream_id"}) # execution configuration = {} ret = self.transform_service.create_transform( name="test_transform", process_definition_id="mock_procdef_id", in_subscription_id="mock_subscription_id", out_streams={"output": "mock_output_stream_id"}, configuration=configuration, ) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id="mock_subscription_id") # (1) sub, (1) stream, (1) procdef out_config = { "process": { "name": "test_transform", "type": "stream_process", "listen_name": "input_stream_id", "publish_streams": {"output": "mock_output_stream_id"}, "transform_id": "transform_id", } } self.assertEquals(self.mock_rr_create_assoc.call_count, 3) self.mock_pd_schedule.assert_called_with("mock_procdef_id", None, out_config, "") self.assertTrue(self.mock_rr_create.called) def test_create_transform_no_stream(self): # mocks proc_def = DotDict() proc_def["executable"] = {"module": "my_module", "class": "class"} self.mock_pd_read.return_value = proc_def self.mock_rr_find_res.return_value = ([], []) self.mock_pd_schedule.return_value = "123" # PID self.mock_rr_create.return_value = ("transform_id", "garbage") self.mock_ps_read_sub.return_value = DotDict({"exchange_name": "input_stream_id"}) # execution configuration = {"proc_args": {"arg1": "value"}} ret = self.transform_service.create_transform( name="test_transform", process_definition_id="mock_procdef_id", in_subscription_id="mock_subscription_id", configuration=configuration, ) # assertions # look up on procdef self.mock_ps_read_sub.assert_called_with(subscription_id="mock_subscription_id") # (1) sub, (1) stream, (1) procdef out_config = { "process": { "name": "test_transform", "type": "stream_process", "listen_name": "input_stream_id", "transform_id": "transform_id", }, "proc_args": {"arg1": "value"}, } self.assertEquals(self.mock_rr_create_assoc.call_count, 2) self.mock_pd_schedule.assert_called_with("mock_procdef_id", None, out_config, "") self.assertTrue(self.mock_rr_create.called) def test_update_transform(self): with self.assertRaises(NotImplementedError): self.transform_service.update_transform() def test_read_transform(self): # mocks self.mock_rr_read.return_value = "mock_object" # execution ret = self.transform_service.read_transform("transform_id") # assertions self.mock_rr_read.assert_called_with("transform_id", "") self.assertEquals(ret, "mock_object") def test_delete_transform(self): # mocks self.transform_service.read_transform = Mock() self.transform_service.read_transform.return_value = DotDict({"process_id": "pid"}) find_list = ["process_definition", "subscription_id", "stream_id"] def finds(*args, **kwargs): return ([find_list.pop(0)], "junk") self.mock_rr_find.side_effect = finds association_list = ["one", "two", "three"] def associations(*args, **kwargs): return [association_list.pop(0)] self.mock_rr_assoc.side_effect = associations # execution ret = self.transform_service.delete_transform("mock_transform_id") # assertions self.transform_service.read_transform.assert_called_with(transform_id="mock_transform_id") self.mock_pd_cancel.assert_called_with("pid") self.assertEquals(self.mock_rr_find.call_count, 3) self.assertEquals(self.mock_rr_del_assoc.call_count, 3) self.assertEquals(self.mock_rr_delete.call_count, 1) def test_activate_transform(self): # mocks self.mock_rr_find.return_value = [["one", "two", "three"], "garbage"] # execution ret = self.transform_service.activate_transform("transform_id") # assertions self.mock_rr_find.assert_called_with("transform_id", PRED.hasSubscription, RT.Subscription, True) self.assertEquals(self.mock_ps_activate.call_count, 3) # --- def test_activate_transform_nonexist(self): # mocks self.mock_rr_find.return_value = ([], "") # execution with self.assertRaises(NotFound): ret = self.transform_service.activate_transform("transform_id") def test_schedule_transform(self): # not implemented with self.assertRaises(NotImplementedError): self.transform_service.schedule_transform() def test_execute_transform(self): # Mocks procdef = ProcessDefinition( executable={"module": "ion.processes.data.transforms.transform_example", "class": "ReverseTransform"} ) self.mock_pd_read.return_value = procdef retval = self.transform_service.execute_transform("1234", [1, 2, 3, 4]) self.assertEquals(retval, [4, 3, 2, 1])