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

using NUnit.Framework;

using sscs.common;
using sscs.cache;

namespace sscs.common
{

[TestFixture]
public class TestSessionManager
{	

 	User theuser = null;
 	UnixUserIdentifier UserId = null;
 	UnixUserIdentifier root = null;
      SecretStore mysec = null;
      SecretStore anothersec  = null;
      KeyChain mykc1 = null;
      KeyChain mykc2 = null;
      byte[] secbyte1 = null;
      byte[] secbyte2 = null;
      Secret mysecret1 = null;
      Secret mysecret2 = null;
      SessionManager sesman ;

     [SetUp]
     public void Init()
     {

          sesman =  SessionManager.GetSessionManager;
      		    	
          mykc1 = new KeyChain("k1");
          mykc2 = new KeyChain("k2");
                   
 	   
          mysecret1 = new Secret(); 
          mysecret2 = new Secret(); 
          
          mysecret1.SetKey("key1"); 
          mysecret2.SetKey("key2"); 
          secbyte1 = Encoding.ASCII.GetBytes("NOVELL");
          secbyte2 = Encoding.ASCII.GetBytes("IBM");
          	
          mysecret1.SetValue(secbyte1);     
          mysecret2.SetValue(secbyte2);     

	    mykc1.AddSecret(mysecret1);
          mykc2.AddSecret(mysecret2);
          
       
          UserId = new UnixUserIdentifier(420);
          root = new UnixUserIdentifier(0);
          
          //theuser = new UnixUser(UserId);

       

     	 
     }
     
 	
	[Test]	
	public void TestCreateUserSession()
	{

	      anothersec =  SessionManager.CreateUserSession(root);
	      	mysec = SessionManager.CreateUserSession(UserId);
		
		//Assert.AreEqual(1, mysec.getRefCount());
		//Assert.AreEqual(1, anothersec.getRefCount());

	      Assert.AreEqual(true, SessionManager.CheckIfUserSessionExists(UserId));
	      Assert.AreEqual(true, SessionManager.CheckIfUserSessionExists(root));

	     
	
	}

	
	[Test]
	public void TestAddtoSession()
	{
	       SecretStore s1  =  SessionManager.GetUserSecretStore(UserId);
	       SecretStore s2  =  SessionManager.GetUserSecretStore(root);

	       s1.AddKeyChain(mykc1);
	       s2.AddKeyChain(mykc2);

	       s1  =  SessionManager.GetUserSecretStore(UserId);
	       s2  =  SessionManager.GetUserSecretStore(root);

	       KeyChain returnK1 = s1.GetKeyChain("k1");
	       Secret returnS1 = returnK1.GetSecret("key1");
	       
	       KeyChain returnK2 = s2.GetKeyChain("k2");
	       Secret returnS2 = returnK2.GetSecret("key2");

             Assert.AreEqual("NOVELL", Encoding.ASCII.GetString(returnS1.GetValue()));
             Assert.AreEqual("IBM",Encoding.ASCII.GetString(returnS2.GetValue()) );

	     
	
	}


	[Test] 
      [ExpectedException(typeof(KeyChainDoesNotExistException))]
	public void TestInvalidAccess()
	{
	       SecretStore s1  =  SessionManager.GetUserSecretStore(UserId);
	       //SecretStore s2  =  SessionManager.GetUserSecretStore(root);

	       s1.GetKeyChain("k2");
	       
	
	}

	

	[Test] 
	public void TestRemoveUserSession()
	{
	     SessionManager.RemoveUserSession(UserId, true);
             Assert.AreEqual(false, SessionManager.CheckIfUserSessionExists(UserId)); 
	     
	     //TBD :Make the ref count more than one and delete call remove sesison once.
	     //The call it once more.. only second time it should remove the session entry.
	
	}



     

      
		
	
}

}
#endif