/***********************************************************************
 * 
 *  Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; version 2.1
 *  of the License.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Library Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, Novell, Inc.
 * 
 *  To contact Novell about this file by physical or electronic mail, 
 *  you may find current contact information at www.novell.com.
 * 
 ***********************************************************************/

#if DEBUG
using System;
using System.Text;
using System.Collections;
//using System.InvalidOperationException;


using NUnit.Framework;

using sscs.common;

namespace sscs.cache
{

[TestFixture]
public class TestKeyChain
{

     Secret mysec;
     KeyChain mykc;
     string secval; 
     byte[] secbyte;
     

     [SetUp]
     public void Init()
     {
       
          mykc = new KeyChain("TestingID");
          
          secval=  "novell123";
 	   secbyte = Encoding.ASCII.GetBytes(secval);
          mysec = new Secret(); 
          mysec.SetKey("testkey"); 
          mysec.SetValue(secbyte);

     	 
     }
     
 	
	[Test]	
	public void TestAddSecret()
	{
           mykc.AddSecret(mysec);
           Secret returnsecret =  mykc.GetSecret("testkey");
           
           Assert.AreEqual("novell123", Encoding.ASCII.GetString(returnsecret.GetValue("testkey")));
    
	}


	[Test]	
	public void TestAddSecretWithDup()
	{
	    //Add one more with same secret id 
	    byte[] newvalue = Encoding.ASCII.GetBytes("miCASA");
	    mysec.SetValue(newvalue);
	    
           mykc.AddSecret(mysec);
           Secret returnsecret =  mykc.GetSecret("testkey");
           
           Assert.AreEqual("miCASA", Encoding.ASCII.GetString(returnsecret.GetValue("testkey")));
    
	}
		

       [Test]	
       [ExpectedException(typeof(SecretNotFoundException))]	
	public void TestRemoveSecret()
	{
	   
	     mykc.RemoveSecret("testkey");

	     //Try and get the same.
           //Secret sec =  mykc.GetSecret("testkey");
	}


       
       [Test]	
       [ExpectedException(typeof(InvalidOperationException))]		
       public void TestGetAllSecretsWhenNone()
	{
//	   IDictionaryEnumerator  myenum = (IDictionaryEnumerator)mykc.GetAllSecrets();
	   //Object temp = myenum.Current;
	}

       [Test]	
       public void TestGetAllSecrets()
	{
           int count = 0;
           
           byte[] val1 = Encoding.ASCII.GetBytes("val1");
           byte[] val2 = Encoding.ASCII.GetBytes("val2");
           byte[] val3 = Encoding.ASCII.GetBytes("val3");

  	    Secret sec1 = new Secret("key1", val1);
      	    Secret sec2 = new Secret("key2", val2);
      	    Secret sec3 = new Secret("key3", val3);

      	    mykc.AddSecret(sec1);
          mykc.AddSecret(sec2);
      	    mykc.AddSecret(sec3);
      	    
	    IDictionaryEnumerator  myenum =(IDictionaryEnumerator) mykc.GetAllSecrets();
    
	    while(myenum.MoveNext())
           {
                   		 count++;
	     }       		 

	    Assert.AreEqual(3, mykc.GetNumSecrets());
	    Assert.AreEqual(3, count);
	  
	}
       
		
	
}
}
#endif