はじめに
どうも、来年から社会人エンジニアになるNMSです。
モックするAPIの障害が起因の例外を正しく処理できるかテストしたいときに、WireMockを使えば簡単に実現できたので、自分用のメモとして記録しておきたいと思います。
以下は、WireMockをstandalone JARで実行し、スタブをHTTP経由で設定する場合のJSONで例を示しています。
スタブの設定方法自体は記載しないので、そこも知りたい方は公式ドキュメント、または他の方の記事をご覧ください。
障害パターン
レスポンスの遅延・タイムアウト
fixedDelayMilliseconds
に遅延させたいミリ秒数を設定するだけ。
{
"request": {
"method": "GET",
"url": "/timeout"
},
"response": {
"status": 200,
"fixedDelayMilliseconds": 60000
}
}
コネクションの切断・閉鎖
"fault"
に"MALFORMED_RESPONSE_CHUNK"
を設定するだけ。
{
"request": {
"method": "GET",
"url": "/connection_closed"
},
"response": {
"status": 200,
"fault": "MALFORMED_RESPONSE_CHUNK"
}
}
未応答・応答失敗
"fault"
に"EMPTY_RESPONSE"
を設定するだけ。
{
"request": {
"method": "GET",
"url": "/no_http_response"
},
"response": {
"status": 200,
"fault": "EMPTY_RESPONSE"
}
}
SSLハンドシェイク失敗
JSONの設定は必要ない。無効なサーバ証明書を使ってWireMockのHTTPSポート
-
無効なサーバ証明書を作成
※keytoolを使用した場合
keytool -genkeypair -alias invalid-cert -keyalg RSA -keysize 2048 -validity 1 -keystore invalid-keystore.jks -storepass password -keypass password -dname "CN=Invalid, OU=Invalid, O=Invalid, L=Invalid, S=Invalid, C=XX"
-
作成した証明書を使って、HTTPSを有効にしたWireMockを実行
java -jar wiremock-standalone-3.9.1.jar --port 4401 --https-port 8443 --https-keystore ./invalid-keystore.jks
おまけ:解析に失敗するレスポンスヘッダー
Content-Type
に無効なseparator「:
」とかを入れると、ParseExpceptionが原因のIlligalArgumentExceptionが投げられる。
{
"request": {
"method": "GET",
"url": "/invalid_header"
},
"response": {
"status": 200,
"body": "test",
"headers": {
"Content-Type": "text/plain; charset:UTF-8"
}
}
}
あとがき
最後までご覧いただきありがとうございました。
少しでも良い・役に立ったと感じていただけましたら、いいねしていただけますと幸いです。