//package org.forgerock.openidm.provisioner.openicf.commons;
//
//
//import org.identityconnectors.common.logging.Log;
//import org.identityconnectors.framework.api.ConnectorInfoManagerFactory;
//import org.identityconnectors.framework.common.exceptions.ConnectorException;
//import org.identityconnectors.framework.server.ConnectorServer;
//import org.testng.Assert;
//import org.testng.annotations.AfterTest;
//import org.testng.annotations.BeforeTest;
//
//import java.io.File;
//import java.io.IOException;
//import java.net.InetAddress;
//import java.net.MalformedURLException;
//import java.net.URL;
//import java.net.URLClassLoader;
//import java.util.ArrayList;
//import java.util.List;
//
//public class RemoteConnectorServerTest {
// private static final String DEFAULT_LOG_SPI = "org.identityconnectors.common.logging.StdOutLogger";
// private static final String DEFAULT_JDK_LOG_SPI = "org.identityconnectors.common.logging.impl.JDKLogger";
//
// private static ConnectorServer _server;
//
//
// //@BeforeTest
// public void beforeTest() throws Exception {
// URL libDir = RemoteConnectorServerTest.class.getResource("/connectorServer/lib/");
// Assert.assertNotNull(libDir);
// URL bundleDir = RemoteConnectorServerTest.class.getResource("/connectorServer/connectors/");
// Assert.assertNotNull(bundleDir);
// run(bundleDir.getPath(), libDir.getPath());
// }
//
// //@AfterTest
// public void afterTest() {
// stop();
// }
//
//
// private void run(String bundleDirStr, String libDirStr) throws Exception {
// System.setProperty(Log.LOGSPI_PROP, DEFAULT_JDK_LOG_SPI);
//
// // Work around issue 604. It seems that sometimes procrun will run
// // the start method in a thread with a null context class loader.
// if (Thread.currentThread().getContextClassLoader() == null) {
// Thread.currentThread().setContextClassLoader(RemoteConnectorServerTest.class.getClassLoader());
// }
//
// _server = ConnectorServer.newInstance();
// String openicfServerPort = System.getProperty("openicfServerPort");
// int port = 8759;
// if (openicfServerPort instanceof String) {
// //port = Integer.parseInt(openicfServerPort);
// }
// _server.setPort(port);
// _server.setBundleURLs(getJarFiles(new File(bundleDirStr)));
// if (libDirStr != null) {
// _server.setBundleParentClassLoader(buildLibClassLoader(new File(libDirStr)));
// }
// //Hash of "Passw0rd"
// _server.setKeyHash("xOS4IeeE6eb/AhMbhxZEC37PgtE=");
// _server.setUseSSL(false);
// _server.setIfAddress(InetAddress.getByName("127.0.0.1"));
// _server.start();
// //_server.awaitStop();
// }
//
// public void stop() {
// if (_server == null) {
// // Procrun called stop() without calling main().
// // Do not use a logging statement here to avoid initializing logging
// // too early just because a bug in procrun.
// System.err.println("Server has not been started yet");
// return;
// }
//
// // Work around issue 604. It seems that sometimes procrun will run
// // the start method in a thread with a null context class loader.
// if (Thread.currentThread().getContextClassLoader() == null) {
// Thread.currentThread().setContextClassLoader(RemoteConnectorServerTest.class.getClassLoader());
// }
//
// _server.stop();
// // Do not set _server to null, because that way the check in run() fails
// // and we ensure that the server cannot be started twice in the same JVM.
// }
//
// private ClassLoader buildLibClassLoader(File dir) throws MalformedURLException {
// List<URL> jars = getJarFiles(dir);
// if (!jars.isEmpty()) {
// return new URLClassLoader(jars.toArray(new URL[jars.size()]), ConnectorInfoManagerFactory.class.getClassLoader());
// }
// return null;
//
// }
//
// private List<URL> getJarFiles(File dir) throws MalformedURLException {
// if (!dir.isDirectory()) {
// throw new ConnectorException(dir.getPath() + " does not exist");
// }
// List<URL> rv = new ArrayList<URL>();
// for (File bundle : dir.listFiles()) {
// if (bundle.getName().endsWith(".jar")) {
// rv.add(bundle.toURI().toURL());
// }
// }
// return rv;
// }
//
//
// //@Test
// public void activatorTest1() {
//// URL root = RemoteConnectorServerTest.class.getResource("/connectors");
//// Assert.assertNotNull(root);
//// Map<String, Object> properties = new HashMap<String, Object>(1);
//// properties.put(ConnectorInfoProviderService.PROPERTY_OPENICF_CONNECTOR_URL, root);
//// ConnectorInfoProviderService newBuilder = new ConnectorInfoProviderService();
//// newBuilder.activate(properties);
// }
//
// //@Test
// public void activatorTest() throws IOException {
//// URL connectorConfigurationURL = RemoteConnectorServerTest.class.getResource("/config/provisioner.openicf.connectorinfoprovider.json");
//// Assert.assertNotNull(connectorConfigurationURL);
//// ObjectMapper mapper = new ObjectMapper();
//// Map<String, Object> properties = mapper.readValue(connectorConfigurationURL, Map.class);
////
////
//// ConnectorInfoProviderService newBuilder = new ConnectorInfoProviderService();
//// newBuilder.activate(properties);
// }
//}