Fixed admin service createPolicies and added a test.

Change-Id: Ic200338ccb928646321477f6b74e0393f14c47e4
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java
new file mode 100644
index 0000000..f47dd68
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/PolicyServiceTest.java
@@ -0,0 +1,148 @@
+package de.ids_mannheim.korap.web.service.full;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mindrot.jbcrypt.BCrypt;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.client.urlconnection.HTTPSProperties;
+
+import de.ids_mannheim.korap.config.AdminSetup;
+import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.TestHelper;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.ResourceDao;
+import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
+import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
+import de.ids_mannheim.korap.resources.Corpus;
+import de.ids_mannheim.korap.resources.KustvaktResource;
+import de.ids_mannheim.korap.resources.Permissions;
+import de.ids_mannheim.korap.resources.Permissions.Permission;
+import de.ids_mannheim.korap.resources.VirtualCollection;
+import de.ids_mannheim.korap.security.PolicyCondition;
+import de.ids_mannheim.korap.security.SecurityPolicy;
+import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
+import de.ids_mannheim.korap.user.User;
+import de.ids_mannheim.korap.user.User.UserFactory;
+import de.ids_mannheim.korap.utils.JsonUtils;
+import de.ids_mannheim.korap.web.service.FastJerseyTest;
+
+/**
+ * @author margaretha
+ */
+public class PolicyServiceTest extends FastJerseyTest {
+
+	@BeforeClass
+	public static void configure() throws Exception {
+		FastJerseyTest.setPackages("de.ids_mannheim.korap.web.service.full", "de.ids_mannheim.korap.web.filter",
+				"de.ids_mannheim.korap.web.utils");
+		// containerURI = "https://localhost/";
+	}
+
+//	public void initServer(int port) {
+//		super.initServer(port);
+//
+//		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
+//			public X509Certificate[] getAcceptedIssuers() {
+//				return null;
+//			}
+//
+//			public void checkClientTrusted(X509Certificate[] certs, String authType) {
+//			}
+//
+//			public void checkServerTrusted(X509Certificate[] certs, String authType) {
+//			}
+//		} };
+//
+//		HostnameVerifier hostnameVerifier = HttpsURLConnection.getDefaultHostnameVerifier();
+//		ClientConfig config = new DefaultClientConfig();
+//		SSLContext ctx = null;
+//		try {
+//			ctx = SSLContext.getInstance("SSL");
+//			ctx.init(null, trustAllCerts, new java.security.SecureRandom());
+//		} catch (NoSuchAlgorithmException | KeyManagementException e) {
+//			e.printStackTrace();
+//		}
+//
+//		config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
+//				new HTTPSProperties(hostnameVerifier, ctx));
+//		client = Client.create(config);
+//		
+//		AdminSetup.getInstance();
+//	}
+
+	@Test
+    public void testCreatePolicyForResource() throws IOException, KustvaktException {
+    	//Path p = FileSystems.getDefault().getPath("admin_token");
+    	//List<String> content = Files.readAllLines(p, StandardCharsets.UTF_8);
+    	//String adminToken = content.get(0);
+		String id = UUID.randomUUID().toString();
+    	ClientResponse response = resource()
+                .path(getAPIVersion())
+                .path("admin")
+                .path("createPolicies")
+                .path(id)
+                .queryParam("type", "virtualcollection")
+                .queryParam("name", "Goethe VC")
+                .queryParam("description", "Goethe corpus")
+                .queryParam("group", "public")
+                .queryParam("perm", Permission.READ.name())
+                .queryParam("loc", "")
+                .queryParam("expire", "")
+                .header(Attributes.AUTHORIZATION,
+                        BasicHttpAuth.encode("kustvakt","kustvakt2015"))
+                .post(ClientResponse.class);
+        
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        
+        // Check the policies
+        PolicyHandlerIface dao = helper().getContext().getPolicyDbProvider();
+        List<SecurityPolicy> policies = dao.getPolicies(
+                new PolicyCondition("public"), VirtualCollection.class,
+                Permissions.Permission.READ.toByte());
+        assertEquals(2, policies.size());
+        
+        // Check resource store
+        List<ResourceOperationIface> providers= (List<ResourceOperationIface>) helper().getContext().getResourceProviders();
+        ResourceOperationIface resourceDao = providers.get(0);
+        
+        User user = UserFactory.getDemoUser();
+		KustvaktResource resource = resourceDao.findbyId(id,user);
+		assertEquals("Goethe VC", resource.getName());
+        	
+	}
+
+	@Override
+	public void initMethod() throws KustvaktException {
+		helper().runBootInterfaces();
+	}
+}