def test_update_record(self): """ Update an existing record by running ara_record a second time on the same key. """ task = MagicMock(Task) task. async = MagicMock() task.args = { 'key': 'test-update', 'value': 'test-value', 'type': 'text' } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_playbook = m.Playbook.query.first() self.assertIsNotNone(r_playbook) r_data = m.Data.query.filter_by(playbook_id=r_playbook.id, key='test-update').one() self.assertIsNotNone(r_data) self.assertEqual(r_data.playbook_id, r_playbook.id) self.assertEqual(r_data.key, 'test-update') self.assertEqual(r_data.value, 'test-value') self.assertEqual(r_data.type, 'text') task.args = { 'key': 'test-update', 'value': 'http://another-value', 'type': 'url' } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_data = m.Data.query.filter_by(playbook_id=r_playbook.id, key='test-update').one() self.assertEqual(r_data.value, 'http://another-value') self.assertEqual(r_data.type, 'url')
def test_record_with_no_value(self): """ Trying to use ara_record with no value parameter should properly fail """ task = MagicMock(Task) task. async = MagicMock() task.args = { 'key': 'test-key', } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_playbook = m.Playbook.query.first() self.assertIsNotNone(r_playbook) # There is no exception raised in the action module, we instead # properly return a failure status to Ansible. # If there is a failure, no data will be recorded so we can catch this. with self.assertRaises(Exception): m.Data.query.filter_by(playbook_id=r_playbook.id).one()
def test_create_record_as_wrong_type(self): """ Create a new record with ara_record. """ task = MagicMock(Task) task. async = MagicMock() task.args = { 'key': 'test-wrongtype', 'value': ['foo', 'bar'], 'type': 'text' } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_playbook = m.Playbook.query.first() self.assertIsNotNone(r_playbook) r_data = m.Data.query.filter_by(playbook_id=r_playbook.id, key='test-wrongtype').one() self.assertIsNotNone(r_data) self.assertEqual(r_data.playbook_id, r_playbook.id) self.assertEqual(r_data.key, 'test-wrongtype') self.assertEqual(r_data.value, ['foo', 'bar']) self.assertEqual(r_data.type, 'text')
def test_create_record_with_no_type(self): """ Create a new record with ara_record with no type specified. """ task = MagicMock(Task) task.async_ = 0 task.async_val = False task.args = { 'key': 'test-notype', 'value': 'test-value' } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_playbook = m.Playbook.query.first() self.assertIsNotNone(r_playbook) r_data = m.Data.query.filter_by(playbook_id=r_playbook.id, key='test-notype').one() self.assertIsNotNone(r_data) self.assertEqual(r_data.playbook_id, r_playbook.id) self.assertEqual(r_data.key, 'test-notype') self.assertEqual(r_data.value, 'test-value') self.assertEqual(r_data.type, 'text')
def ansible_run(self): '''Simulates an ansible run by creating stub versions of the information that Ansible passes to the callback, and then calling the various callback methods.''' self.playbook = self._test_playbook() self.play = self._test_play() self.task = self._test_task(self.playbook) self.results = [ self._test_result(self.task, 'host1', 'ok', changed=True), ] self.stats = self._test_stats() # Record a k/v pair to test with self.play_context = Mock() self.play_context.check_mode = False self.connection = Mock() self.task = MagicMock(Task) self.task. async = MagicMock() self.task.args = { 'key': 'test-key', 'value': 'test-value', 'type': 'text' } action = ara_record.ActionModule(self.task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run()
def test_create_text_record_with_playbook(self): """ Create a new record with ara_record on a specified playbook """ r_playbook = m.Playbook.query.first() self.assertIsNotNone(r_playbook) task = MagicMock(Task) task. async = MagicMock() task.args = { 'playbook': r_playbook.id, 'key': 'test-text', 'value': 'test-with-playbook', 'type': 'text' } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_data = m.Data.query.filter_by(playbook_id=r_playbook.id, key='test-text').one() self.assertIsNotNone(r_data) self.assertEqual(r_data.playbook_id, r_playbook.id) self.assertEqual(r_data.key, 'test-text') self.assertEqual(r_data.value, 'test-with-playbook') self.assertEqual(r_data.type, 'text')
def test_create_json_record(self): """ Create a new record with ara_record. """ task = MagicMock(Task) task. async = 0 task.args = { 'key': 'test-json', 'value': '{"foo": "bar"}', 'type': 'json' } action = ara_record.ActionModule(task, self.connection, self.play_context, loader=None, templar=None, shared_loader_obj=None) action.run() r_playbook = m.Playbook.query.first() self.assertIsNotNone(r_playbook) r_data = m.Data.query.filter_by(playbook_id=r_playbook.id, key='test-json').one() self.assertIsNotNone(r_data) self.assertEqual(r_data.playbook_id, r_playbook.id) self.assertEqual(r_data.key, 'test-json') self.assertEqual(r_data.value, '{"foo": "bar"}') self.assertEqual(r_data.type, 'json')