きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

java.io.FileとSecurityException

わさわざ試験をすべきなのか、
そんな気持ちはあるのだけれども、
起こりえる例外ではある。
起こるんだったらやれ的な雰囲気かな。


通常では決して起こらないことは分かっている。まあ、通常ってのは、作ってるもんにもよるので、アプレットとか作ってる人は気にしてる可能性はあるかもしれん。


また、SpringFrameworkも含め、多くのプロダクトは、SecurityManagerを働かせつつ動くための設定を探し出すことに苦労を強いられるはずだ。そして、そんなことをやってる奴がいるわけはないと思うのだ。



JUitでテストするために試行錯誤したが、
とりあえず例外が起こるケースの試験が出来る方法は見つかった。


setup


field = System.class.getDeclaredField("security");
field.setAccesible(true);


teardown


field.set(System.class,null);


testMethod


File file = new File("/tmp");
System.setSecurityManager(new SecurityManager());


try{
file.canRead();
fail();
}catch{SecurityException e){
}




RuntimePermissionのクラス説明をよく読む必要がある。
一旦、SecurityManagerがセットされると、2つ目のSecurityManagerは生成出来ないし、nullをセットすることも出来ない。Field#setAccesible(true)も出来ない。



この方法は、Systemクラスの内部構造に依存しているので、JREベンダ次第ではテストは動かなくなる。
そんくらいは許して欲しい。