Closed colorbox closed 7 years ago
こんにちはこんにちは ヾ(〃><)ノ゙
よろしくお願いします。
amazon-ecs のgemを手元に持ってくる。
テストを動かしたい
ので、ソースを見てみる READMEにはそれらしき記述がない、CONTRIBUTE.mdファイルもないので、そこから情報は取り出せない。 ディレクトリ形式から、railsのデフォルトのテスト機構を使っているようなので、それで実行してみる。
コマンドを思い出せないのでググる
Gemfileを覗く そこから、開発用にrakeが導入されていることがわかった。 プロジェクト内のRakefileを覗くと、rakeコマンドでテストが実行されることがわかった。
rakeでテストを実行しようとすると、下記エラーで失敗した。
/Users/merge/.rbenv/versions/2.3.3/bin/ruby -w -I"lib:test" -I"/Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib" "/Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader.rb" "test/amazon/ecs_test.rb"
/Users/merge/work/amazon-ecs/test/amazon/ecs_test.rb:13:in `<class:EcsTest>': AWS_ACCESS_KEY_ID env variable is not set (RuntimeError)
from /Users/merge/work/amazon-ecs/test/amazon/ecs_test.rb:8:in `<top (required)>'
from /Users/merge/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/merge/.rbenv/versions/2.3.3/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader.rb:15:in `block in <main>'
from /Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader.rb:4:in `select'
from /Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader.rb:4:in `<main>'
rake aborted!
Command failed with status (1): [ruby -w -I"lib:test" -I"/Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib" "/Users/merge/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader.rb" "test/amazon/ecs_test.rb" ]
Tasks: TOP => default => test
(See full trace by running task with --trace)
テストとエラー内容から、AWSにアクセスするための認証トークンが必要なことがわかった。
AWSの認証情報をAWSのサイトから取り出せないか見てみる。
AWSのコンソールから、AWSの認証情報を再生成した。
その認証情報を使用してテスト実行を行う。
export ${変数名}='${トークン}'
で環境変数にトークンを格納する。
その状態で、rakeを実行すると、テストが実行された。 ただし、エラーが大量に出ている。
=======================================================================================================================================================================================================
Error: test_browse_node_lookup(Amazon::EcsTest): Amazon::RequestError: HTTP Response: 400 Bad Request - Your AKIAJS276YTFQGQPMG7Q is not registered as an Amazon Associate. Please register as an associate at https://affiliate-program.amazon.com/gp/associates/join/landing/main.html.
/Users/merge/work/amazon-ecs/lib/amazon/ecs.rb:146:in `send_request'
/Users/merge/work/amazon-ecs/lib/amazon/ecs.rb:118:in `browse_node_lookup'
/Users/merge/work/amazon-ecs/test/amazon/ecs_test.rb:199:in `test_browse_node_lookup'
196: end
197:
198: def test_browse_node_lookup
=> 199: resp = Amazon::Ecs.browse_node_lookup("17")
200: assert resp.is_valid_request?, "Not a valid request"
201:
202: items = resp.get_elements("BrowseNode")
=======================================================================================================================================================================================================
E
エラー文言内に下記ページへのガイドがあったためそこを見る。 https://affiliate-program.amazon.com/gp/associates/join/landing/main.html
そもそもAWSは関係なかったので、無駄に生成したトークンを無効化する。
amazon Product Advertising API関連なので、そこの認証情報を取ってこれないか見てみる
AWSの認証情報が必要なようなので、もう一度認証情報を見てみる。 IAMの認証情報を再度生成し、それを環境変数にセットする。
認証情報をセットしたが、同じエラーが出てくる。 テストを見てみると、associateタグをセットしている箇所がある。 このタグを自分のものに書き換えてテストを再度実行したが、またエラーとなった。
http://webservices.amazon.com/scratchpad/index.html?rw_useCurrentProtocol=1&rw_useCurrentProtocol=1 API実行をテストできるツールがamazonから公開されているため、これを使用して認証情報が正しいかの確認を行う。
必要情報を入力してツールを動かすと正常に動作した。 テストとの相違点は、国の指定。 国を指定する箇所をREADMEなどから確認する。
ふりかえりしました!
READMEにはそれらしき記述がない、CONTRIBUTE.mdファイルもないので、そこから情報は取り出せない。
情報がなかった、というのは、フィードバックできそうですね!
README だけ見ても動かせないポイントがあれば、不足している点を加筆すると後で動かそうとした人が同じようにつまづかなくなるというフィードバックにできそうです。
また、コントリビューションのためのテストの実行方法が分かりづらかったようであれば、コントリビューションしやすくするためのテストの簡単な手順があると、あとでコントリビューションしようとした人の助けになりそうですね。
VCRを導入するというアドバイスも貰ったので、テストが実行できたらVCRの導入も行う。
めも: そもそもこの開発者は、現時点で他人がテストを動作させることを想定してなさそう
テストで国指定が必要な事についてたどり着くには、テスト対象のコードを読まないとわからない。 それについてREADMEに追記したら良いかも?
おつかれさまでした!
This is a work log of "OSS Gate".
"OSS Gate" is about an activity to increase OSS developers.
Here's been discussed in Japanese. Thanks.
OSS Gate へようこそ。
OSS Gateワークショップでは一人ずつ issue を作り、そこに作業ログを残しながら進めます。 過去のビギナーのものはこちらで見られます。 https://github.com/oss-gate/workshop/issues?q=is%3Aissue+is%3Aclosed
この issue 作成時点でまずやること
作業ログを書くタイミング
作業ログを書くタイミングは次のタイミングです。
作業ログに書く内容
作業ログに残すことは次のことです。「備考」以外は作業の邪魔にならないように一言でよいです。備考は作業に役立つので必要な分だけ書いてください。
ログはコメントとして追記していってください。テンプレートは次の通りです。
例1(備考なし):
例2:
ふりかえり
作業ログは、ビギナーが、このワークショップを通して得るものをより増やすために重要になります。なぜなら作業ログがメンターからのフィードバックをより充実させるからです。
作業ログを元にメンターと「ふりかえり」をするタイミングがあります。「ふりかえり」では次のことをします。
メンターは次のようなフィードバックをします。これは、ビギナーとは違う視点からビギナーの行動を観察することおよびメンターの経験があるからできることです。(「ふりかえり」の前にこんなフィードバックをよろしくお願いします!とお願いすると効果が高まるので実践してみましょう。)
このように、ビギナーの作業をメンター視点で一緒に整理し、ビギナーの今後の行動に活かす活動がここでいう「ふりかえり」です。そのため、「ビギナーにとって」ログに残すべきかどうか、という視点ではなく、「とりあえずログに残す」という視点でログを残してください。これは、ビギナーが重要だと判断しなくてもメンターの視点から見たら大事なこともあるからです。