Beispiel #1
0
    def test_send(self, mock_gofer_agent):
        context = Mock()
        context.agent_id = "123"
        context.url = "http://broker.com"
        context.transport = "qpid"
        context.authenticator = Mock()

        task_id = "5678"
        criteria = {"match": {"task_id": task_id}}

        mock_agent = Mock()
        mock_gofer_agent.return_value = mock_agent
        mock_admin = Mock()
        mock_agent.Admin = Mock(return_value=mock_admin)

        agent = PulpAgent()
        agent.cancel(context, task_id)

        mock_gofer_agent.assert_called_with(
            context.agent_id,
            url=context.url,
            transport=context.transport,
            authenticator=context.authenticator,
            async=True,
        )

        mock_admin.cancel.assert_called_with(criteria=criteria)
Beispiel #2
0
    def test_send(self, mock_gofer_agent):
        context = Mock()
        context.agent_id = '123'
        context.url = 'http://broker.com'
        context.transport = 'qpid'
        context.authenticator = Mock()

        task_id = '5678'
        criteria = {'match': {'task_id': task_id}}

        mock_agent = Mock()
        mock_gofer_agent.return_value = mock_agent
        mock_admin = Mock()
        mock_agent.Admin = Mock(return_value=mock_admin)

        agent = PulpAgent()
        agent.cancel(context, task_id)

        mock_gofer_agent.assert_called_with(
            context.agent_id,
            url=context.url,
            transport=context.transport,
            authenticator=context.authenticator,
            async=True)

        mock_admin.cancel.assert_called_with(criteria=criteria)
Beispiel #3
0
 def test_cancel(self):
     # Test
     task_id = '123'
     agent = DirectAgent(CONSUMER)
     agent.cancel(task_id)
     # Verify
     criteria = {'eq': task_id}
     mock_agent.Admin.cancel.assert_called_once_with(criteria=criteria)
Beispiel #4
0
 def test_cancel(self):
     # Test
     task_id = '123'
     agent = DirectAgent(CONSUMER)
     agent.cancel(task_id)
     # Verify
     criteria = {'eq': task_id}
     mock_agent.Admin.cancel.assert_called_once_with(criteria=criteria)
Beispiel #5
0
    def test_delete_queue(self, queue, add_connector):
        url = 'test-url'
        name = 'test-queue'

        # test
        agent = PulpAgent()
        agent.delete_queue(url, name)

        # validation
        add_connector.assert_called_once_with()
        queue.assert_called_once_with(name, url)
        queue.return_value.purge.assert_called_once_with()
        queue.return_value.delete.assert_called_once_with()
Beispiel #6
0
 def cancel_request(self, consumer_id, task_id):
     """
     Cancel an agent request associated with the specified task ID.
     :param consumer_id: The consumer ID.
     :type consumer_id: str
     :param: task_id: The task ID associated with the request.
     :type: str
     """
     manager = managers.consumer_manager()
     consumer = manager.get_consumer(consumer_id)
     context = Context(consumer)
     agent = PulpAgent()
     agent.cancel(context, task_id)
Beispiel #7
0
 def cancel_request(self, consumer_id, task_id):
     """
     Cancel an agent request associated with the specified task ID.
     :param consumer_id: The consumer ID.
     :type consumer_id: str
     :param: task_id: The task ID associated with the request.
     :type: str
     """
     manager = managers.consumer_manager()
     consumer = manager.get_consumer(consumer_id)
     context = Context(consumer)
     agent = PulpAgent()
     agent.cancel(context, task_id)
Beispiel #8
0
    def test_delete_queue(self, queue, add_connector):
        url = 'test-url'
        name = 'test-queue'

        # test
        agent = PulpAgent()
        agent.delete_queue(url, name)

        # validation
        add_connector.assert_called_once_with()
        queue.assert_called_once_with(name, url)
        queue.return_value.purge.assert_called_once_with()
        queue.return_value.delete.assert_called_once_with()
Beispiel #9
0
    def test_delete_queue_not_found(self, queue, add_connector):
        url = 'test-url'
        name = 'test-queue'
        queue.return_value.purge.side_effect = NotFound

        # test
        agent = PulpAgent()
        agent.delete_queue(url, name)

        # validation
        add_connector.assert_called_once_with()
        queue.assert_called_once_with(name, url)
        queue.return_value.purge.assert_called_once_with()
        self.assertFalse(queue.delete.called)
Beispiel #10
0
    def test_delete_queue_not_found(self, queue, add_connector):
        url = 'test-url'
        name = 'test-queue'
        queue.return_value.purge.side_effect = NotFound

        # test
        agent = PulpAgent()
        agent.delete_queue(url, name)

        # validation
        add_connector.assert_called_once_with()
        queue.assert_called_once_with(name, url)
        queue.return_value.purge.assert_called_once_with()
        self.assertFalse(queue.delete.called)
Beispiel #11
0
 def uninstall(self, id, units, options={}):
     """
     Uninstall content on a consumer.
     @param id: A consumer id.
     @type id: str
     @param units: A list of content units to be uninstalled.
     @type units: list of:
         { type_id:<str>, unit_key:<dict> }
     @param options: Uninstall options; based on unit type.
     @type options: dict
     """
     collection = Consumer.get_collection()
     consumer = collection.find_one({'id': id})
     if consumer is None:
         raise MissingResource(id)
     agent = PulpAgent(consumer)
     agent.uninstall_units(units, options)
Beispiel #12
0
 def delete_queue(url, name, consumer_id):
     """
     Delete the agent queue.
     :param url: The broker URL.
     :type url: str
     :param name: The queue name.
     :type name: str
     :param consumer_id: The consumer ID.
     :type consumer_id: str
     """
     try:
         manager = managers.consumer_manager()
         manager.get_consumer(consumer_id)
         return  # still registered (abort)
     except MissingResource:
         # expected
         pass
     agent = PulpAgent()
     agent.delete_queue(url, name)
Beispiel #13
0
 def delete_queue(url, name, consumer_id):
     """
     Delete the agent queue.
     :param url: The broker URL.
     :type url: str
     :param name: The queue name.
     :type name: str
     :param consumer_id: The consumer ID.
     :type consumer_id: str
     """
     try:
         manager = managers.consumer_manager()
         manager.get_consumer(consumer_id)
         return  # still registered (abort)
     except MissingResource:
         # expected
         pass
     agent = PulpAgent()
     agent.delete_queue(url, name)
Beispiel #14
0
    def test_cancel(self, _agent):
        context = Context()
        task_id = '5678'

        # test
        agent = PulpAgent()
        agent.cancel(context, task_id)

        # validation
        context.__enter__.assert_called_once_with()
        self.assertTrue(context.__exit__.called)

        _agent.assert_called_with(
            context.url,
            context.address,
            authenticator=context.authenticator,
            wait=0)

        _agent.return_value.Admin.return_value.cancel.assert_called_with(
            criteria={'match': {'task_id': task_id}})
Beispiel #15
0
    def test_cancel(self, _agent):
        context = Context()
        task_id = '5678'

        # test
        agent = PulpAgent()
        agent.cancel(context, task_id)

        # validation
        context.__enter__.assert_called_once_with()
        self.assertTrue(context.__exit__.called)

        _agent.assert_called_with(context.url,
                                  context.address,
                                  authenticator=context.authenticator,
                                  wait=0)

        _agent.return_value.Admin.return_value.cancel.assert_called_with(
            criteria={'match': {
                'task_id': task_id
            }})
Beispiel #16
0
    def bind(consumer_id, repo_id, distributor_id, options):
        """
        Request the agent to perform the specified bind. This method will be called
        after the server-side representation of the binding has been created.

        :param consumer_id: The consumer ID.
        :type consumer_id: str
        :param repo_id: A repository ID.
        :type repo_id: str
        :param distributor_id: A distributor ID.
        :type distributor_id: str
        :param options: The options are handler specific.
        :type options: dict
        :return: The task created by the bind
        :rtype: dict
        """
        # track agent operations using a pseudo task
        task_id = str(uuid4())
        task_tags = [
            tags.resource_tag(tags.RESOURCE_CONSUMER_TYPE, consumer_id),
            tags.resource_tag(tags.RESOURCE_REPOSITORY_TYPE, repo_id),
            tags.resource_tag(tags.RESOURCE_REPOSITORY_DISTRIBUTOR_TYPE, distributor_id),
            tags.action_tag(tags.ACTION_AGENT_BIND)
        ]
        task = TaskStatus(task_id, 'agent', tags=task_tags).save()

        # agent request
        consumer_manager = managers.consumer_manager()
        binding_manager = managers.consumer_bind_manager()
        consumer = consumer_manager.get_consumer(consumer_id)
        binding = binding_manager.get_bind(consumer_id, repo_id, distributor_id)
        agent_bindings = AgentManager._bindings([binding])
        context = Context(
            consumer,
            task_id=task_id,
            action='bind',
            consumer_id=consumer_id,
            repo_id=repo_id,
            distributor_id=distributor_id)
        agent = PulpAgent()
        agent.consumer.bind(context, agent_bindings, options)

        # bind action tracking
        consumer_manager = managers.consumer_bind_manager()
        consumer_manager.action_pending(
            consumer_id,
            repo_id,
            distributor_id,
            Bind.Action.BIND,
            task_id)

        return task
Beispiel #17
0
 def unregistered(self, consumer_id):
     """
     Notification that a consumer (agent) has
     been unregistered.  This ensure that all registration
     artifacts have been cleaned up.
     :param consumer_id: The consumer ID.
     :type consumer_id: str
     """
     manager = managers.consumer_manager()
     consumer = manager.get_consumer(consumer_id)
     context = Context(consumer)
     agent = PulpAgent()
     agent.consumer.unregistered(context)
Beispiel #18
0
    def unbind(consumer_id, repo_id, distributor_id, options):
        """
        Request the agent to perform the specified unbind.
        :param consumer_id: The consumer ID.
        :type consumer_id: str
        :param repo_id: A repository ID.
        :type repo_id: str
        :param distributor_id: A distributor ID.
        :type distributor_id: str
        :param options: The options are handler specific.
        :type options: dict
        :return: A task ID that may be used to track the agent request.
        :rtype: str
        """
        # track agent operations using a pseudo task
        task_id = str(uuid4())
        task_tags = [
            tags.resource_tag(tags.RESOURCE_CONSUMER_TYPE, consumer_id),
            tags.resource_tag(tags.RESOURCE_REPOSITORY_TYPE, repo_id),
            tags.resource_tag(tags.RESOURCE_REPOSITORY_DISTRIBUTOR_TYPE, distributor_id),
            tags.action_tag(tags.ACTION_AGENT_UNBIND)
        ]
        task = TaskStatus(task_id, 'agent', tags=task_tags).save()

        # agent request
        manager = managers.consumer_manager()
        consumer = manager.get_consumer(consumer_id)
        binding = dict(repo_id=repo_id, distributor_id=distributor_id)
        bindings = AgentManager._unbindings([binding])
        context = Context(
            consumer,
            task_id=task_id,
            action='unbind',
            consumer_id=consumer_id,
            repo_id=repo_id,
            distributor_id=distributor_id)
        agent = PulpAgent()
        agent.consumer.unbind(context, bindings, options)

        # unbind action tracking
        manager = managers.consumer_bind_manager()
        manager.action_pending(
            consumer_id,
            repo_id,
            distributor_id,
            Bind.Action.UNBIND,
            task_id)

        return task
Beispiel #19
0
    def test_send(self, mock_gofer_agent):
        context = Mock()
        context.route = '123'
        context.url = 'http://broker.com'
        context.authenticator = Mock()

        task_id = '5678'
        criteria = {'match': {'task_id': task_id}}

        mock_agent = Mock()
        mock_gofer_agent.return_value = mock_agent
        mock_admin = Mock()
        mock_agent.Admin = Mock(return_value=mock_admin)

        agent = PulpAgent()
        agent.cancel(context, task_id)

        mock_gofer_agent.assert_called_with(
            context.url,
            context.route,
            authenticator=context.authenticator,
            wait=0)

        mock_admin.cancel.assert_called_with(criteria=criteria)
Beispiel #20
0
 def test_status(self):
     # Setup
     listener = HeartbeatListener('queue')
     envelope = Envelope(heartbeat=dict(uuid='A', next=10))
     listener.dispatch(envelope)
     # Test
     result = DirectAgent.status(['A','B'])
     # Verify
     self.assertEqual(len(result), 2)
     # A
     alive, next_heartbeat, details = result['A']
     self.assertTrue(alive)
     self.assertTrue(isinstance(next_heartbeat, basestring))
     self.assertTrue(isinstance(details, dict))
     # B
     alive, last_heartbeat, details = result['B']
     self.assertFalse(alive)
     self.assertTrue(last_heartbeat is None)
     self.assertTrue(isinstance(details, dict))
Beispiel #21
0
 def test_status(self):
     # Setup
     listener = HeartbeatListener('queue')
     envelope = Envelope(heartbeat=dict(uuid='A', next=10))
     listener.dispatch(envelope)
     # Test
     result = DirectAgent.status(['A', 'B'])
     # Verify
     self.assertEqual(len(result), 2)
     # A
     alive, next_heartbeat, details = result['A']
     self.assertTrue(alive)
     self.assertTrue(isinstance(next_heartbeat, basestring))
     self.assertTrue(isinstance(details, dict))
     # B
     alive, last_heartbeat, details = result['B']
     self.assertFalse(alive)
     self.assertTrue(last_heartbeat is None)
     self.assertTrue(isinstance(details, dict))
Beispiel #22
0
    def uninstall_content(consumer_id, units, options):
        """
        Uninstall content units on a consumer.
        :param consumer_id: The consumer ID.
        :type consumer_id: str
        :param units: A list of content units to be uninstalled.
        :type units: list of:
            { type_id:<str>, type_id:<dict> }
        :param options: Uninstall options; based on unit type.
        :type options: dict
        :return: A task ID that may be used to track the agent request.
        :rtype: dict
        """
        # track agent operations using a pseudo task
        task_id = str(uuid4())
        task_tags = [
            tags.resource_tag(tags.RESOURCE_CONSUMER_TYPE, consumer_id),
            tags.action_tag(tags.ACTION_AGENT_UNIT_UNINSTALL)
        ]
        task = TaskStatus(task_id, 'agent', tags=task_tags).save()

        # agent request
        manager = managers.consumer_manager()
        consumer = manager.get_consumer(consumer_id)
        conduit = ProfilerConduit()
        collated = Units(units)
        for typeid, units in collated.items():
            pc = AgentManager._profiled_consumer(consumer_id)
            profiler, cfg = AgentManager._profiler(typeid)
            units = AgentManager._invoke_plugin(
                profiler.uninstall_units,
                pc,
                units,
                options,
                cfg,
                conduit)
            collated[typeid] = units
        units = collated.join()
        context = Context(consumer, task_id=task_id, consumer_id=consumer_id)
        agent = PulpAgent()
        agent.content.uninstall(context, units, options)
        return task
Beispiel #23
0
 def unregister(consumer_id):
     """
     Notification that a consumer (agent) has
     been unregistered.  This ensure that all registration
     artifacts have been cleaned up.  Then, we fire off a task to lazily
     delete the agent queue.
     :param consumer_id: The consumer ID.
     :type consumer_id: str
     """
     manager = managers.consumer_manager()
     consumer = manager.get_consumer(consumer_id)
     context = Context(consumer)
     agent = PulpAgent()
     agent.consumer.unregister(context)
     url = context.url
     name = context.address.split('/')[-1]
     task_tags = [
         tags.resource_tag(tags.ACTION_AGENT_QUEUE_DELETE, consumer_id)
     ]
     delete_queue.apply_async(args=[url, name, consumer_id],
                              countdown=QUEUE_DELETE_DELAY,
                              tags=task_tags)
Beispiel #24
0
 def test_capabilities(self):
     agent = PulpAgent()
     self.assertEqual(agent.consumer, Consumer)
     self.assertEqual(agent.content, Content)
     self.assertEqual(agent.profile, Profile)