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
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
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)
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
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)
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
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)
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)
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)
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)