package test.org.itscool.commons.angou;

import java.io.IOException;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.itscool.commons.util.AngouUtil;

public class AngouTest extends TestCase{
    
    public AngouTest(String name){
        super(name);
    }
    
    /**
     * 暗号化テスト（正常ケース）
    */
    public void testEncrypt(){
        try{
            //ユーザ名でパスワード(pwd)を暗号化
            byte[] pwdAngou = AngouUtil.encrypt("user", "pwd");
            
            assertNotNull("readBytes()でNULLを返した", pwdAngou);
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
    }
    
    /**
     * 複合化テスト（正常ケース）
    */
    public void testDecrypt(){
        try{
            //暗号化
            byte[] pwdAngou = AngouUtil.encrypt("user", "pwd");
            //複合化
            String pwd = AngouUtil.decrypt("user", pwdAngou );
            
            assertEquals("復元された情報が暗号化前の情報と違います", "pwd", pwd);
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
    }
    
    /**
     * 暗号化テスト（暗号化キーNULL)
    */
    public void testEncryptKeyIsNull(){
        try{
            //ユーザ名でパスワード(pwd)を暗号化
            byte[] pwdAngou = AngouUtil.encrypt(null, "pwd");
            
            assertNull("暗号化されたパスワードがNULLでない", pwdAngou);
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
    }
    
    /**
     * 暗号化テスト（暗号化対象情報NULL)
    */
    public void testEncryptDataIsNull(){
        try{
            //ユーザ名でパスワード(pwd)を暗号化
            byte[] pwdAngou = AngouUtil.encrypt("user", null);
            
            assertNull("暗号化されたパスワードがNULLでない", pwdAngou);
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
    }
    
    /**
     * 複合化テスト（キー不一致）
    */
    public void testDecryptDifferentKey(){
        try{
            //暗号化
            byte[] pwdAngou = AngouUtil.encrypt("user", "pwd");
            //複合化
            String pwd = AngouUtil.decrypt("aaa", pwdAngou );
            
            assertNull("複合化されたパスワードがNULLでない", pwd);
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
            
    }
    
    /**
     * 複合化テスト（暗号化情報不一致）
     * 暗号化情報をそのまま返すのが正解
    */
    public void testDecryptDifferentAngouData(){
        try{
            //暗号化
            //byte[] pwdAngou = Angou.encrypt("user", "pwd");
            //複合化
            String pwd = AngouUtil.decrypt("user", (new String("aaa")).getBytes() );
            
            assertEquals("復元された情報が暗号化情報と一致しない", "aaa", pwd);
            
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
            
    }
	public static Test suite() {
		return new TestSuite(AngouTest.class);
	}
    
}

