Repository: incubator-sentry
Updated Branches:
  refs/heads/master 0ec663f51 -> 437e6c4dc


SENTRY-354: Test for update.distrib phase overriding (Gregory Chanan via Vamsee 
Yarlagadda)


Project: http://git-wip-us.apache.org/repos/asf/incubator-sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-sentry/commit/437e6c4d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-sentry/tree/437e6c4d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-sentry/diff/437e6c4d

Branch: refs/heads/master
Commit: 437e6c4dc3fb963f81a82ee4ab653cd84e48005d
Parents: 0ec663f
Author: Vamsee <[email protected]>
Authored: Fri Jul 25 14:40:29 2014 -0700
Committer: Vamsee <[email protected]>
Committed: Fri Jul 25 14:40:29 2014 -0700

----------------------------------------------------------------------
 pom.xml                                         |  2 +-
 .../e2e/solr/AbstractSolrSentryTestBase.java    | 23 ++++++---
 .../tests/e2e/solr/TestUpdateOperations.java    | 54 ++++++++++++++++++++
 .../solr/sentry/test-authz-provider.ini         |  2 +-
 4 files changed, 72 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/437e6c4d/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2833cf0..0acf3f4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,7 +79,7 @@ limitations under the License.
     <shiro.version>1.2.1</shiro.version>
     <slf4j.version>1.6.1</slf4j.version>
     <solr.version>4.8.0</solr.version>
-    
<solr.sentry.handlers.version>4.4.0-cdh5.1.0-SNAPSHOT</solr.sentry.handlers.version>
+    
<solr.sentry.handlers.version>4.4.0-cdh5.2.0-SNAPSHOT</solr.sentry.handlers.version>
     <zookeeper.version>3.4.5-cdh5.1.0-SNAPSHOT</zookeeper.version>
     <pig.version>0.12.0-cdh5.1.0-SNAPSHOT</pig.version>
   </properties>

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/437e6c4d/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/AbstractSolrSentryTestBase.java
----------------------------------------------------------------------
diff --git 
a/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/AbstractSolrSentryTestBase.java
 
b/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/AbstractSolrSentryTestBase.java
index ad9cf9b..6d2550b 100644
--- 
a/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/AbstractSolrSentryTestBase.java
+++ 
b/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/AbstractSolrSentryTestBase.java
@@ -724,16 +724,13 @@ public class AbstractSolrSentryTestBase {
   }
 
   /**
-   * Make a raw http request
+   * Make a raw http request to specific cluster node.  Node is of the format
+   * host:port/context, i.e. "localhost:8983/solr"
    */
-  protected String makeHttpRequest(CloudSolrServer server, String httpMethod,
+  protected String makeHttpRequest(CloudSolrServer server, String node, String 
httpMethod,
       String path, byte [] content, String contentType) throws Exception {
     HttpClient httpClient = server.getLbServer().getHttpClient();
-    Set<String> liveNodes =
-      server.getZkStateReader().getClusterState().getLiveNodes();
-    assertTrue("Expected at least one live node", !liveNodes.isEmpty());
-    String firstServer = liveNodes.toArray(new String[0])[0].replace("_solr", 
"/solr");
-    URI uri = new URI("http://"; + firstServer + path);
+    URI uri = new URI("http://"; + node + path);
     HttpRequestBase method = null;
     if ("GET".equals(httpMethod)) {
       method = new HttpGet(uri);
@@ -785,6 +782,18 @@ public class AbstractSolrSentryTestBase {
     return retValue;
   }
 
+  /**
+   * Make a raw http request (not specifying cluster node)
+   */
+  protected String makeHttpRequest(CloudSolrServer server, String httpMethod,
+      String path, byte [] content, String contentType) throws Exception {
+    Set<String> liveNodes =
+      server.getZkStateReader().getClusterState().getLiveNodes();
+    assertTrue("Expected at least one live node", !liveNodes.isEmpty());
+    String firstServer = liveNodes.toArray(new String[0])[0].replace("_solr", 
"/solr");
+    return makeHttpRequest(server, firstServer, httpMethod, path, content, 
contentType);
+  }
+
   protected static void waitForRecoveriesToFinish(String collection,
                                                   CloudSolrServer solrServer,
                                                   boolean verbose) throws 
Exception {

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/437e6c4d/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/TestUpdateOperations.java
----------------------------------------------------------------------
diff --git 
a/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/TestUpdateOperations.java
 
b/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/TestUpdateOperations.java
index b439a91..2b246b5 100644
--- 
a/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/TestUpdateOperations.java
+++ 
b/sentry-tests/sentry-tests-solr/src/test/java/org/apache/sentry/tests/e2e/solr/TestUpdateOperations.java
@@ -21,9 +21,13 @@ import org.slf4j.LoggerFactory;
 
 import org.junit.Test;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
+import 
org.apache.solr.update.processor.DistributedUpdateProcessor.DistribPhase;
 import org.apache.solr.client.solrj.impl.CloudSolrServer;
+import org.apache.solr.common.cloud.ClusterState;
+import org.apache.solr.common.cloud.Slice;
 
 import java.io.File;
 import java.io.PrintWriter;
@@ -111,4 +115,54 @@ public class TestUpdateOperations extends 
AbstractSolrSentryTestBase {
       server.shutdown();
     }
   }
+
+  private void checkUpdateDistribPhase(CloudSolrServer server, String 
collectionName,
+      String userName, DistribPhase distribPhase) throws Exception {
+    String path = "/" + collectionName + "/update?commit=true";
+    String updateDistribParam="";
+    if (distribPhase != null) {
+      updateDistribParam = distribPhase.toString();
+      path += "&update.distrib="+updateDistribParam;
+    }
+    String docId = "testUpdateDistribDoc"+updateDistribParam;
+    String body = "<add><doc><field name=\"id\">"+docId+"</field></doc></add>";
+
+    String node = null;
+    ClusterState clusterState = server.getZkStateReader().getClusterState();
+    for (Slice slice : clusterState.getActiveSlices(collectionName)) {
+      if(slice.getRange().includes(docId.hashCode())) {
+        node = slice.getLeader().getNodeName().replace("_solr", "/solr");
+      }
+    }
+    assertNotNull("Expected to find leader node for document", node);
+
+    String ret = makeHttpRequest(server, node, "POST", path, 
body.getBytes("UTF-8"), "text/xml");
+    assertTrue("Expected sentry exception",
+      ret.contains("SentrySolrAuthorizationException: " +
+        "User " + userName + " does not have privileges for " + 
collectionName));
+  }
+
+  @Test
+  public void testUpdateDistribPhase() throws Exception {
+    final String collectionName = "testUpdateDistribPhase";
+    final String userName = "junit";
+    // Upload configs to ZK
+    uploadConfigDirToZk(RESOURCES_DIR + File.separator + DEFAULT_COLLECTION
+        + File.separator + "conf");
+    setupCollection(collectionName);
+
+    setAuthenticationUser(userName);
+    CloudSolrServer server = getCloudSolrServer(collectionName);
+    try {
+      // ensure user can't update collection
+      checkUpdateDistribPhase(server, collectionName, userName, null);
+
+      // now, try to update collection, setting update.distrib to possible 
values
+      for ( DistribPhase phase : DistribPhase.values() ) {
+        checkUpdateDistribPhase(server, collectionName, userName, phase);
+      }
+    } finally {
+      server.shutdown();
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-sentry/blob/437e6c4d/sentry-tests/sentry-tests-solr/src/test/resources/solr/sentry/test-authz-provider.ini
----------------------------------------------------------------------
diff --git 
a/sentry-tests/sentry-tests-solr/src/test/resources/solr/sentry/test-authz-provider.ini
 
b/sentry-tests/sentry-tests-solr/src/test/resources/solr/sentry/test-authz-provider.ini
index 702cd5a..34a030d 100644
--- 
a/sentry-tests/sentry-tests-solr/src/test/resources/solr/sentry/test-authz-provider.ini
+++ 
b/sentry-tests/sentry-tests-solr/src/test/resources/solr/sentry/test-authz-provider.ini
@@ -31,7 +31,7 @@ admin_all_group = admin_all_role
 [roles]
 junit_role = collection=admin, collection=collection1, 
collection=docLevelCollection, collection=allRolesCollection, 
collection=testUpdateDeleteOperations
 docLevel_role = collection=docLevelCollection, 
collection=testUpdateDeleteOperations
-admin_role = collection=admin, collection=collection1, 
collection=sentryCollection, collection=sentryCollection_underlying1, 
collection=sentryCollection_underlying2, collection=docLevelCollection, 
collection=allRolesCollection, collection=testInvariantCollection, 
collection=testUpdateDeleteOperations, 
collection=testIndexlevelDoclevelOperations
+admin_role = collection=admin, collection=collection1, 
collection=sentryCollection, collection=sentryCollection_underlying1, 
collection=sentryCollection_underlying2, collection=docLevelCollection, 
collection=allRolesCollection, collection=testInvariantCollection, 
collection=testUpdateDeleteOperations, 
collection=testIndexlevelDoclevelOperations, collection=testUpdateDistribPhase
 sentryCollection_query_role = collection=sentryCollection->action=query
 sentryCollection_update_role = collection=sentryCollection->action=update
 sentryCollection_query_update_role = 
collection=sentryCollection->action=query, 
collection=sentryCollection->action=update

Reply via email to