non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

コマンドラインで1秒より短い時間を指定してスリープさせるには

こんばんは、先週末から週明けにかけ、次男が熱を出していました。kjunichiです。
 

コマンドラインで1秒より短い時間を指定してスリープさせたい

なんでそんな必要があるのか

mochaでlibtrusterdのテストに必要だった。

はぁ?

  • mochaはデフォルトでは2秒ルールがある。
  • libtrustedのテストではtrusterdが起動してから、nghttpする必要がある。

これだけなら、1秒スリープ入れれば間にあう。

今回は、trusterdの設定ファイルを更新したら自動リロードする機能をテストしなければならない

  • まず、起動させる
  • trusterdの起動を待つ(1秒)
  • アクセスできることを確認する。
  • trusterdの設定ファイルを変更し、ポート番号を変更する
  • 自動リロードが完了するまで待つ(1秒)
  • 変更後のポート番号でアクセス可能かを確認する

という流れになり、sleepだとこの間の待ちで2秒かかってしまう。

Perlに救われる

sedが使えないから、このtrusterdの設定ファイルの変更もperlでやる情弱なので、 途方に暮れていたら、Perlに救われた!

マイクロ秒単位での指定が可能

Time::HiResモジュールを使えば、マイクロ秒単位でsleepができることが分かった。

perl -MTime::HiRes -e 'Time::HiRes::usleep(200000)'

実践投入例

perl -MTime::HiRes -e 'Time::HiRes::sleep(0.3)'

世の中そんなに甘くなかった

travis ciでいざ試したら、NG。 スリープの時間は問題ないものの、トータルの実行時間が2秒を超えてしまった。

おとなしく、

mocha --reporter spec --timeout 5000

まとめ

ということで、libtrusterdにboot_from_file_pathなる新APIが 追加されました!

関連記事