1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WireMockでさまざまな障害パターンをシミュレーションする

Last updated at Posted at 2024-10-31

はじめに

どうも、来年から社会人エンジニアになる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ポート

  1. 無効なサーバ証明書を作成

    ※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"
    
  2. 作成した証明書を使って、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"
        }
    }
}

あとがき

最後までご覧いただきありがとうございました。
少しでも良い・役に立ったと感じていただけましたら、いいねしていただけますと幸いです。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?