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
Esempio n. 6
0
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