SiNBLOG

140文字に入らないことを、極稀に書くBlog

ktrwjr実行時のDatastore 続編

ktrwjr実行時のDatastore - SinDiary

前回の記事のコメントで、higayasuo 殿に

Slim3のテストケース(AppEngineTestCase)を使えば、テスト中にputしたデータは、

テスト終了後に自動的に削除されますよ。本番でも。」

と教えていただいたので、改めて自分のアプリを見なおしてみた。


とりあえず、別途小さいアプリを作って実験してみた。

結論としては、ちゃんと消えてる!

ただ、元々Datastoreに登録されていたデータは上書きしてしまうので、

そこは考慮して作ってやる必要があるなーと思った。

確認した内容は、こんな感じ。

  1. テスト実行前に、Key=1のデータを登録。
  2. テストの中で、Key=1のデータを登録。
  3. テスト実行。
  4. テスト実行前からあった、Key=1のデータも消えてる!


しかし、元々動かしていたアプリの方だと、消えていない。

ロジック的にも別途作った小さいアプリと変わりは無い。

悩みながら、見比べていたのだが、あることに気付く・・・。

テストがエラーで落ちているのがダメなのかな?

そういえば、エラー後は、全てのテストが全て失敗してる・・・。

その後、しばらくアプリ自体がエラーで動かない・・・。

小さいアプリの方で、わざと起こしたエラーでは問題なかったので、

上記の落ち方が問題のようだ・・・。

詳しい内容は分からないけど、完全に動かなくなってしまうので、消そうとするのも失敗しているのだろう。


エラーが起きているのは、twitterへOAuthで認証しようとしている部分。

Localで試す時は、IPAddrで判断して、テスト用の動作をするようにしているが、

ktrwjr実行時は、本番環境と同じ動作をするため、そこに問題があるようだ。


public class IndexController extends Controller {

@Override
public Navigation run() throws Exception {
//ここの分岐でLocalを判断している
if ("127.0.0.1".equals(request.getRemoteHost())) {
return forward(String.format("%s%s", basePath, "login"));
}

Twitter4pkms twitter = new Twitter4pkmsFactory().getInstance();
RequestToken requestToken = twitter.createRequestToken();
sessionScope("requestToken", requestToken);
return redirect(requestToken.getAuthorizationURL());
}
}


上記の分岐に、ktrwjrで動作しているのかの判断が追加できれば回避できそうだけど。

そんなことできるのかな・・・?

根本的な部分だと、何がおかしいのかはよく分からないな・・・。

2011/12/12 追記

上記のエラーだが、twitterへのOAuthで起きているわけではないことに気付いた。

別の箇所でも発生するが、そこの箇所では特別怪しいような動きはない。

30秒経っているわけでも無いし、今のところ迷宮入り・・・。