serverspecでコマンド結果でテストを分岐させる
小ネタです。
Oracle系のテストを書く上でsqlplusでSQL叩きまくってshould matchというテストを書くつもりですが、SQL叩くためにはインスタンスが上がってなければいけない。
もし、インスタンスが動いてない状態でsqlplus叩いてもまあ、普通にエラーになるだけなのですが無駄に叩くのも気持ち悪いので、できればテストの最初でインスタンス稼動チェックをして分岐させたい。
ということで、backend.run_commandでコマンド実行結果を受けて分岐させようという感じで試したメモです。
参考
http://qiita.com/doima_/items/e5ad8baa83642d07005a
※backend.run_commandについては全然知らなかったため、大変参考になりました。感謝。
とりあえずできたもの
describe command('su - grid -c "srvctl config database"') do its(:stdout) { should match /#{property[:oraclesid]}/ } end ps_smon = backend.run_command("ps -ef | grep ora_smon | grep -v grep | awk '{ print $NF }'") if ps_smon.stdout == "ora_smon_#{property[:oraclesid]}\n" then describe command('su - oracle -c "sqlplus -s / as sysdba <<EOF set lin 1000 set pages 0 set trims on set tab off select NAME||\',\'||VALUE line from v\\\\\\$parameter2 order by num ; exit EOF "') do its(:stdout) { should match /processes,1000/ } end end