package test.at.gv.egovernment.moa.spss;

import java.security.Security;

import test.at.gv.egovernment.moa.MOATestCase;

import at.gv.egovernment.moa.logging.Logger;
import at.gv.egovernment.moa.logging.LoggingContext;
import at.gv.egovernment.moa.logging.LoggingContextManager;
import at.gv.egovernment.moa.util.MessageProvider;

import at.gv.egovernment.moa.spss.server.config.ConfigurationProvider;
import at.gv.egovernment.moa.spss.server.iaik.config.IaikConfigurator;
import at.gv.egovernment.moa.spss.server.transaction.TransactionContext;
import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager;

/**
 * Base class for MOA test cases.
 * 
 * Provides some utility functions.
 * 
 * @author Patrick Peck
 * @version $Id$
 */
public class SPSSTestCase extends MOATestCase {

  protected static final String TESTDATA_ROOT = "data/test/";

  /**
   * Constructor for MOATestCase.
   * @param arg0
   */
  public SPSSTestCase(String name) {
    super(name);
  }

  /**
   * Set up a transaction context with a test configuration.
   */
  protected void setUpTransactionContext() throws Exception {
    System.setProperty(
      ConfigurationProvider.CONFIG_PROPERTY_NAME,
      "data/test/conf/moa-spss/MOA-SPSSConfiguration.xml");
    ConfigurationProvider config = ConfigurationProvider.getInstance();
    TransactionContext context = new TransactionContext("test", null, config);
    TransactionContextManager.getInstance().setTransactionContext(context);
  }
  
  protected void setUpLoggingContext() throws Exception {
    LoggingContext context = new LoggingContext("test");
    LoggingContextManager.getInstance().setLoggingContext(context);
  }

  /**
   * Configure the IAIK modules with the current configuration.
   * 
   * A <code>TransactionContext</code> must have been set up before.
   */
  protected void setUpIaikConfiguration() throws Exception {
    TransactionContext context =
      TransactionContextManager.getInstance().getTransactionContext();
    ClassLoader cl = getClass().getClassLoader();
    MessageProvider msg = MessageProvider.getInstance();
    
    try {
      cl.loadClass("javax.security.cert.Certificate"); // from jcert.jar
    } catch (ClassNotFoundException e) {
      Logger.warn(msg.getMessage("init.03", null), e);
    }

    new IaikConfigurator().configure(context.getConfiguration());
  }
  
  protected void setUpSSL() throws Exception {
    //System.setProperty("javax.net.debug", "all");
    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    System.setProperty(
      "java.protocol.handler.pkgs",
      "com.sun.net.ssl.internal.www.protocol");
  }

}