def test_get_finalized_params_system_values(self): KeyValuePair.add_or_update( KeyValuePairDB(name='actionstr', value='foo')) KeyValuePair.add_or_update( KeyValuePairDB(name='actionnumber', value='1.0')) params = {'runnerint': 555} actionexec_db = self._get_action_exec_db_model(params) runner_params, action_params = param_utils.get_finalized_params( ParamsUtilsTest.runnertype_db.runner_parameters, ParamsUtilsTest.action_system_default_db.parameters, actionexec_db.parameters) # Asserts for runner params. # Assert that default values for runner params are resolved. self.assertEqual(runner_params.get('runnerstr'), 'defaultfoo') # Assert that a runner param from action exec is picked up. self.assertEqual(runner_params.get('runnerint'), 555) # Assert that an immutable param cannot be overriden by action param or execution param. self.assertEqual(runner_params.get('runnerimmutable'), 'runnerimmutable') # Asserts for action params. self.assertEqual(action_params.get('actionstr'), 'foo') self.assertEqual(action_params.get('actionnumber'), 1.0)
def test_non_hierarchical_lookup(self): k1 = KeyValuePair.add_or_update(KeyValuePairDB(name='k1', value='v1')) k2 = KeyValuePair.add_or_update(KeyValuePairDB(name='k2', value='v2')) k3 = KeyValuePair.add_or_update(KeyValuePairDB(name='k3', value='v3')) lookup = KeyValueLookup() self.assertEquals(str(lookup.k1), k1.value) self.assertEquals(str(lookup.k2), k2.value) self.assertEquals(str(lookup.k3), k3.value)
def test_non_hierarchical_lookup(self): k1 = KeyValuePair.add_or_update(KeyValuePairDB(name='k1', value='v1')) k2 = KeyValuePair.add_or_update(KeyValuePairDB(name='k2', value='v2')) k3 = KeyValuePair.add_or_update(KeyValuePairDB(name='k3', value='v3')) lookup = KeyValueLookup() self.assertEquals(str(lookup.k1), k1.value) self.assertEquals(str(lookup.k2), k2.value) self.assertEquals(str(lookup.k3), k3.value)
def test_hierarchical_lookup_dict(self): k1 = KeyValuePair.add_or_update(KeyValuePairDB(name='a.b', value='v1')) k2 = KeyValuePair.add_or_update(KeyValuePairDB(name='a.b.c', value='v2')) k3 = KeyValuePair.add_or_update(KeyValuePairDB(name='b.c', value='v3')) lookup = KeyValueLookup() self.assertEquals(str(lookup['a']['b']), k1.value) self.assertEquals(str(lookup['a']['b']['c']), k2.value) self.assertEquals(str(lookup['b']['c']), k3.value) self.assertEquals(str(lookup['a']), '')
def test_hierarchical_lookup_dict(self): k1 = KeyValuePair.add_or_update(KeyValuePairDB(name='a.b', value='v1')) k2 = KeyValuePair.add_or_update( KeyValuePairDB(name='a.b.c', value='v2')) k3 = KeyValuePair.add_or_update(KeyValuePairDB(name='b.c', value='v3')) lookup = KeyValueLookup() self.assertEquals(str(lookup['a']['b']), k1.value) self.assertEquals(str(lookup['a']['b']['c']), k2.value) self.assertEquals(str(lookup['b']['c']), k3.value) self.assertEquals(str(lookup['a']), '')
def post(self, kvp): """ Create a new key value pair. Handles requests: POST /keys/ """ LOG.info('POST /keys/ with key value data=%s', kvp) try: kvp_db = KeyValuePairAPI.to_model(kvp) LOG.debug( '/keys/ POST verified KeyValuePairAPI and ' 'formulated KeyValuePairDB=%s', kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s.', kvp) abort(http_client.BAD_REQUEST, str(e)) return kvp_db = KeyValuePair.add_or_update(kvp_db) LOG.audit('KeyValuePair created. KeyValuePair=%s', kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('POST /keys/ client_result=%s', kvp_api) return kvp_api
def put(self, name, kvp): """ Create a new entry or update an existing one. """ LOG.info('PUT /keys/ with key name=%s and data=%s', name, kvp) # TODO: There is a race, add custom add_or_update which updates by non # id field existing_kvp = self.__get_by_name(name=name) kvp.name = name try: kvp_db = KeyValuePairAPI.to_model(kvp) if existing_kvp: kvp_db.id = existing_kvp.id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return LOG.audit('KeyValuePair updated. KeyValuePair=%s', kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('PUT /keys/ client_result=%s', kvp_api) return kvp_api
def put(self, id, kvp): LOG.info('PUT /keys/ with key id=%s and data=%s', id, kvp) kvp_db = self.__get_by_id(id) LOG.debug('PUT /keys/ lookup with id=%s found object: %s', id, kvp_db) try: if kvp.id and kvp.id != id: LOG.warning( 'Discarding mismatched id=%s found in payload ' 'and using uri_id=%s.', kvp.id, id) old_kvp_db = kvp_db kvp_db = KeyValuePairAPI.to_model(kvp) kvp_db.id = id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return LOG.audit( 'KeyValuePair updated. KeyValuePair=%s and original KeyValuePair=%s', kvp_db, old_kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('PUT /keys/ client_result=%s', kvp_api) return kvp_api
def put(self, id, kvp): LOG.info('PUT /keys/ with key id=%s and data=%s', id, kvp) kvp_db = self.__get_by_id(id) LOG.debug('PUT /keys/ lookup with id=%s found object: %s', id, kvp_db) try: if kvp.id and kvp.id != id: LOG.warning('Discarding mismatched id=%s found in payload ' 'and using uri_id=%s.', kvp.id, id) old_kvp_db = kvp_db kvp_db = KeyValuePairAPI.to_model(kvp) kvp_db.id = id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return LOG.audit('KeyValuePair updated. KeyValuePair=%s and original KeyValuePair=%s', kvp_db, old_kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('PUT /keys/ client_result=%s', kvp_api) return kvp_api
def post(self, kvp): """ Create a new key value pair. Handles requests: POST /keys/ """ LOG.info('POST /keys/ with key value data=%s', kvp) try: kvp_db = KeyValuePairAPI.to_model(kvp) LOG.debug('/keys/ POST verified KeyValuePairAPI and ' 'formulated KeyValuePairDB=%s', kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s.', kvp) abort(http_client.BAD_REQUEST, str(e)) return kvp_db = KeyValuePair.add_or_update(kvp_db) LOG.audit('KeyValuePair created. KeyValuePair=%s', kvp_db) kvp_api = KeyValuePairAPI.from_model(kvp_db) LOG.debug('POST /keys/ client_result=%s', kvp_api) return kvp_api
def put(self, name, kvp): """ Create a new entry or update an existing one. """ # TODO: There is a race, add custom add_or_update which updates by non # id field existing_kvp = self.__get_by_name(name=name) kvp.name = name try: kvp_db = KeyValuePairAPI.to_model(kvp) if existing_kvp: kvp_db.id = existing_kvp.id kvp_db = KeyValuePair.add_or_update(kvp_db) except (ValidationError, ValueError) as e: LOG.exception('Validation failed for key value data=%s', kvp) abort(http_client.BAD_REQUEST, str(e)) return extra = {'kvp_db': kvp_db} LOG.audit('KeyValuePair updated. KeyValuePair.id=%s' % (kvp_db.id), extra=extra) kvp_api = KeyValuePairAPI.from_model(kvp_db) return kvp_api
def test_system_transform(self): k5 = KeyValuePair.add_or_update(KeyValuePairDB(name='k5', value='v5')) k6 = KeyValuePair.add_or_update(KeyValuePairDB(name='k6', value='v6')) k7 = KeyValuePair.add_or_update(KeyValuePairDB(name='k7', value='v7')) try: transformer = datatransform.get_transformer(PAYLOAD_WITH_KVP) mapping = {'ip5': '{{trigger.k5}}-static', 'ip6': '{{system.k6}}-static', 'ip7': '{{system.k7}}-static'} result = transformer(mapping) expected = {'ip5': 'v5-static', 'ip6': 'v6-static', 'ip7': 'v7-static'} self.assertEqual(result, expected) finally: KeyValuePair.delete(k5) KeyValuePair.delete(k6) KeyValuePair.delete(k7)
def test_system_transform(self): k5 = KeyValuePair.add_or_update(KeyValuePairDB(name='k5', value='v5')) k6 = KeyValuePair.add_or_update(KeyValuePairDB(name='k6', value='v6')) k7 = KeyValuePair.add_or_update(KeyValuePairDB(name='k7', value='v7')) try: transformer = datatransform.get_transformer(PAYLOAD_WITH_KVP) mapping = {'ip5': '{{trigger.k5}}-static', 'ip6': '{{system.k6}}-static', 'ip7': '{{system.k7}}-static'} result = transformer(mapping) expected = {'ip5': 'v5-static', 'ip6': 'v6-static', 'ip7': 'v7-static'} self.assertEqual(result, expected) finally: KeyValuePair.delete(k5) KeyValuePair.delete(k6) KeyValuePair.delete(k7)
def test_chain_runner_typed_system_params(self, schedule): kvps = [] try: kvps.append(KeyValuePair.add_or_update(KeyValuePairDB(name='a', value='1'))) kvps.append(KeyValuePair.add_or_update(KeyValuePairDB(name='a.b.c', value='two'))) chain_runner = acr.get_runner() chain_runner.entry_point = CHAIN_SYSTEM_PARAMS chain_runner.action = ACTION_2 chain_runner.container_service = RunnerContainerService() chain_runner.pre_run() chain_runner.run({}) self.assertNotEqual(chain_runner.chain_holder.actionchain, None) expected_value = {'inttype': 1, 'strtype': 'two'} mock_args, _ = schedule.call_args self.assertEqual(mock_args[0].parameters, expected_value) finally: for kvp in kvps: KeyValuePair.delete(kvp)
def test_chain_runner_typed_system_params(self, schedule): kvps = [] try: kvps.append(KeyValuePair.add_or_update(KeyValuePairDB(name='a', value='1'))) kvps.append(KeyValuePair.add_or_update(KeyValuePairDB(name='a.b.c', value='two'))) chain_runner = acr.get_runner() chain_runner.entry_point = CHAIN_SYSTEM_PARAMS chain_runner.action = ACTION_2 chain_runner.container_service = RunnerContainerService() chain_runner.pre_run() chain_runner.run({}) self.assertNotEqual(chain_runner.chain_holder.actionchain, None) expected_value = {'inttype': 1, 'strtype': 'two'} mock_args, _ = schedule.call_args self.assertEqual(mock_args[0].parameters, expected_value) finally: for kvp in kvps: KeyValuePair.delete(kvp)
def test_get_finalized_params_system_values(self): KeyValuePair.add_or_update(KeyValuePairDB(name='actionstr', value='foo')) KeyValuePair.add_or_update(KeyValuePairDB(name='actionnumber', value='1.0')) params = { 'runnerint': 555 } actionexec_db = self._get_action_exec_db_model(params) runner_params, action_params = param_utils.get_finalized_params( ParamsUtilsTest.runnertype_db.runner_parameters, ParamsUtilsTest.action_system_default_db.parameters, actionexec_db.parameters) # Asserts for runner params. # Assert that default values for runner params are resolved. self.assertEqual(runner_params.get('runnerstr'), 'defaultfoo') # Assert that a runner param from action exec is picked up. self.assertEqual(runner_params.get('runnerint'), 555) # Assert that an immutable param cannot be overriden by action param or execution param. self.assertEqual(runner_params.get('runnerimmutable'), 'runnerimmutable') # Asserts for action params. self.assertEqual(action_params.get('actionstr'), 'foo') self.assertEqual(action_params.get('actionnumber'), 1.0)
def test_kvp_crud(self): saved = KeyValuePairModelTest._create_save_kvp() retrieved = KeyValuePair.get_by_name(saved.name) self.assertEqual(saved.id, retrieved.id, 'Same KeyValuePair was not returned.') # test update self.assertEqual(retrieved.value, '0123456789ABCDEF') retrieved.value = 'ABCDEF0123456789' saved = KeyValuePair.add_or_update(retrieved) retrieved = KeyValuePair.get_by_name(saved.name) self.assertEqual(retrieved.value, 'ABCDEF0123456789', 'Update of key value failed') # cleanup KeyValuePairModelTest._delete([retrieved]) try: retrieved = KeyValuePair.get_by_name(saved.name) except ValueError: retrieved = None self.assertIsNone(retrieved, 'managed to retrieve after failure.')
def test_kvp_crud(self): saved = KeyValuePairModelTest._create_save_kvp() retrieved = KeyValuePair.get_by_name(saved.name) self.assertEqual(saved.id, retrieved.id, 'Same KeyValuePair was not returned.') # test update self.assertEqual(retrieved.value, '0123456789ABCDEF') retrieved.value = 'ABCDEF0123456789' saved = KeyValuePair.add_or_update(retrieved) retrieved = KeyValuePair.get_by_name(saved.name) self.assertEqual(retrieved.value, 'ABCDEF0123456789', 'Update of key value failed') # cleanup KeyValuePairModelTest._delete([retrieved]) try: retrieved = KeyValuePair.get_by_name(saved.name) except ValueError: retrieved = None self.assertIsNone(retrieved, 'managed to retrieve after failure.')
def _create_save_kvp(): created = KeyValuePairDB() created.name = 'token' created.value = '0123456789ABCDEF' return KeyValuePair.add_or_update(created)
def _create_save_kvp(): created = KeyValuePairDB() created.name = 'token' created.value = '0123456789ABCDEF' return KeyValuePair.add_or_update(created)