def test_get_unassigned_actions(self): """ This test ensures that the proper unassigned actions are returned for a target. """ target = Database.create_target() action1 = Database.create_action(target.name, 'exec echo hello') action2 = Database.create_action(target.name, 'exec echo world') actions = Action.get_target_unassigned_actions(target.name) for action in actions: self.assertIn(action.action_id, [action1.action_id, action2.action_id]) self.assertEqual(len(actions), 2)
def test_target_rename_association(self): """ Tests the RenameTarget API function, check to make sure Sessions, Targets, and Groups. """ target = Database.create_target() target_name = target.name session_id = Database.create_session(target_name).session_id orig_group = Database.create_group('some_group') orig_group.whitelist_member(target.name) action_id = Database.create_action(target_name).action_id data = APIClient.rename_target(self.client, target_name, 'TEST') self.assertEqual(data['error'], False) target = Database.get_target('TEST') self.assertIsNotNone(target) with self.assertRaises(DoesNotExist): Database.get_target(target_name) self.assertEqual(target.name, 'TEST') session = Database.get_session(session_id) self.assertEqual(session.target_name, 'TEST') action = Database.get_action(action_id) self.assertEqual(action.target_name, 'TEST') group = Database.get_group(orig_group.name) self.assertIn(target.name, group.member_names)
def test_find_pass(self): """ This test will attempt to create an action model object, save it to the database, and then find it. """ action1 = Database.create_action() action2 = Database.get_action(action1.action_id) self.assertIsNotNone(action1) self.assertIsNotNone(action2) self.assertEqual(action1, action2) self.assertEqual(action1.action_id, action2.action_id)
def test_create_pass(self): """ This test will attempt to create an action model object. """ target = Database.create_target() action = Database.create_action(target.name, self.TEST_ACTION_STRING) self.assertEqual(action.target_name, target.name) self.assertEqual(action.action_string, self.TEST_ACTION_STRING) self.assertEqual(action.action_type, ACTION_TYPES.get('exec', 1)) self.assertEqual(action.bound_session_id, '') self.assertIsNone(action.session_id)
def test_get(self): """ This test will pass if it finds the correct action. """ target = Database.create_target() action_id = Database.create_action(target.name, 'exec ls')['action_id'] data = APIClient.get_action(self.client, action_id) action = Database.get_action(action_id) self.assertEqual(data['error'], False) self.assertIsNotNone(data['action']) self.assertEqual(action_id, action.action_id) self.assertEqual(target.name, action.target_name) self.assertEqual('ls', action.command)
def test_cancel(self): """ This test will pass if an action is successfully cancelled. """ target = Database.create_target() action_id = Database.create_action( target.name, 'exec echo hello world')['action_id'] action = Database.get_action(action_id) self.assertEqual(action.cancelled, False) data = APIClient.cancel_action(self.client, action_id) self.assertEqual(data['error'], False) action = Database.get_action(action_id) self.assertEqual(action.status, ACTION_STATUSES.get('cancelled')) self.assertEqual(action.cancelled, True)
def test_get_params(self): """ This test will pass if get returns the correct parameters. """ target = Database.create_target('PARAMS TEST') action = Database.create_action(target.name) data = APIClient.get_target(self.client, 'PARAMS TEST', False, False, True) self.assertEqual(data['error'], False) self.assertIsInstance(data['target'], dict) self.assertEqual(data['target']['name'], 'PARAMS TEST') self.assertIsInstance(data['target']['mac_addrs'], list) self.assertListEqual(data['target']['mac_addrs'], target.mac_addrs) self.assertIsNotNone(data['target']['actions']) self.assertEqual(data['target']['actions'][0]['action_id'], action.action_id) with self.assertRaises(KeyError): data['target']['sessions'] #pylint: disable=pointless-statement with self.assertRaises(KeyError): data['target']['facts'] #pylint: disable=pointless-statement
def test_list(self): """ This test will create a few action objects through the API, and then test listing them. """ target = Database.create_target() test_actions = [ Database.create_action(target.name, 'exec ls -al'), Database.create_action(target.name, 'config -i 20'), Database.create_action(target.name, 'exec --time 1345.12345 rm -rf tmp/'), Database.create_action(target.name, 'exec --spawn /bin/beloved'), Database.create_action(target.name, 'upload /some/file /another/file'), Database.create_action(target.name, 'download /lol/what /ha/nope'), Database.create_action(target.name, 'gather -s min') ] data = APIClient.list_actions(self.client) self.assertEqual(data['error'], False) for action in test_actions: self.assertIn(action['action_id'], data['actions'].keys())
def test_status_pass(self): """ This test will attempt to see if the action is assigned the correct statuses based on it's session. """ action1 = Database.create_action() self.assertIsNone(action1.session_id) self.assertEqual(action1.status, ACTION_STATUSES.get('queued')) action1.cancelled = True self.assertEqual(action1.status, ACTION_STATUSES.get('cancelled')) action1.cancelled = False action1.queue_time = time.time() - (ACTION_STALE_THRESHOLD+1) action1.save() self.assertEqual(action1.status, ACTION_STATUSES.get('stale')) session1 = Database.create_session() action1.assign_to(session1.session_id) self.assertEqual(action1.status, ACTION_STATUSES.get('sent')) Database.missing_session(session1) self.assertEqual(action1.status, ACTION_STATUSES.get('failing')) session1.timestamp = 0 session1.save() self.assertEqual(action1.status, ACTION_STATUSES.get('failed')) session1.timestamp = time.time() session1.save() response = Database.create_response(None, None, True) action1.submit_response(response) self.assertEqual(action1.status, ACTION_STATUSES.get('error')) response.error = False action1.submit_response(response) self.assertEqual(action1.status, ACTION_STATUSES.get('complete'))