def test_auth_request_api_key(self): agent = KeystoneAgent( self.agent, 'https://auth.api/v2.0/tokens', ('username', 'apikey')) agent.request('GET', 'https://compute.api') self.assertEqual(self.agent.request.call_count, 1) return self.assertRequest( agent, 'POST', 'https://auth.api/v2.0/tokens', Headers({'Content-Type': ['application/json']}), ('{"auth": {"RAX-KSKEY:apiKeyCredentials": ' '{"username": "******", "apiKey": "apikey"}}}'))
def test_auth_success(self): agent = KeystoneAgent(self.agent, 'https://auth.api/v2.0/tokens', ('username', 'apikey')) agent.request('GET', 'https://compute.api') self.respond(200, 'OK', None, success_auth_response) self.assertEqual(self.agent.request.call_count, 2) return self.assertRequest( agent, 'GET', 'https://compute.api', Headers({'x-tenant-id': ['tenantId'], 'x-auth-token': ['authToken']}), None)
def test_auth_request_password(self): agent = KeystoneAgent( self.agent, 'https://auth.api/v2.0/tokens', ('username', 'password'), 'password') agent.request('GET', 'https://compute.api') self.assertEqual(self.agent.request.call_count, 1) return self.assertRequest( agent, 'POST', 'https://auth.api/v2.0/tokens', Headers({'Content-Type': ['application/json']}), ('{"auth": {"passwordCredentials": ' '{"username": "******", "password": "******"}}}'))
def test_auth_failure(self): def verifyError(err): self.assertTrue(str(err).find('Keystone authentication ' + 'credentials rejected') != -1) agent = KeystoneAgent(self.agent, 'https://auth.api/v2.0/tokens', ('username', 'apikey')) d = agent.request('GET', 'https://compute.api') d.addErrback(verifyError) self.respond(401, 'BAD', None, success_auth_response) self.assertEqual(self.agent.request.call_count, 1) return self.assertRequest( agent, 'POST', 'https://auth.api/v2.0/tokens', Headers({'content-type': ['application/json']}), None)
def startService(self): from twisted.internet import reactor server = serverFromString(reactor, self.endpoint) log.msg('Start listening at {}'.format(self.endpoint)) factory = GraphiteMetricFactory.forProtocol(self.protocol_cls) agent = Agent(reactor) if self.user: agent = KeystoneAgent(agent, self.auth_url, (self.user, self.key)) log.msg('Auth URL: {}, user: {}'.format(self.auth_url, self.user)) self._setup_blueflood(factory, agent) self.timer = LoopingCall(factory.flushMetric) self.timer.start(self.flush_interval) d = server.listen(factory) d.addCallback(self._store_listening_port) return d
def makeService(config): s = MultiService() keystone_url = os.getenv( 'KEYSTONE_URL', 'https://identity.api.rackspacecloud.com/v2.0/tokens') keystone_user = os.getenv('KEYSTONE_USER') keystone_pass = os.getenv('KEYSTONE_PASS') agent = Agent(reactor, pool=HTTPConnectionPool(reactor, persistent=True)) if keystone_user and keystone_pass: agent = KeystoneAgent(agent, keystone_url, (keystone_user, keystone_pass)) handler = RESTKinHandler(agent, config['restkin-url']) scribe_service = ScribeServerService( serverFromString(reactor, config['port']), handler) scribe_service.setServiceParent(s) return s