作ったプログラムをテストする時に、例外ロジックの検証で苦労することがあります。
アプリケーション開発では、ステップ実行ができるツールなどで、SKIPさせたり、値を改変しながら進めることで実現可能ですが、インフラ系の開発現場では、ツールで回避できることが少なく、テクニックが必要になります。
このブログでは、そのテクニックをいくつか紹介しようと思います。
その1:ドメインのアクセス先をごまかしたい
WEBアプリケーションなどの開発現場でも利用できるかもしれません。
ドメインのアクセス先をごまかして、スタブの画面へアクセスをいざなう方法です。
たとえば、http://1excellence.com/xxxx/ というリクエストを実行すると、ブラウザは、1excellence.comというドメインをDNS参照して、IPアドレスに変換し、目的のサイトのサーバーにリクエストを発行します。
これをテスト用サイトのテストアプリに向けたいという時があります。
DNSの定義を変更すれば解決できるのですが、利用中のサイトの場合、業務影響が出てしまいます。
このような時は、作業端末のhostsファイルを使い、ごまかします。
ドメインの名前解決(FQDNをIPアドレスに変換)する時、通常はhostsファイルを参照し名前解決の定義が無いことを確認してから、DNSに問い合わせする挙動をします。
そのため、hostsファイルに名前解決の定義を追加することで、DNS参照をせずに、別のIPアドレスに変換させることができます。
では、hostsファイルはどこにあるのか。
Windowsの場合:
C:\Windows\System32\drivers\etc\hosts
Linux/Unixの場合:
/etc/hosts
このファイルに定義を追加します。
たとえば、
127.0.0.1 1excellence.com
という行を追加して保存します。
すると、先ほどの http://1excellence.com/xxxx/ は、127.0.0.1 というIPアドレスにリクエストを送信します。
※例の127.0.0.1とはLocalhostの意味で、作業端末自身へリクエストを発行することになりますね。
その2.Linuxコマンドをスタブに置き換えたい
シェルスクリプトのテストや、Linux上のコマンド実行をエラーさせたい時等で使える技です。
たとえば、pwd というコマンドがあります。
このコマンド、カレントディレクトリの絶対パスを表示させるコマンドですが、エラーになることはありません。
これをエラーにしたい場合は困りますよね。
実はエラーにみせかけることが可能です。
Linuxにはalias機能があります。長いコマンドを短くすることも可能ですし、実際そのような使い方がされています。
では、Redhat Linuxのデフォルトがどうなっているか確認してみます。
[root@testserver ~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@testserver ~]#
このようにデフォルトで、いくつか定義されています。
たとえば、通常、lsというコマンドを皆さん実行してディレクトリ内のファイルをリストしていると思いますが、
lsというコマンドは、実は、ls --color=auto というコマンドなんですね。
このalias機能を使えばごまかせます。
例をみていただければ一目瞭然です。
[root@testserver ~]# pwd
/root
[root@testserver ~]# alias pwd='echo test'
[root@testserver ~]# pwd
test
[root@testserver ~]#
このように、pwdというコマンドをecho testというコマンドに置き換えできました。
これを利用して、エラーになるように変更してみましょう。
[root@testserver ~]# echo "exit 1" > a.sh
[root@testserver ~]# chmod +x a.sh
[root@testserver ~]# alias pwd='/root/a.sh'
[root@testserver ~]# pwd
[root@testserver ~]# echo $?
1
[root@testserver ~]#
$?はリターンコードですね。
一次的にpwdコマンドはリターンコードを1にすることができました。
ログアウトしたり、スイッチユーザーすると効果はなくなります。
この挙動変更を恒久的にするには、HOMEのプロファイルや/etc/enviroment等にaliasコマンドで定義を追加します。
これらはあくまでもテスト環境でご利用ください。
悪用すると色々できちゃいますが、けっして、悪いことには利用しないでくださいませ。
こういったテストテクニックを断続的に掲載していこうと思います。