0

モジュールで keystoneclient を使用して、ユーザー資格情報が渡されたときに auth_token を取得しています。次に、トークンを以下のコードのように req.headers['X-Auth-Token'] に入れます。このクラスの単体テストを書きたいと思います。Keystone 認証部分をモックする必要があると想定しています。私はユニットテストとモックを初めて使用するので、これにどのようにアプローチすべきかを理解するのを手伝ってください。

from keystoneclient.v3 import client
from keystoneclient import exceptions as keystone_exceptions

class TokenChecker(wsgi.Middleware):

    def myrequest(self,req):
        try:
            token = self.check_credential(userid,password)
        except HTTPUnauthorized as e:
            return e

        req.headers['X-Auth-Token'] = token

    def check_credential(self, userid, password):
        keystone = client.Client(
            username            = foo
            password            = foo2
            user_domain_name    = foo3
            domain_name         = foo4
            auth_url            = foo5
            endpoint            = foo6
        )

        try:
            keystone.authenticate()
            return keystone.auth_token
        except (keystone_exceptions.AuthorizationFailure,
                keystone_exceptions.Unauthorized) as e:

            raise HTTPUnauthorized(e)

いただいた回答をもとに作成したユニットテスト、

    @mock.patch.object(TokenChecker, 'check_password', return_value= 'testtoken')
    def test_with_valid_auth_header(self,check_password_mock):
        req = webob.Request.blank('/')
        checker = TokenChecker(req)
        checker.process_request(req)
        self.assertNotEqual(req.headers['X-Auth-Token'], 1)

これは多少間違って書かれていると思います..しかし、正確にはわかりません。X-Auth-Token で KeyError がスローされます。提供された回答を私のコードに組み込む方法を提案していただけますか?

4

1 に答える 1