You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by an...@apache.org on 2016/07/26 03:39:48 UTC
sentry git commit: SENTRY-1331: Add a kerberos end to end test case
to access isActive and isHa metrics. (Rahul Sharma, reviewed by Anne Yu)
Repository: sentry
Updated Branches:
refs/heads/sentry-ha-redesign 5cdd7cdfc -> 2ce6bb275
SENTRY-1331: Add a kerberos end to end test case to access isActive and isHa metrics. (Rahul Sharma, reviewed by Anne Yu)
Project: http://git-wip-us.apache.org/repos/asf/sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/2ce6bb27
Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/2ce6bb27
Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/2ce6bb27
Branch: refs/heads/sentry-ha-redesign
Commit: 2ce6bb275f41662ba5b7b98563d3e05fa442fd90
Parents: 5cdd7cd
Author: Anne Yu <an...@cloudera.com>
Authored: Mon Jul 25 21:16:23 2016 -0700
Committer: Anne Yu <an...@cloudera.com>
Committed: Mon Jul 25 21:16:23 2016 -0700
----------------------------------------------------------------------
.../thrift/TestSentryServiceMetrics.java | 39 +++++++--
.../service/thrift/SentryWebMetricParser.java | 86 ++++++++++++++++++++
2 files changed, 120 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sentry/blob/2ce6bb27/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceMetrics.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceMetrics.java b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceMetrics.java
index 3fff450..bc375e3 100644
--- a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceMetrics.java
+++ b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/thrift/TestSentryServiceMetrics.java
@@ -18,18 +18,30 @@
package org.apache.sentry.provider.db.service.thrift;
+import org.apache.commons.io.IOUtils;
+import org.apache.hadoop.security.authentication.client.AuthenticatedURL;
+import org.apache.hadoop.security.authentication.client.KerberosAuthenticator;
import org.apache.sentry.service.thrift.SentryServiceIntegrationBase;
-import org.junit.*;
+import org.apache.sentry.service.thrift.SentryWebMetricParser;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.PrivilegedExceptionAction;
public class TestSentryServiceMetrics extends SentryServiceIntegrationBase {
@BeforeClass
public static void setup() throws Exception {
- kerberos = false;
- beforeSetup();
+ kerberos = true;
+ webServerEnabled = true;
+ webSecurity = true;
setupConf();
startSentryService();
- afterSetup();
}
//Overriding this method as the tests do not require a client handle
@@ -48,11 +60,28 @@ public class TestSentryServiceMetrics extends SentryServiceIntegrationBase {
Assert.assertEquals(Boolean.TRUE,server.getIsActiveGauge().getValue());
}
+ @Test
+ public void testMetricsWeb() throws Exception {
+ clientUgi.doAs(new PrivilegedExceptionAction<Void>() {
+ @Override
+ public Void run() throws Exception {
+ final URL url = new URL("http://"+ SERVER_HOST + ":" + webServerPort + "/metrics");
+ HttpURLConnection conn = new AuthenticatedURL(new KerberosAuthenticator()).
+ openConnection(url, new AuthenticatedURL.Token());
+ //make sure we are able to access the metrics page
+ Assert.assertEquals(HttpURLConnection.HTTP_OK, conn.getResponseCode());
+ String response = IOUtils.toString(conn.getInputStream());
+ SentryWebMetricParser mp = new SentryWebMetricParser(response);
+ Assert.assertEquals(Boolean.FALSE,mp.isHA());
+ Assert.assertEquals(Boolean.TRUE,mp.isActive());
+ return null;
+ }} );
+ }
+
//Overriding this method as the client handle does not exist.
@Override
@After
public void after() {
}
-
}
http://git-wip-us.apache.org/repos/asf/sentry/blob/2ce6bb27/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/service/thrift/SentryWebMetricParser.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/service/thrift/SentryWebMetricParser.java b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/service/thrift/SentryWebMetricParser.java
new file mode 100644
index 0000000..8446d95
--- /dev/null
+++ b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/service/thrift/SentryWebMetricParser.java
@@ -0,0 +1,86 @@
+/*
+ * 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.sentry.service.thrift;
+
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.map.ObjectMapper;
+
+import java.io.IOException;
+
+
+/**
+ * The SentryWebMetricParser is used to parse the metrics displayed on the sentry web ui.
+ */
+public class SentryWebMetricParser {
+ private JsonNode root;
+ private final String sentryService = SentryService.class.getName();
+ private ObjectMapper mapper;
+
+ public SentryWebMetricParser(String response) throws IOException {
+ this.mapper = new ObjectMapper();
+ this.root = mapper.readTree(response);
+ }
+
+ public void refreshRoot(String response) throws IOException {
+ root = mapper.readTree(response);
+ }
+
+ public JsonNode getRoot() {
+ return root;
+ }
+
+ public JsonNode getGauges(JsonNode root) {
+ JsonNode gauges = root.findPath("gauges");
+ return gauges;
+ }
+
+ public JsonNode getCounters(JsonNode root) {
+ JsonNode counters = root.findPath("counters");
+ return counters;
+ }
+
+ public JsonNode getHistograms(JsonNode root) {
+ JsonNode histograms = root.findPath("histograms");
+ return histograms;
+ }
+
+ public JsonNode getMeters(JsonNode root) {
+ JsonNode meters = root.findPath("meters");
+ return meters;
+ }
+
+ public JsonNode getTimers(JsonNode root) {
+ JsonNode timers = root.findPath("timers");
+ return timers;
+ }
+
+ public JsonNode getValue(JsonNode node) {
+ return node.findPath("value");
+ }
+
+ public boolean isHA() {
+ JsonNode gauges = getGauges(root);
+ JsonNode obj = getValue(gauges.findPath(sentryService + ".is_ha"));
+ return obj.getValueAsBoolean();
+ }
+
+ public boolean isActive() {
+ JsonNode gauges = getGauges(root);
+ JsonNode obj = getValue(gauges.findPath(sentryService + ".is_active"));
+ return obj.getBooleanValue();
+ }
+}
\ No newline at end of file