class ActionService(object): """ Instance of this class is passed to the action instance and exposes "public" methods which can be called by the action. """ def __init__(self, action_wrapper): logger = get_logger_for_python_runner_action(action_name=action_wrapper._class_name) self._action_wrapper = action_wrapper self._datastore_service = DatastoreService(logger=logger, pack_name=self._action_wrapper._pack, class_name=self._action_wrapper._class_name, api_username='******') ################################## # Methods for datastore management ################################## def list_values(self, local=True, prefix=None): return self._datastore_service.list_values(local, prefix) def get_value(self, name, local=True): return self._datastore_service.get_value(name, local) def set_value(self, name, value, ttl=None, local=True): return self._datastore_service.set_value(name, value, ttl, local) def delete_value(self, name, local=True): return self._datastore_service.delete_value(name, local)
def test_datastore_token_timeout(self): datastore_service = DatastoreService(logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 token_expire_time = get_datetime_utc_now() - timedelta(seconds=5) datastore_service._client = mock_api_client datastore_service._token_expire = token_expire_time self._set_mock_api_client(mock_api_client) with mock.patch('st2common.services.datastore.Client', return_value=mock_api_client) as datastore_client: value = datastore_service.get_value(name='test1', local=False) datastore_client.assert_called() self.assertEqual(value, kvp1.value) self.assertGreater(datastore_service._token_expire, token_expire_time)
def test_datastore_token_timeout(self): datastore_service = DatastoreService(logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 token_expire_time = get_datetime_utc_now() - timedelta(seconds=5) datastore_service._client = mock_api_client datastore_service._token_expire = token_expire_time self._set_mock_api_client(mock_api_client) with mock.patch( 'st2common.services.datastore.Client', return_value=mock_api_client ) as datastore_client: value = datastore_service.get_value(name='test1', local=False) datastore_client.assert_called() self.assertEqual(value, kvp1.value) self.assertGreater(datastore_service._token_expire, token_expire_time)
class ActionService(object): """ Instance of this class is passed to the action instance and exposes "public" methods which can be called by the action. """ def __init__(self, action_wrapper): logger = get_logger_for_python_runner_action(action_name=action_wrapper._class_name) self._action_wrapper = action_wrapper self._datastore_service = DatastoreService(logger=logger, pack_name=self._action_wrapper._pack, class_name=self._action_wrapper._class_name, api_username='******') ################################## # Methods for datastore management ################################## def list_values(self, local=True, prefix=None): return self._datastore_service.list_values(local, prefix) def get_value(self, name, local=True, scope=SYSTEM_SCOPE, decrypt=False): return self._datastore_service.get_value(name, local, scope=scope, decrypt=decrypt) def set_value(self, name, value, ttl=None, local=True, scope=SYSTEM_SCOPE, encrypt=False): return self._datastore_service.set_value(name, value, ttl, local, scope=scope, encrypt=encrypt) def delete_value(self, name, local=True, scope=SYSTEM_SCOPE): return self._datastore_service.delete_value(name, local)
class SensorService(object): """ Instance of this class is passed to the sensor instance and exposes "public" methods which can be called by the sensor. """ def __init__(self, sensor_wrapper): self._sensor_wrapper = sensor_wrapper self._logger = self._sensor_wrapper._logger self._dispatcher = TriggerDispatcher(self._logger) self._datastore_service = DatastoreService( logger=self._logger, pack_name=self._sensor_wrapper._pack, class_name=self._sensor_wrapper._class_name, api_username='******') self._client = None def get_logger(self, name): """ Retrieve an instance of a logger to be used by the sensor class. """ logger_name = '%s.%s' % (self._sensor_wrapper._logger.name, name) logger = logging.getLogger(logger_name) logger.propagate = True return logger def dispatch(self, trigger, payload=None, trace_tag=None): """ Method which dispatches the trigger. :param trigger: Full name / reference of the trigger. :type trigger: ``str`` :param payload: Trigger payload. :type payload: ``dict`` :param trace_tag: Tracer to track the triggerinstance. :type trace_tags: ``str`` """ # empty strings trace_context = TraceContext( trace_tag=trace_tag) if trace_tag else None self.dispatch_with_context(trigger, payload=payload, trace_context=trace_context) def dispatch_with_context(self, trigger, payload=None, trace_context=None): """ Method which dispatches the trigger. :param trigger: Full name / reference of the trigger. :type trigger: ``str`` :param payload: Trigger payload. :type payload: ``dict`` :param trace_context: Trace context to associate with Trigger. :type trace_context: ``st2common.api.models.api.trace.TraceContext`` """ self._dispatcher.dispatch(trigger, payload=payload, trace_context=trace_context) ################################## # Methods for datastore management ################################## def list_values(self, local=True, prefix=None): return self._datastore_service.list_values(local, prefix) def get_value(self, name, local=True): return self._datastore_service.get_value(name, local) def set_value(self, name, value, ttl=None, local=True): return self._datastore_service.set_value(name, value, ttl, local) def delete_value(self, name, local=True): return self._datastore_service.delete_value(name, local)
class DatastoreServiceTestCase(unittest2.TestCase): def setUp(self): super(DatastoreServiceTestCase, self).setUp() self._datastore_service = DatastoreService( logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') self._datastore_service._get_api_client = mock.Mock() def test_datastore_operations_list_values(self): # Verify prefix filtering mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) self._datastore_service.list_values(local=True, prefix=None) mock_api_client.keys.get_all.assert_called_with( prefix='core.TestSensor:') self._datastore_service.list_values(local=True, prefix='ponies') mock_api_client.keys.get_all.assert_called_with( prefix='core.TestSensor:ponies') self._datastore_service.list_values(local=False, prefix=None) mock_api_client.keys.get_all.assert_called_with(prefix=None) self._datastore_service.list_values(local=False, prefix='ponies') mock_api_client.keys.get_all.assert_called_with(prefix='ponies') # No values in the datastore mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(values, []) values = self._datastore_service.list_values(local=False) self.assertEqual(values, []) # Values in the datastore kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' kvp2 = KeyValuePair() kvp2.name = 'test2' kvp2.value = 'bar' mock_return_value = [kvp1, kvp2] mock_api_client.keys.get_all.return_value = mock_return_value self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(len(values), 2) self.assertEqual(values, mock_return_value) def test_datastore_operations_get_value(self): mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 self._set_mock_api_client(mock_api_client) value = self._datastore_service.get_value(name='test1', local=False) self.assertEqual(value, kvp1.value) def test_datastore_operations_set_value(self): mock_api_client = mock.Mock() mock_api_client.keys.update.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.set_value(name='test1', value='foo', local=False) self.assertTrue(value) kvp = mock_api_client.keys.update.call_args[1]['instance'] self.assertEquals(kvp.value, 'foo') self.assertEquals(kvp.scope, SYSTEM_SCOPE) def test_datastore_operations_delete_value(self): mock_api_client = mock.Mock() mock_api_client.keys.delete.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.delete_value(name='test', local=False) self.assertTrue(value) def test_datastore_operations_set_encrypted_value(self): mock_api_client = mock.Mock() mock_api_client.keys.update.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.set_value(name='test1', value='foo', local=False, encrypt=True) self.assertTrue(value) kvp = mock_api_client.keys.update.call_args[1]['instance'] self.assertEquals(kvp.value, 'foo') self.assertTrue(kvp.secret) self.assertEquals(kvp.scope, SYSTEM_SCOPE) def test_datastore_unsupported_scope(self): self.assertRaises(ValueError, self._datastore_service.get_value, name='test1', scope='NOT_SYSTEM') self.assertRaises(ValueError, self._datastore_service.set_value, name='test1', value='foo', scope='NOT_SYSTEM') self.assertRaises(ValueError, self._datastore_service.delete_value, name='test1', scope='NOT_SYSTEM') def test_datastore_get_exception(self): mock_api_client = mock.Mock() mock_api_client.keys.get_by_id.side_effect = ValueError( "Exception test") self._set_mock_api_client(mock_api_client) value = self._datastore_service.get_value(name='test1') self.assertEquals(value, None) def test_datastore_delete_exception(self): mock_api_client = mock.Mock() mock_api_client.keys.delete.side_effect = ValueError("Exception test") self._set_mock_api_client(mock_api_client) delete_success = self._datastore_service.delete_value(name='test1') self.assertEquals(delete_success, False) def test_datastore_token_timeout(self): datastore_service = DatastoreService(logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 token_expire_time = get_datetime_utc_now() - timedelta(seconds=5) datastore_service._client = mock_api_client datastore_service._token_expire = token_expire_time self._set_mock_api_client(mock_api_client) with mock.patch('st2common.services.datastore.Client', return_value=mock_api_client) as datastore_client: value = datastore_service.get_value(name='test1', local=False) datastore_client.assert_called() self.assertEqual(value, kvp1.value) self.assertGreater(datastore_service._token_expire, token_expire_time) def _set_mock_api_client(self, mock_api_client): mock_method = mock.Mock() mock_method.return_value = mock_api_client self._datastore_service._get_api_client = mock_method
class SensorService(object): """ Instance of this class is passed to the sensor instance and exposes "public" methods which can be called by the sensor. """ def __init__(self, sensor_wrapper): self._sensor_wrapper = sensor_wrapper self._logger = self._sensor_wrapper._logger self._dispatcher = TriggerDispatcher(self._logger) self._datastore_service = DatastoreService(logger=self._logger, pack_name=self._sensor_wrapper._pack, class_name=self._sensor_wrapper._class_name, api_username='******') self._client = None def get_logger(self, name): """ Retrieve an instance of a logger to be used by the sensor class. """ logger_name = '%s.%s' % (self._sensor_wrapper._logger.name, name) logger = logging.getLogger(logger_name) logger.propagate = True return logger def dispatch(self, trigger, payload=None, trace_tag=None): """ Method which dispatches the trigger. :param trigger: Full name / reference of the trigger. :type trigger: ``str`` :param payload: Trigger payload. :type payload: ``dict`` :param trace_tag: Tracer to track the triggerinstance. :type trace_tags: ``str`` """ # empty strings trace_context = TraceContext(trace_tag=trace_tag) if trace_tag else None self.dispatch_with_context(trigger, payload=payload, trace_context=trace_context) def dispatch_with_context(self, trigger, payload=None, trace_context=None): """ Method which dispatches the trigger. :param trigger: Full name / reference of the trigger. :type trigger: ``str`` :param payload: Trigger payload. :type payload: ``dict`` :param trace_context: Trace context to associate with Trigger. :type trace_context: ``st2common.api.models.api.trace.TraceContext`` """ self._dispatcher.dispatch(trigger, payload=payload, trace_context=trace_context) ################################## # Methods for datastore management ################################## def list_values(self, local=True, prefix=None): return self._datastore_service.list_values(local, prefix) def get_value(self, name, local=True): return self._datastore_service.get_value(name, local) def set_value(self, name, value, ttl=None, local=True): return self._datastore_service.set_value(name, value, ttl, local) def delete_value(self, name, local=True): return self._datastore_service.delete_value(name, local)
class SensorService(object): """ Instance of this class is passed to the sensor instance and exposes "public" methods which can be called by the sensor. """ def __init__(self, sensor_wrapper): self._sensor_wrapper = sensor_wrapper self._logger = self._sensor_wrapper._logger self._dispatcher = TriggerDispatcher(self._logger) self._datastore_service = DatastoreService( logger=self._logger, pack_name=self._sensor_wrapper._pack, class_name=self._sensor_wrapper._class_name, api_username='******') self._client = None def get_logger(self, name): """ Retrieve an instance of a logger to be used by the sensor class. """ logger_name = '%s.%s' % (self._sensor_wrapper._logger.name, name) logger = logging.getLogger(logger_name) logger.propagate = True return logger def dispatch(self, trigger, payload=None, trace_tag=None): """ Method which dispatches the trigger. :param trigger: Full name / reference of the trigger. :type trigger: ``str`` :param payload: Trigger payload. :type payload: ``dict`` :param trace_tag: Tracer to track the triggerinstance. :type trace_tags: ``str`` """ # empty strings trace_context = TraceContext( trace_tag=trace_tag) if trace_tag else None self.dispatch_with_context(trigger, payload=payload, trace_context=trace_context) def dispatch_with_context(self, trigger, payload=None, trace_context=None): """ Method which dispatches the trigger. :param trigger: Full name / reference of the trigger. :type trigger: ``str`` :param payload: Trigger payload. :type payload: ``dict`` :param trace_context: Trace context to associate with Trigger. :type trace_context: ``st2common.api.models.api.trace.TraceContext`` """ # This means specified payload is complied with trigger_type schema, or not. is_valid = True try: validate_trigger_payload(trigger_type_ref=trigger, payload=payload) except (ValidationError, Exception) as e: is_valid = False self._logger.warn( 'Failed to validate payload (%s) for trigger "%s": %s' % (str(payload), trigger, str(e))) # If validation is disabled, still dispatch a trigger even if it failed validation # This condition prevents unexpected restriction. if not is_valid and cfg.CONF.system.validate_trigger_payload: self._logger.warn( 'Trigger payload validation failed and validation is enabled, not ' 'dispatching a trigger "%s" (%s)' % (trigger, str(payload))) return None self._dispatcher.dispatch(trigger, payload=payload, trace_context=trace_context) ################################## # Methods for datastore management ################################## def list_values(self, local=True, prefix=None): return self._datastore_service.list_values(local, prefix) def get_value(self, name, local=True): return self._datastore_service.get_value(name, local) def set_value(self, name, value, ttl=None, local=True): return self._datastore_service.set_value(name, value, ttl, local) def delete_value(self, name, local=True): return self._datastore_service.delete_value(name, local)
class DatastoreServiceTestCase(unittest2.TestCase): def setUp(self): super(DatastoreServiceTestCase, self).setUp() self._datastore_service = DatastoreService(logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') self._datastore_service._get_api_client = mock.Mock() def test_datastore_operations_list_values(self): # Verify prefix filtering mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) self._datastore_service.list_values(local=True, prefix=None) mock_api_client.keys.get_all.assert_called_with(prefix='core.TestSensor:') self._datastore_service.list_values(local=True, prefix='ponies') mock_api_client.keys.get_all.assert_called_with(prefix='core.TestSensor:ponies') self._datastore_service.list_values(local=False, prefix=None) mock_api_client.keys.get_all.assert_called_with(prefix=None) self._datastore_service.list_values(local=False, prefix='ponies') mock_api_client.keys.get_all.assert_called_with(prefix='ponies') # No values in the datastore mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(values, []) values = self._datastore_service.list_values(local=False) self.assertEqual(values, []) # Values in the datastore kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' kvp2 = KeyValuePair() kvp2.name = 'test2' kvp2.value = 'bar' mock_return_value = [kvp1, kvp2] mock_api_client.keys.get_all.return_value = mock_return_value self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(len(values), 2) self.assertEqual(values, mock_return_value) def test_datastore_operations_get_value(self): mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 self._set_mock_api_client(mock_api_client) value = self._datastore_service.get_value(name='test1', local=False) self.assertEqual(value, kvp1.value) def test_datastore_operations_set_value(self): mock_api_client = mock.Mock() mock_api_client.keys.update.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.set_value(name='test1', value='foo', local=False) self.assertTrue(value) kvp = mock_api_client.keys.update.call_args[1]['instance'] self.assertEquals(kvp.value, 'foo') self.assertEquals(kvp.scope, SYSTEM_SCOPE) def test_datastore_operations_delete_value(self): mock_api_client = mock.Mock() mock_api_client.keys.delete.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.delete_value(name='test', local=False) self.assertTrue(value) def test_datastore_operations_set_encrypted_value(self): mock_api_client = mock.Mock() mock_api_client.keys.update.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.set_value(name='test1', value='foo', local=False, encrypt=True) self.assertTrue(value) kvp = mock_api_client.keys.update.call_args[1]['instance'] self.assertEquals(kvp.value, 'foo') self.assertTrue(kvp.secret) self.assertEquals(kvp.scope, SYSTEM_SCOPE) def test_datastore_unsupported_scope(self): self.assertRaises(ValueError, self._datastore_service.get_value, name='test1', scope='NOT_SYSTEM') self.assertRaises(ValueError, self._datastore_service.set_value, name='test1', value='foo', scope='NOT_SYSTEM') self.assertRaises(ValueError, self._datastore_service.delete_value, name='test1', scope='NOT_SYSTEM') def test_datastore_get_exception(self): mock_api_client = mock.Mock() mock_api_client.keys.get_by_id.side_effect = ValueError("Exception test") self._set_mock_api_client(mock_api_client) value = self._datastore_service.get_value(name='test1') self.assertEquals(value, None) def test_datastore_delete_exception(self): mock_api_client = mock.Mock() mock_api_client.keys.delete.side_effect = ValueError("Exception test") self._set_mock_api_client(mock_api_client) delete_success = self._datastore_service.delete_value(name='test1') self.assertEquals(delete_success, False) def test_datastore_token_timeout(self): datastore_service = DatastoreService(logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 token_expire_time = get_datetime_utc_now() - timedelta(seconds=5) datastore_service._client = mock_api_client datastore_service._token_expire = token_expire_time self._set_mock_api_client(mock_api_client) with mock.patch( 'st2common.services.datastore.Client', return_value=mock_api_client ) as datastore_client: value = datastore_service.get_value(name='test1', local=False) datastore_client.assert_called() self.assertEqual(value, kvp1.value) self.assertGreater(datastore_service._token_expire, token_expire_time) def _set_mock_api_client(self, mock_api_client): mock_method = mock.Mock() mock_method.return_value = mock_api_client self._datastore_service._get_api_client = mock_method
class DatastoreServiceTestCase(unittest2.TestCase): def setUp(self): super(DatastoreServiceTestCase, self).setUp() self._datastore_service = DatastoreService( logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') self._datastore_service._get_api_client = mock.Mock() def test_datastore_operations_list_values(self): # Verify prefix filtering mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) self._datastore_service.list_values(local=True, prefix=None) mock_api_client.keys.get_all.assert_called_with( prefix='core.TestSensor:') self._datastore_service.list_values(local=True, prefix='ponies') mock_api_client.keys.get_all.assert_called_with( prefix='core.TestSensor:ponies') self._datastore_service.list_values(local=False, prefix=None) mock_api_client.keys.get_all.assert_called_with(prefix=None) self._datastore_service.list_values(local=False, prefix='ponies') mock_api_client.keys.get_all.assert_called_with(prefix='ponies') # No values in the datastore mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(values, []) values = self._datastore_service.list_values(local=False) self.assertEqual(values, []) # Values in the datastore kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' kvp2 = KeyValuePair() kvp2.name = 'test2' kvp2.value = 'bar' mock_return_value = [kvp1, kvp2] mock_api_client.keys.get_all.return_value = mock_return_value self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(len(values), 2) self.assertEqual(values, mock_return_value) def test_datastore_operations_get_value(self): mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 self._set_mock_api_client(mock_api_client) value = self._datastore_service.get_value(name='test1', local=False) self.assertEqual(value, kvp1.value) def test_datastore_operations_set_value(self): mock_api_client = mock.Mock() mock_api_client.keys.update.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.set_value(name='test1', value='foo', local=False) self.assertTrue(value) def test_datastore_operations_delete_value(self): mock_api_client = mock.Mock() mock_api_client.keys.delete.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.delete_value(name='test', local=False) self.assertTrue(value) def _set_mock_api_client(self, mock_api_client): mock_method = mock.Mock() mock_method.return_value = mock_api_client self._datastore_service._get_api_client = mock_method
class DatastoreServiceTestCase(unittest2.TestCase): def setUp(self): super(DatastoreServiceTestCase, self).setUp() self._datastore_service = DatastoreService(logger=mock.Mock(), pack_name='core', class_name='TestSensor', api_username='******') self._datastore_service._get_api_client = mock.Mock() def test_datastore_operations_list_values(self): # Verify prefix filtering mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) self._datastore_service.list_values(local=True, prefix=None) mock_api_client.keys.get_all.assert_called_with(prefix='core.TestSensor:') self._datastore_service.list_values(local=True, prefix='ponies') mock_api_client.keys.get_all.assert_called_with(prefix='core.TestSensor:ponies') self._datastore_service.list_values(local=False, prefix=None) mock_api_client.keys.get_all.assert_called_with(prefix=None) self._datastore_service.list_values(local=False, prefix='ponies') mock_api_client.keys.get_all.assert_called_with(prefix='ponies') # No values in the datastore mock_api_client = mock.Mock() mock_api_client.keys.get_all.return_value = [] self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(values, []) values = self._datastore_service.list_values(local=False) self.assertEqual(values, []) # Values in the datastore kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' kvp2 = KeyValuePair() kvp2.name = 'test2' kvp2.value = 'bar' mock_return_value = [kvp1, kvp2] mock_api_client.keys.get_all.return_value = mock_return_value self._set_mock_api_client(mock_api_client) values = self._datastore_service.list_values(local=True) self.assertEqual(len(values), 2) self.assertEqual(values, mock_return_value) def test_datastore_operations_get_value(self): mock_api_client = mock.Mock() kvp1 = KeyValuePair() kvp1.name = 'test1' kvp1.value = 'bar' mock_api_client.keys.get_by_id.return_value = kvp1 self._set_mock_api_client(mock_api_client) value = self._datastore_service.get_value(name='test1', local=False) self.assertEqual(value, kvp1.value) def test_datastore_operations_set_value(self): mock_api_client = mock.Mock() mock_api_client.keys.update.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.set_value(name='test1', value='foo', local=False) self.assertTrue(value) def test_datastore_operations_delete_value(self): mock_api_client = mock.Mock() mock_api_client.keys.delete.return_value = True self._set_mock_api_client(mock_api_client) value = self._datastore_service.delete_value(name='test', local=False) self.assertTrue(value) def _set_mock_api_client(self, mock_api_client): mock_method = mock.Mock() mock_method.return_value = mock_api_client self._datastore_service._get_api_client = mock_method