package test.org.itscool.commons;

import java.io.IOException;

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

import org.itscool.commons.property.HexPropertyFile;
import org.itscool.commons.util.AngouUtil;

public class AngoutAndHexPropertyFileTest extends TestCase{
    private String path =  "pwd2.txt";
    
    public AngoutAndHexPropertyFileTest(String name){
        super(name);
    }
    /**
     * 暗号化したデータをHex形式でファイルに書き込むテスト
     */
    public void testAddAngou(){
        String user = "kano";
        String pwd =  "kano";
        
        boolean append = false;
        
        try{
            //ユーザ名でパスワード(pwd)を暗号化
            byte[] pwdAngou = AngouUtil.encrypt(user, pwd);
            //ユーザ名と暗号化パスワードを登録
            HexPropertyFile pFile = new HexPropertyFile(path);
            pFile.removeAll();
            if( !pFile.writeHex(user, pwdAngou, append) ){
                fail("このユーザは既に登録されています [" + user + "] pwd [" + pwd + "]" );
            }
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
        
    }
    
    /**
     * ファイルにHex形式で書き込まれている暗号化情報を読み込み
     * 暗号化情報を復元するテスト
     */
    public void testRead(){
        String user = "kano";
        boolean append = false;
        
        HexPropertyFile pFile = null;
        try{
        	pFile = new HexPropertyFile(path);
        }catch( IOException ioe ){
			fail(ioe.getMessage());
        }
        //ユーザ名から暗号化パスワードを取得
        byte[] chkPwd = pFile.readHex(user);
        //暗号化パスワードを解読
        try{
            String chkPwdStr = AngouUtil.decrypt(user, chkPwd );
        }catch( IOException ioe ){
            fail(ioe.getMessage());
        }
        
    }
    
    /**
     * データ削除テスト
    */
    public void testDell(){
        String user = "kano";
        //String pwd =  "kano";
        //boolean append = false;
        
        HexPropertyFile pFile = null;
		try{
			pFile = new HexPropertyFile(path);
		}catch( IOException ioe ){
			fail(ioe.getMessage());
		}
		/*
        try{
            //ユーザ名でパスワード(pwd)を暗号化
            byte[] pwdAngou = Angou.encrypt(user, pwd);
            if( !pFile.writeHex(user, pwdAngou, append) ){
                fail("このユーザは既に登録されています [" + user + "] pwd [" + pwd + "]" );
            }
        }catch(IOException ioe){
            fail("writeHex()でエラーが発生しました：" + ioe.getMessage());
        }
        */
        try{
            if( !pFile.delete(user) ){
                fail("ユーザの削除に失敗しました");
            }
        }catch(IOException ioe){
            fail("delete()でエラーが発生しました：" + ioe.getMessage());
        }
    }
	public static Test suite() {
		return new TestSuite(AngoutAndHexPropertyFileTest.class);
	}
}