テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

SprayアプリをIntelliJでデバッグする

S3プロトコルは異常に複雑であり, リクエストやレスポンスを慎重に覗き見ながら開発していく必要があるため , ログを吐かせたりして観測するデバグ方法は効率がとても悪い. (ケース・バイ・ケースである)

Sprayアプリに対してIntelliJのデバッガをつないで, ブレイクすることが出来た. ScalaIntelliJは相性が抜群に良い.

f:id:akiradeveloper529:20150812160632p:plain

これは, 単にputだけを受け付けてwelcomeと返すアプリをlocalhost:8080にbindしただけのうんこアプリである.

  startServer(interface = "localhost", port = 8080) {
    put { // (1)
      _.complete { // (2)
        "welcome"
      }

これに対して, AmazonS3Clientを使ってmybucketを作れと送る.

    cli.setEndpoint("http://127.0.0.1:8080")
    cli.createBucket("mybucket")

こんな簡単なのに, 3Hも浪費した. (簡単なことに嵌ると, 根本的に破綻したアイデアなのではないかと却って不安になる. 逆に, 明らかに難しいことに嵌ることは, 当たり前である)

ポイントは:

  1. ブレイクポイントを貼る位置は, (1)ではダメで, (2)にする必要がある. 理由は分からないが, アプリケーションを実行したあとには, "put"をfilterしてwelcomeを返すAkkaノードが出来るため, putの位置を通過することはないという理由ではないだろうか?
  2. setEndpointはhttpを明示的につける必要がある. でないとhttpsで発行される. これは, setEndpointのコメントに, 以下のように書いてある.

    Callers can pass in just the endpoint (ex: "ec2.amazonaws.com") or a full URL, including the protocol (ex: "https://ec2.amazonaws.com"). If the protocol is not specified here, the default protocol from this client's ClientConfiguration will be used, which by default is HTTPS.

疲れた... 温泉に行きたい.