You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2013/03/22 15:15:57 UTC
svn commit: r1459791 - in /manifoldcf/integration/elasticsearch/trunk: ./
src/test/ src/test/java/ src/test/java/org/ src/test/java/org/apache/
src/test/java/org/apache/manifoldcf/
src/test/java/org/apache/manifoldcf/elasticsearch/
Author: kwright
Date: Fri Mar 22 14:15:57 2013
New Revision: 1459791
URL: http://svn.apache.org/r1459791
Log:
Add runt test class
Added:
manifoldcf/integration/elasticsearch/trunk/src/test/
manifoldcf/integration/elasticsearch/trunk/src/test/java/
manifoldcf/integration/elasticsearch/trunk/src/test/java/org/
manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/
manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/
manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/
manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java (with props)
Modified:
manifoldcf/integration/elasticsearch/trunk/pom.xml
Modified: manifoldcf/integration/elasticsearch/trunk/pom.xml
URL: http://svn.apache.org/viewvc/manifoldcf/integration/elasticsearch/trunk/pom.xml?rev=1459791&r1=1459790&r2=1459791&view=diff
==============================================================================
--- manifoldcf/integration/elasticsearch/trunk/pom.xml (original)
+++ manifoldcf/integration/elasticsearch/trunk/pom.xml Fri Mar 22 14:15:57 2013
@@ -47,6 +47,9 @@
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.16</log4j.version>
<httpcomponent.version>4.2.3</httpcomponent.version>
+ <jetty.version>7.5.4.v20111024</jetty.version>
+ <hamcrest.version>1.3</hamcrest.version>
+ <testng.version>6.8</testng.version>
</properties>
<dependencies>
@@ -84,6 +87,35 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-server</artifactId>
+ <version>${jetty.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.eclipse.jetty</groupId>
+ <artifactId>jetty-servlet</artifactId>
+ <version>${jetty.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.hamcrest</groupId>
+ <artifactId>hamcrest-all</artifactId>
+ <version>${hamcrest.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>${testng.version}</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
Added: manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java
URL: http://svn.apache.org/viewvc/manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java?rev=1459791&view=auto
==============================================================================
--- manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java (added)
+++ manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java Fri Mar 22 14:15:57 2013
@@ -0,0 +1,249 @@
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.manifoldcf.elasticsearch;
+
+import org.elasticsearch.client.Client;
+import org.elasticsearch.common.settings.ImmutableSettings;
+import org.elasticsearch.common.settings.Settings;
+import org.elasticsearch.common.network.NetworkUtils;
+import org.elasticsearch.common.unit.TimeValue;
+import org.elasticsearch.node.Node;
+
+
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.HashMap;
+
+import static org.elasticsearch.client.Requests.*;
+import static org.elasticsearch.index.query.QueryBuilders.*;
+import static org.elasticsearch.common.settings.ImmutableSettings.Builder.EMPTY_SETTINGS;
+import static org.elasticsearch.common.settings.ImmutableSettings.settingsBuilder;
+import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.nullValue;
+
+
+/** This class tests the MCFAuthorizer class in an integration-test fashion.
+*/
+public class MCFAuthorizerTest
+{
+
+ protected Client client;
+ protected MockMCFAuthorityService service;
+
+ @BeforeClass
+ public void startMCFAuthorityService() throws Exception {
+ service = new MockMCFAuthorityService();
+ service.start();
+ }
+
+ @AfterClass
+ public void afterClass() throws Exception {
+ service.stop();
+ }
+
+ @BeforeClass
+ public void startNodes() {
+ startNode("server", nodeSettings());
+ client = getClient();
+ }
+
+ protected void createIndex() {
+ try {
+ client.admin().indices().prepareDelete("test").execute().actionGet();
+ } catch (Exception e) {
+ // ignore
+ }
+ client.admin().indices().create(createIndexRequest("test")).actionGet();
+ }
+
+ protected Settings nodeSettings() {
+ return ImmutableSettings.Builder.EMPTY_SETTINGS;
+ }
+
+ protected String getConcreteIndexName() {
+ return "test";
+ }
+
+ @AfterClass
+ public void closeNodes() {
+ client.close();
+ closeAllNodes();
+ }
+
+ protected Client getClient() {
+ return client("server");
+ }
+
+ static class MockMCFAuthorityService {
+
+ Server server;
+
+ public MockMCFAuthorityService() {
+ // Start jetty
+ server = new Server( 8345 );
+ server.setStopAtShutdown( true );
+ // Initialize the servlet
+ ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
+ context.setInitParameter("org.eclipse.jetty.servlet.SessionIdPathParameterName","none");
+ context.setContextPath("/mcf-authority-service");
+ server.setHandler(context);
+ context.addServlet(new ServletHolder(new UserACLServlet()), "/UserACLs");
+ }
+
+ public void start() throws Exception {
+ server.start();
+ }
+
+ public void stop() throws Exception {
+ server.stop();
+ }
+
+ // username | tokens rewarded
+ // ---------+-------------------------------
+ // null | (no tokens)
+ // user1 | token1
+ // user2 | token1, token2
+ // user3 | token1, token2, token3
+ public static class UserACLServlet extends HttpServlet {
+ @Override
+ public void service(HttpServletRequest req, HttpServletResponse res)
+ throws IOException {
+ String user = req.getParameter("username");
+ res.setStatus(HttpServletResponse.SC_OK);
+ if(user.equals("user1") || user.equals("user2") || user.equals("user3"))
+ res.getWriter().printf("TOKEN:token1\n");
+ if(user.equals("user2") || user.equals("user3"))
+ res.getWriter().printf("TOKEN:token2\n");
+ if(user.equals("user3"))
+ res.getWriter().printf("TOKEN:token3\n");
+ }
+ }
+ }
+
+ // Test helper methods
+
+ private Map<String, Node> nodes = new HashMap<String,Node>();
+
+ private Map<String, Client> clients = new HashMap<String,Client>();
+
+ private Settings defaultSettings = ImmutableSettings
+ .settingsBuilder()
+ .put("cluster.name", "test-cluster-" + NetworkUtils.getLocalAddress().getHostName())
+ .build();
+
+ public void putDefaultSettings(Settings.Builder settings) {
+ putDefaultSettings(settings.build());
+ }
+
+ public void putDefaultSettings(Settings settings) {
+ defaultSettings = ImmutableSettings.settingsBuilder().put(defaultSettings).put(settings).build();
+ }
+
+ public Node startNode(String id) {
+ return buildNode(id).start();
+ }
+
+ public Node startNode(String id, Settings.Builder settings) {
+ return startNode(id, settings.build());
+ }
+
+ public Node startNode(String id, Settings settings) {
+ return buildNode(id, settings).start();
+ }
+
+ public Node buildNode(String id) {
+ return buildNode(id, EMPTY_SETTINGS);
+ }
+
+ public Node buildNode(String id, Settings.Builder settings) {
+ return buildNode(id, settings.build());
+ }
+
+ public Node buildNode(String id, Settings settings) {
+ String settingsSource = getClass().getName().replace('.', '/') + ".yml";
+ Settings finalSettings = settingsBuilder()
+ .loadFromClasspath(settingsSource)
+ .put(defaultSettings)
+ .put(settings)
+ .put("name", id)
+ .build();
+
+ if (finalSettings.get("gateway.type") == null) {
+ // default to non gateway
+ finalSettings = settingsBuilder().put(finalSettings).put("gateway.type", "none").build();
+ }
+ if (finalSettings.get("cluster.routing.schedule") != null) {
+ // decrease the routing schedule so new nodes will be added quickly
+ finalSettings = settingsBuilder().put(finalSettings).put("cluster.routing.schedule", "50ms").build();
+ }
+
+ Node node = nodeBuilder()
+ .settings(finalSettings)
+ .build();
+ nodes.put(id, node);
+ clients.put(id, node.client());
+ return node;
+ }
+
+ public void closeNode(String id) {
+ Client client = clients.remove(id);
+ if (client != null) {
+ client.close();
+ }
+ Node node = nodes.remove(id);
+ if (node != null) {
+ node.close();
+ }
+ }
+
+ public Node node(String id) {
+ return nodes.get(id);
+ }
+
+ public Client client(String id) {
+ return clients.get(id);
+ }
+
+ public void closeAllNodes() {
+ for (Client client : clients.values()) {
+ client.close();
+ }
+ clients.clear();
+ for (Node node : nodes.values()) {
+ node.close();
+ }
+ nodes.clear();
+ }
+
+}
Propchange: manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: manifoldcf/integration/elasticsearch/trunk/src/test/java/org/apache/manifoldcf/elasticsearch/MCFAuthorizerTest.java
------------------------------------------------------------------------------
svn:keywords = Id