示例#1
0
    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)
示例#2
0
    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)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
 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
示例#8
0
    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())
示例#9
0
    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'))