/***********************************************************************
 * 
 *  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 TestSecretStore
{	

 	User theuser = null;
 	UnixUserIdentifier UserId = null;
      SecretStore mysec = null;
      KeyChain mykc = null;
      byte[] secbyte = null;
      Secret mysecret = null;

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

	   mykc.AddSecret(mysecret);
          
       
         UserId = new UnixUserIdentifier(420);
         theuser = new UnixUser(UserId);
         mysec = new SecretStore(theuser);
     	 
     }
     
 	
	[Test]	
	public void TestIntialState()
	{
           Assert.AreEqual(0, mysec.GetNumKeyChains());
          // Assert.AreEqual(0, mysec.getRefCount());
           Assert.AreEqual(0, mysec.GetSecretStoreState());
            
	}


	[Test]	
	public void TestAddKeyChain()
	{
		mysec.AddKeyChain(mykc);
		
		Assert.AreEqual(1, mysec.GetNumKeyChains());

		Secret returnsec =  (mysec.GetKeyChain("TestingID")).GetSecret("testkey");;
		
		Assert.AreEqual("NOVELL", Encoding.ASCII.GetString(returnsec.GetValue("testkey")));
		
           
	}


	[Test]	
	public void TestRemoveKeyChain()
	{
		mysec.RemoveKeyChain("TestingID");
		Assert.AreEqual(0, mysec.GetNumKeyChains());

		Assert.AreEqual(false, mysec.CheckIfKeyChainExists("TestingID"));
		
           
	}
	
	[Test]	
	[ExpectedException(typeof(KeyChainDoesNotExistException))]	
	public void TestRemoveKeyChainAgain()
	{
		mysec.GetKeyChain("TestingID");
       }


   


      [Test]	
	public void TestGetKeyChainEnumerator()
	{
		 KeyChain mykc1 = new KeyChain("kc1");
		 KeyChain mykc2 = new KeyChain("kc2");
 		 KeyChain mykc3 = new KeyChain("kc3");

 		 Secret mysecret1 = new Secret("key1", secbyte); 
 		 Secret mysecret2 = new Secret("key2", secbyte); 
 		 Secret mysecret3 = new Secret("key3", secbyte); 
 		 
 		 mykc1.AddSecret(mysecret1);
 		 mykc2.AddSecret(mysecret2);
 		 mykc3.AddSecret(mysecret3);

 		 mysec.AddKeyChain(mykc1);
 		 mysec.AddKeyChain(mykc2);
 		 mysec.AddKeyChain(mykc3);
		 
             Assert.AreEqual(3, mysec.GetNumKeyChains());
           
	}

      
		
	
}

}

#endif