15 Jul 2013, 09:26

ミライの組込み開発!vagrant × sahara × minitestで実現する仮想エンドツーエンドテスト

photo credit: Ѕolo via photopin cc

以前、組込み開発での機能テスト自動化について考察しました。

組込み開発でのエンドツーエンドの課題は、テストが失敗したところから正常な状態まで復旧させることでした。

実際にテストできるかどうかはまだまだ試行錯誤が必要そうだ。実際の仕事で適用するためには、後処理から正常な状態に復旧させる処理が最大の課題だと思っている。

この課題を、仮想環境のスナップショットがコマンドラインから操作できるvagrantとsaharaを利用して解決してみようと思います。

3ヶ月前のリベンジ

3ヶ月前に書いた、Rubyのminitestを利用したスクリプトのなかに、vagrantとsaharaを組込みます。ポイントは、

  • setupでスナップショットから仮想環境を初期化

です。テストが失敗した結果、いくらボロボロに環境を破壊してても、一瞬でもとに戻します。

# sahara rollbackで初期化
system( 'vagrant sandbox rollback' )

 mkdirするサンプルテスト

動画

[//www.youtube.com/embed/Ct7ivafdpoY?rel=0]

ミライの組込み開発

GOOS本を読んでから、ウォーキングスケルトンを組込み開発でどうやってつくればいいのか、ずっと頭を悩ませていた。(そして、途中で読むのをやめてしまった。。えっ?(・・?)

vagrant、これが、答えだ! ( ー`дー´)キリッ

vagrantとsaharaを利用したエンドツーエンドテスト、革命的な方法だと思う。

githubのReadmeを読むと、Acceptance Tests用の追加機能もあるっぽいのでもう少し調べてみる。

会社では、quemで作成されたシミュレータをCentOS上で動作させてテストしたりしてる。vagrantとsaharaを利用すれば、quemで作られたシミュレータも一瞬で初期化できるのだ。もっとも、quem自体にスナップショット機能があるっぽいけど。。

実機がないけど、シミュレータを利用してテスト出来て、いくらでも壊して一瞬で復元できる。。。これが、ミライの組込み開発。

これって、すごいことじゃないか?

15 Jul 2013, 00:47

仮想環境を破壊しまくっても大丈夫だ、問題ない。vagrantプラグイン『sahara』

vagrantのプラグイン、saharaを使ってVirtualBox上のCentOSを破壊しました。

photo credit: mariusz kluzniak via photopin

[toc]

saharaとは

saharaはvagrantのプラグインです。

saharaを使うと、以下のようなことがコマンドラインからできます。

  • 仮想マシンのスナップショットを作成
  • スナップショットから仮想マシンを復元

つまり、仮想マシンをボロボロのメタメタのケチョンケチョンに破壊しまくっても、

元に戻せるのです!( ̄ー ̄)

saharaのインストール

$ vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.15)'!

saharaの使い方

コマンドは以下の4つです。

  • vagrant sandbox on
  • vagrant sandbox commit
  • vagrant sandbox rollback
  • vagrant sandbox off

簡単な例

ここでは、 /usr配下をうっかり削除してしまい、復元しようと思います。

まずは、事前にvmを立ちあげときます。

$ vagrant up
サンドボックス有効化

saharaを利用するためには、sandboxモードを有効化します。

$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

GUIからも、スナップショットが作成されたことが確認できます。


以下のフォルダに格納されました。

C:\home\TSUNEMICHI\VirtualBox VMs\centos_1373847520\Snapshots
スナップショットから以前の状態を復元

rollbackコマンドでsandboxモードを有効化した時点に戻ることができます。

$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

それでは、ここでうっかりディレクトリ削除をしてみます。

$ vagrant ssh
$ su # root passwordは vagrant
$ rm -rf /usr

うひゃあ 。゚(゚´Д`゚)゚。

$ ls /usr
ls: cannot access /usr: No such file or directory

でも、大丈夫だよ (´・ω・)っ□

$ vagrant sandbox rollback
$ vagrant ssh
$ ls /usr/
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

よかったねー。(っ´∀`)っ


[//www.youtube.com/embed/uviNa0kyVX8?rel=0]

サンドボックス無効化

saharaをもう利用しない時は、sandboxモードを無効化します。ちなみに、けっこう時間がかかります。

$ vagrant sandbox off
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

スナップショットは以下に保存されています。もちろん、VirtualBoxからもスナップショットの管理ができます。

スナップショット作成

commitコマンドで現在の状態を保存します。これによって、rollbackで戻れる時点を変更できます。これはスナップショットを一旦削除するので、時間がかかります。

$ vagrant sandbox commit

内部的には、sandbox offしてonしているだけに見えます。

パフォーマンスについて

時間はどうなの?

sandbox onと sandbox rollbackは一瞬で終わります。sandbox offとsandbox commitスナップショットの削除時間が入るので、数分かかります。

とくに、sandbox rollbackが一瞬で完了するのは素晴らしいです。これなら、エンドツーエンドテストに十分応用可能なスピードです。

容量はどうなの?

スナップショットをたくさんとった時の気になる容量を確認しました。

CentOS 6.4 Minimal の元ファイルが1.5GBのスナップショットは 63.8 MB でした。このくらいならば、許せるレベル。僕の貧弱マシンでも大丈夫です。

参考

525A3%2525E3%252583%2525BC_2013-7-14_15-7-43_No-00.jpg