モジュールで 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 がスローされます。提供された回答を私のコードに組み込む方法を提案していただけますか?