Ejemplo n.º 1
0
    def parse(self, path, url_prefix):
        """ Parse the path to retrieve information

            Args:
                path: the path such as /enterprises/3/domains

            Returns:
                Returns a list of GAResource.

            Example:
                [GAResource(name=u'enterprises', value=3), GAResource(name=u'domains', value=None)]

        """
        if len(path) == 0:
            return

        if path.startswith('/'):
            path = path[1:]

        if path.startswith(url_prefix):
            path = path[len(url_prefix):]

        if path.startswith('/'):
            path = path[1:]

        index = path.find('/')

        if index > 0 and re.match('v[0-9]_[0-9]', path[:index]):
            self._version = path[:index]
            path = path[index + 1:]

        infos = path.split('/')

        result = []
        index = 0

        while index < len(infos):
            resource = infos[index]

            if resource and len(resource) > 0:

                index = index + 1
                value = infos[index] if index < len(infos) and len(
                    infos[index]) > 0 else None

                name = self._get_resource(resource)

                if name == 'events':
                    result.append(GAResource('event', value))
                else:
                    result.append(
                        GAResource(
                            NURESTModelController.
                            get_first_model_with_resource_name(name).rest_name,
                            value))

            index = index + 1

        self._resources = result
        return self._resources
Ejemplo n.º 2
0
    def get_next_event(self, session, timeout=None):
        """
        """
        event_queue_key = 'eventqueue:%s' % session.redis_key

        logger.debug('Waiting for event to be popped out of event queue: %s' %
                     event_queue_key)

        blob = self.redis.brpop([event_queue_key], timeout=timeout)

        logger.debug('Popping one event from the session event queue %s' %
                     event_queue_key)

        if not blob:
            return

        key, pack = blob
        event = GAPushEvent.from_dict(data=msgpack.unpackb(pack))
        resources = [
            GAResource(name=event.entity.rest_name, value=event.entity.id)
        ]
        request = GARequest(action=GARequest.ACTION_READ, resources=resources)
        context = GAContext(request=request, session=session)
        context.object = event.entity

        # operation_manager = GAOperationsController(context=context,
        #                                            logic_controller=self.core_controller.logic_controller,
        #                                            storage_controller=self.core_controller.storage_controller)
        # operation_manager.run()

        # if not context.has_errors:
        #     logger.debug('Returning one event to session %s' % session.redis_key)
        return event
Ejemplo n.º 3
0
    def test_execute_event_request_with_valid_session(self):
        """
        """
        GASDKLibrary().register_sdk('default', tstdk)
        core_controller = GACoreController(
            garuda_uuid='test-garuda',
            redis_info={
                'host': '127.0.0.1',
                'port': 6379,
                'db': 6
            },
            additional_controller_classes=[AdditionalController],
            authentication_plugins=[FakeAuthPlugin()])

        request = GARequest(action=GARequest.ACTION_CREATE)
        request.resources = [GAResource(name='enterprise', value=None)]

        session = GASession(garuda_uuid='test-garuda')
        session.root_object = NURESTRootObject()
        session.root_object.id = 'toto'

        with patch.object(core_controller.sessions_controller,
                          'get_session',
                          return_value=session):
            result = core_controller.execute_events_request(request)
            self.assertEquals(result[0].__class__, GASession)
            self.assertEquals(result[1], None)
Ejemplo n.º 4
0
    def test_perform_delegate(self):
        """
        """
        plugin1 = LogicPlugin1()
        plugin2 = LogicPlugin2()

        core_controller = GACoreController(garuda_uuid='test-garuda',
                                           redis_info={
                                               'host': '127.0.0.1',
                                               'port': '6379',
                                               'db': 6
                                           },
                                           authentication_plugins=[])
        logic_controller = GALogicController(plugins=[plugin1, plugin2],
                                             core_controller=core_controller)
        logic_controller.ready()

        request = GARequest(action=GARequest.ACTION_CREATE)
        request.resources = [GAResource(name='fakeobject1', value=None)]

        context = GAContext(request=request, session='fake')
        context.object = 'original'

        logic_controller.perform_delegate(delegate='delegate', context=context)

        self.assertEquals(context.object, 'modified by LogicPlugin1')

        logic_controller.perform_delegate(delegate='nope',
                                          context=context)  # should not crash
Ejemplo n.º 5
0
    def test_execute_event_request_with_invalid_session(self):
        """
        """
        GASDKLibrary().register_sdk('default', tstdk)
        core_controller = GACoreController(
            garuda_uuid='test-garuda',
            redis_info={
                'host': '127.0.0.1',
                'port': 6379,
                'db': 6
            },
            additional_controller_classes=[AdditionalController],
            authentication_plugins=[FakeAuthPlugin()])

        request = GARequest(action=GARequest.ACTION_CREATE)
        request.resources = [GAResource(name='enterprise', value=None)]

        with patch.object(core_controller.sessions_controller,
                          'get_session',
                          return_value=None):
            result = core_controller.execute_events_request(request)
            self.assertEquals(result[0], None)
            self.assertEquals(result[1].__class__, GAResponseFailure)
            self.assertEquals(len(result[1].content), 1)
            self.assertEquals(result[1].content[0].type,
                              GAError.TYPE_UNAUTHORIZED)
Ejemplo n.º 6
0
    def test_execute_model_request_with_valid_session(self):
        """
        """
        GASDKLibrary().register_sdk('default', tstdk)
        core_controller = GACoreController(
            garuda_uuid='test-garuda',
            redis_info={
                'host': '127.0.0.1',
                'port': 6379,
                'db': 6
            },
            additional_controller_classes=[AdditionalController],
            authentication_plugins=[FakeAuthPlugin()])

        request = GARequest(action=GARequest.ACTION_CREATE)
        request.resources = [GAResource(name='enterprise', value=None)]
        request.token = 'toto'

        with patch.object(core_controller.sessions_controller,
                          'get_session',
                          return_value=GASession(garuda_uuid='test-garuda',
                                                 root_object=tstdk.GARoot())):
            result = core_controller.execute_model_request(request)
            self.assertEquals(result.__class__,
                              GAResponseFailure)  # nothing exists that's fine
Ejemplo n.º 7
0
    def test_authenticate_with_wrong_access(self):
        """
        """
        GASDKLibrary().register_sdk('default', tstdk)

        request = GARequest(action=GARequest.ACTION_READ)
        request.resources = [GAResource('note-good', None)]
        request.token = 'token'
        session = GASession()
        auth_plugin = GASimpleAuthenticationPlugin()
        auth_info = auth_plugin.authenticate(request=request, session=session)

        self.assertIsNone(auth_info)
Ejemplo n.º 8
0
    def test_authenticate_without_auth_function(self):
        """
        """
        GASDKLibrary().register_sdk('default', tstdk)

        request = GARequest(action=GARequest.ACTION_READ)
        request.resources = [GAResource('root', None)]
        request.token = 'token'
        session = GASession()
        auth_plugin = GASimpleAuthenticationPlugin()
        auth_info = auth_plugin.authenticate(request=request, session=session)

        self.assertEquals(auth_info.__class__, tstdk.GARoot)
Ejemplo n.º 9
0
    def test_perform_delegate_with_no_plugin(self):
        """
        """
        core_controller = GACoreController(garuda_uuid='test-garuda',
                                           redis_info={
                                               'host': '127.0.0.1',
                                               'port': '6379',
                                               'db': 6
                                           },
                                           authentication_plugins=[])
        logic_controller = GALogicController(plugins=[],
                                             core_controller=core_controller)
        logic_controller.ready()

        request = GARequest(action=GARequest.ACTION_CREATE)
        request.resources = [GAResource(name='fakeobject1', value=None)]

        context = GAContext(request=request, session='fake')
        context.object = 'original'

        logic_controller.perform_delegate(delegate='delegate', context=context)
Ejemplo n.º 10
0
    def test_authenticate_with_auth_function(self):
        """
        """
        GASDKLibrary().register_sdk('default', tstdk)

        o_request = GARequest(action=GARequest.ACTION_READ)
        o_request.resources = [GAResource('root', None)]
        o_request.token = 'token'
        o_session = GASession()

        def auth_function(request, session, root_object_class,
                          storage_controller):
            self.assertEquals(request, o_request)
            self.assertEquals(session, o_session)
            self.assertEquals(root_object_class, tstdk.GARoot)
            self.assertEquals(storage_controller, 'fake_storage_controller')

        auth_plugin = GASimpleAuthenticationPlugin()
        auth_plugin.core_controller = FakeCoreController()
        auth_plugin._auth_function = auth_function
        auth_plugin.authenticate(request=o_request, session=o_session)