You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@storm.apache.org by bo...@apache.org on 2017/07/24 17:10:05 UTC
[12/19] storm git commit: STORM-1280 port
backtype.storm.daemon.logviewer to java
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/main/java/org/apache/storm/daemon/utils/ListFunctionalSupport.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/ListFunctionalSupport.java b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/ListFunctionalSupport.java
index 83b3588..700fbb7 100644
--- a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/ListFunctionalSupport.java
+++ b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/ListFunctionalSupport.java
@@ -21,7 +21,17 @@ package org.apache.storm.daemon.utils;
import java.util.List;
import java.util.stream.Collectors;
+/**
+ * Implements missing sequence functions in Java compared to Clojure.
+ * To make thing simpler, it only supports List type.
+ */
public class ListFunctionalSupport {
+ /**
+ * Get the first element in list.
+ *
+ * @param list list to get
+ * @return the first element. null if list is null or empty.
+ */
public static <T> T first(List<T> list) {
if (list == null || list.size() <= 0) {
return null;
@@ -30,6 +40,28 @@ public class ListFunctionalSupport {
return list.get(0);
}
+ /**
+ * get the last element in list.
+ *
+ * @param list list to get
+ * @return the last element. null if list is null or empty.
+ */
+ public static <T> T last(List<T> list) {
+ if (list == null || list.size() <= 0) {
+ return null;
+ }
+
+ return list.get(list.size() - 1);
+ }
+
+ /**
+ * Get the last N elements as a new list.
+ *
+ * @param list list to get
+ * @param count element count to get
+ * @return the first element. null if list is null.
+ * elements in a new list may be less than count if there're not enough elements in the list.
+ */
public static <T> List<T> takeLast(List<T> list, int count) {
if (list == null) {
return null;
@@ -45,6 +77,13 @@ public class ListFunctionalSupport {
}
}
+ /**
+ * Drop the first N elements and create a new list.
+ *
+ * @param list the list
+ * @param count element count to drop
+ * @return newly created sublist that drops the first N elements from origin list. null if list is null.
+ */
public static <T> List<T> drop(List<T> list, int count) {
if (list == null) {
return null;
@@ -55,15 +94,15 @@ public class ListFunctionalSupport {
.collect(Collectors.toList());
}
+ /**
+ * Drop the only first element and create a new list. equivalent to drop(list, 1).
+ *
+ * @see {@link ListFunctionalSupport#drop(List, int)}
+ * @param list the list
+ * @return newly created sublist that drops the first element from origin list. null if list is null.
+ */
public static <T> List<T> rest(List<T> list) {
return drop(list, 1);
}
- public static <T> T last(List<T> list) {
- if (list == null || list.size() <= 0) {
- return null;
- }
-
- return list.get(list.size() - 1);
- }
}
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/main/java/org/apache/storm/daemon/utils/StreamUtil.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/StreamUtil.java b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/StreamUtil.java
index 24c630d..8e8b5d0 100644
--- a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/StreamUtil.java
+++ b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/StreamUtil.java
@@ -21,12 +21,21 @@ package org.apache.storm.daemon.utils;
import java.io.IOException;
import java.io.InputStream;
+/**
+ * Utility class for (Input/Output)Stream.
+ */
public class StreamUtil {
private StreamUtil() {
}
/**
+ * Skips over and discards N bytes of data from the input stream.
+ * <p/>
* FileInputStream#skip may not work the first time, so ensure it successfully skips the given number of bytes.
+ *
+ * @see {@link java.io.FileInputStream#skip(long)}
+ * @param stream the stream to skip
+ * @param n bytes to skip
*/
public static void skipBytes(InputStream stream, Integer n) throws IOException {
long skipped = 0;
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/main/java/org/apache/storm/daemon/utils/URLBuilder.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/URLBuilder.java b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/URLBuilder.java
deleted file mode 100644
index d30ac65..0000000
--- a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/URLBuilder.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.storm.daemon.utils;
-
-import java.net.URLEncoder;
-import java.util.Map;
-
-import static java.util.stream.Collectors.joining;
-
-public class URLBuilder {
- private URLBuilder() {
- }
-
- public static String build(String urlPath, Map<String, Object> parameters) {
- StringBuilder sb = new StringBuilder();
- sb.append(urlPath);
- if (parameters.size() > 0) {
- sb.append("?");
-
- String queryParam = parameters.entrySet().stream()
- .map(entry -> URLEncoder.encode(entry.getKey()) + "=" + URLEncoder.encode(entry.getValue().toString()))
- .collect(joining("&"));
- sb.append(queryParam);
- }
- return sb.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/main/java/org/apache/storm/daemon/utils/UrlBuilder.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/main/java/org/apache/storm/daemon/utils/UrlBuilder.java b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/UrlBuilder.java
new file mode 100644
index 0000000..cea6dcc
--- /dev/null
+++ b/storm-webapp/src/main/java/org/apache/storm/daemon/utils/UrlBuilder.java
@@ -0,0 +1,53 @@
+/*
+ * 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.storm.daemon.utils;
+
+import static java.util.stream.Collectors.joining;
+
+import java.net.URLEncoder;
+import java.util.Map;
+
+/**
+ * Convenient utility class to build the URL.
+ */
+public class UrlBuilder {
+ private UrlBuilder() {
+ }
+
+ /**
+ * Build the URL. the key and value of query parameters will be encoded.
+ *
+ * @param urlPath URL except query parameter
+ * @param parameters query parameter
+ * @return the url concatenating url path and query parameters
+ */
+ public static String build(String urlPath, Map<String, Object> parameters) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(urlPath);
+ if (parameters.size() > 0) {
+ sb.append("?");
+
+ String queryParam = parameters.entrySet().stream()
+ .map(entry -> URLEncoder.encode(entry.getKey()) + "=" + URLEncoder.encode(entry.getValue().toString()))
+ .collect(joining("&"));
+ sb.append(queryParam);
+ }
+ return sb.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/drpc/DRPCServerTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/drpc/DRPCServerTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/drpc/DRPCServerTest.java
index 9ab623f..a8452a9 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/drpc/DRPCServerTest.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/drpc/DRPCServerTest.java
@@ -15,6 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.storm.daemon.drpc;
import static org.junit.Assert.assertEquals;
@@ -90,8 +91,8 @@ public class DRPCServerTest {
try (DRPCServer server = new DRPCServer(conf)) {
server.start();
try (DRPCClient client = new DRPCClient(conf, "localhost", server.getDrpcPort());
- DRPCInvocationsClient invoke = new DRPCInvocationsClient(conf, "localhost", server.getDrpcInvokePort())) {
- Future<String> found = exec.submit(() -> client.getClient().execute("testing", "test"));
+ DRPCInvocationsClient invoke = new DRPCInvocationsClient(conf, "localhost", server.getDrpcInvokePort())) {
+ final Future<String> found = exec.submit(() -> client.getClient().execute("testing", "test"));
DRPCRequest request = getNextAvailableRequest(invoke, "testing");
assertNotNull(request);
assertEquals("test", request.get_func_args());
@@ -129,9 +130,9 @@ public class DRPCServerTest {
}
}
- public static String GET(int port, String func, String args) {
+ private static String doGet(int port, String func, String args) {
try {
- URL url = new URL("http://localhost:"+port+"/drpc/"+func+"/"+args);
+ URL url = new URL("http://localhost:" + port + "/drpc/" + func + "/" + args);
InputStream in = url.openStream();
byte[] buffer = new byte[1024];
int read = in.read(buffer);
@@ -150,7 +151,7 @@ public class DRPCServerTest {
//TODO need a better way to do this
Thread.sleep(2000);
try (DRPCInvocationsClient invoke = new DRPCInvocationsClient(conf, "localhost", server.getDrpcInvokePort())) {
- Future<String> found = exec.submit(() -> GET(server.getHttpServerPort(), "testing", "test"));
+ final Future<String> found = exec.submit(() -> doGet(server.getHttpServerPort(), "testing", "test"));
DRPCRequest request = getNextAvailableRequest(invoke, "testing");
assertNotNull(request);
assertEquals("test", request.get_func_args());
@@ -171,7 +172,7 @@ public class DRPCServerTest {
//TODO need a better way to do this
Thread.sleep(2000);
try (DRPCInvocationsClient invoke = new DRPCInvocationsClient(conf, "localhost", server.getDrpcInvokePort())) {
- Future<String> found = exec.submit(() -> GET(server.getHttpServerPort(), "testing", "test"));
+ Future<String> found = exec.submit(() -> doGet(server.getHttpServerPort(), "testing", "test"));
DRPCRequest request = getNextAvailableRequest(invoke, "testing");
assertNotNull(request);
assertEquals("test", request.get_func_args());
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/LogviewerTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/LogviewerTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/LogviewerTest.java
deleted file mode 100644
index 6abe153..0000000
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/LogviewerTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.storm.daemon.logviewer;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.DirectoryStream;
-import java.nio.file.Path;
-import java.util.Iterator;
-import java.util.List;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-public class LogviewerTest {
- private Path mkMockPath(File file) {
- Path mockPath = mock(Path.class);
- when(mockPath.toFile()).thenReturn(file);
- return mockPath;
- }
-
- private DirectoryStream<Path> mkDirectoryStream(List<Path> listOfPaths) {
- return new DirectoryStream<Path>() {
- @Override
- public Iterator<Path> iterator() {
- return listOfPaths.iterator();
- }
-
- @Override
- public void close() throws IOException {
- }
- };
- }
-
-}
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandlerTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandlerTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandlerTest.java
index 2c05972..58daa30 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandlerTest.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogPageHandlerTest.java
@@ -18,15 +18,11 @@
package org.apache.storm.daemon.logviewer.handler;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.storm.daemon.logviewer.utils.LogviewerResponseBuilder;
-import org.apache.storm.daemon.logviewer.utils.ResourceAuthorizer;
-import org.apache.storm.daemon.logviewer.utils.WorkerLogs;
-import org.apache.storm.utils.Utils;
-import org.assertj.core.util.Lists;
-import org.junit.Test;
-import javax.ws.rs.core.Response;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -34,8 +30,14 @@ import java.nio.file.attribute.FileAttribute;
import java.util.List;
import java.util.Map;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import javax.ws.rs.core.Response;
+
+import org.apache.storm.daemon.logviewer.utils.LogviewerResponseBuilder;
+import org.apache.storm.daemon.logviewer.utils.ResourceAuthorizer;
+import org.apache.storm.daemon.logviewer.utils.WorkerLogs;
+import org.apache.storm.utils.Utils;
+import org.assertj.core.util.Lists;
+import org.junit.Test;
public class LogviewerLogPageHandlerTest {
@@ -62,27 +64,27 @@ public class LogviewerLogPageHandlerTest {
LogviewerLogPageHandler handler = new LogviewerLogPageHandler(rootPath, null,
new WorkerLogs(stormConf, new File(rootPath)), new ResourceAuthorizer(stormConf));
- Response expectedAll = LogviewerResponseBuilder.buildSuccessJsonResponse(
+ final Response expectedAll = LogviewerResponseBuilder.buildSuccessJsonResponse(
Lists.newArrayList("topoA/port1/worker.log", "topoA/port2/worker.log", "topoB/port1/worker.log"),
null,
origin
);
- Response expectedFilterPort = LogviewerResponseBuilder.buildSuccessJsonResponse(
+ final Response expectedFilterPort = LogviewerResponseBuilder.buildSuccessJsonResponse(
Lists.newArrayList("topoA/port1/worker.log", "topoB/port1/worker.log"),
null,
origin
);
- Response expectedFilterTopoId = LogviewerResponseBuilder.buildSuccessJsonResponse(
+ final Response expectedFilterTopoId = LogviewerResponseBuilder.buildSuccessJsonResponse(
Lists.newArrayList("topoB/port1/worker.log"),
null,
origin
);
- Response returnedAll = handler.listLogFiles("user", null, null, null, origin);
- Response returnedFilterPort = handler.listLogFiles("user", 1111, null, null, origin);
- Response returnedFilterTopoId = handler.listLogFiles("user", null, "topoB", null, origin);
+ final Response returnedAll = handler.listLogFiles("user", null, null, null, origin);
+ final Response returnedFilterPort = handler.listLogFiles("user", 1111, null, null, origin);
+ final Response returnedFilterTopoId = handler.listLogFiles("user", null, "topoB", null, origin);
Utils.forceDelete(rootPath);
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandlerTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandlerTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandlerTest.java
index 9e36b5a..c7f927b 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandlerTest.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/handler/LogviewerLogSearchHandlerTest.java
@@ -18,6 +18,33 @@
package org.apache.storm.daemon.logviewer.handler;
+import static java.util.stream.Collectors.joining;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyListOf;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.internal.verification.VerificationModeFactory.times;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.UnknownHostException;
+import java.nio.file.Files;
+import java.nio.file.attribute.FileAttribute;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+
import org.apache.commons.lang.StringUtils;
import org.apache.storm.DaemonConfig;
import org.apache.storm.daemon.logviewer.LogviewerConstant;
@@ -34,33 +61,6 @@ import org.junit.experimental.runners.Enclosed;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
-import java.io.File;
-import java.io.IOException;
-import java.net.UnknownHostException;
-import java.nio.file.Files;
-import java.nio.file.attribute.FileAttribute;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-
-import static java.util.stream.Collectors.joining;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyListOf;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.mockito.internal.verification.VerificationModeFactory.times;
-
@RunWith(Enclosed.class)
public class LogviewerLogSearchHandlerTest {
@@ -98,8 +98,8 @@ public class LogviewerLogSearchHandlerTest {
String actualUrl = handler.urlToMatchCenteredInLogPage(new byte[42], expectedFname, 27526, 8888);
- assertEquals("http://" + expectedHost + ":" + expectedPort + "/api/v1/log?file=" + expectedFname +
- "&start=1947&length=" + LogviewerConstant.DEFAULT_BYTES_PER_PAGE, actualUrl);
+ assertEquals("http://" + expectedHost + ":" + expectedPort + "/api/v1/log?file=" + expectedFname
+ + "&start=1947&length=" + LogviewerConstant.DEFAULT_BYTES_PER_PAGE, actualUrl);
} finally {
Utils.setInstance(prevUtils);
}
@@ -119,13 +119,14 @@ public class LogviewerLogSearchHandlerTest {
String actualUrl = handler.urlToMatchCenteredInLogPageDaemonFile(new byte[42], expectedFname, 27526, 8888);
- assertEquals("http://" + expectedHost + ":" + expectedPort + "/api/v1/daemonlog?file=" + expectedFname +
- "&start=1947&length=" + LogviewerConstant.DEFAULT_BYTES_PER_PAGE, actualUrl);
+ assertEquals("http://" + expectedHost + ":" + expectedPort + "/api/v1/daemonlog?file=" + expectedFname
+ + "&start=1947&length=" + LogviewerConstant.DEFAULT_BYTES_PER_PAGE, actualUrl);
} finally {
Utils.setInstance(prevUtils);
}
}
+ @SuppressWarnings("checkstyle:LineLength")
@Test
public void testReturnsCorrectBeforeAndAfterContext() throws InvalidRequestException, UnknownHostException {
Utils prevUtils = null;
@@ -135,12 +136,9 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"logviewer-search-context-tests.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
- Map<String, Object> searchResult = handler.substringSearch(file, pattern);
-
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
expected.put("searchString", pattern);
@@ -176,6 +174,9 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
@@ -191,12 +192,9 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"small-worker.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
- Map<String, Object> searchResult = handler.substringSearch(file, pattern);
-
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
expected.put("searchString", pattern);
@@ -212,6 +210,9 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
@@ -227,12 +228,9 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"small-worker.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
- Map<String, Object> searchResult = handler.substringSearchDaemonLog(file, pattern);
-
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "yes");
expected.put("searchString", pattern);
@@ -248,6 +246,9 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearchDaemonLog(file, pattern);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
@@ -263,13 +264,9 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"test-3072.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
- Map<String, Object> searchResult = handler.substringSearch(file, pattern);
- Map<String, Object> searchResult2 = handler.substringSearch(file, pattern, 1);
-
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
expected.put("searchString", pattern);
@@ -286,6 +283,10 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern);
+ Map<String, Object> searchResult2 = handler.substringSearch(file, pattern, 1);
+
assertEquals(expected, searchResult);
assertEquals(expected, searchResult2);
} finally {
@@ -293,6 +294,7 @@ public class LogviewerLogSearchHandlerTest {
}
}
+ @SuppressWarnings("checkstyle:LineLength")
@Test
public void testNextByteOffsetsAreCorrectForEachMatch() throws UnknownHostException, InvalidRequestException {
Utils prevUtils = null;
@@ -329,8 +331,6 @@ public class LogviewerLogSearchHandlerTest {
assertEquals(data.v2().intValue(), ((List) result.get("matches")).size());
}));
- Map<String, Object> searchResult = handler.substringSearch(file, pattern, 7);
-
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
expected.put("searchString", pattern);
@@ -390,12 +390,15 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern, 7);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
}
}
+ @SuppressWarnings("checkstyle:LineLength")
@Test
public void testCorrectMatchOffsetIsReturnedWhenSkippingBytes() throws InvalidRequestException, UnknownHostException {
Utils prevUtils = null;
@@ -405,13 +408,10 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"test-worker.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
-
int startByteOffset = 3197;
- Map<String, Object> searchResult = handler.substringSearch(file, pattern, 1, startByteOffset);
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
@@ -430,12 +430,16 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern, 1, startByteOffset);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
}
}
+ @SuppressWarnings("checkstyle:LineLength")
@Test
public void testAnotherPatterns1() throws UnknownHostException, InvalidRequestException {
Utils prevUtils = null;
@@ -445,13 +449,10 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"test-worker.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
-
String pattern = Seq.range(0, 1024).map(x -> "X").collect(joining());
- Map<String, Object> searchResult = handler.substringSearch(file, pattern, 2);
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
@@ -477,12 +478,16 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern, 2);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
}
}
+ @SuppressWarnings("checkstyle:LineLength")
@Test
public void testAnotherPatterns2() throws UnknownHostException, InvalidRequestException {
Utils prevUtils = null;
@@ -492,13 +497,9 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"test-worker.log.test");
-
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
-
String pattern = "𐄀𐄁𐄂";
- Map<String, Object> searchResult = handler.substringSearch(file, pattern, 1);
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
@@ -517,6 +518,9 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", matches);
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern, 1);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
@@ -534,13 +538,9 @@ public class LogviewerLogSearchHandlerTest {
when(mockedUtil.hostname()).thenReturn(expectedHost);
- File file = new File(String.join(File.separator, "src", "test", "resources"),
+ final File file = new File(String.join(File.separator, "src", "test", "resources"),
"test-worker.log.test");
- LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
-
- Map<String, Object> searchResult = handler.substringSearch(file, pattern);
-
Map<String, Object> expected = new HashMap<>();
expected.put("isDaemon", "no");
expected.put("searchString", pattern);
@@ -548,6 +548,9 @@ public class LogviewerLogSearchHandlerTest {
expected.put("matches", Collections.emptyList());
+ LogviewerLogSearchHandler handler = getSearchHandlerWithPort(expectedPort);
+ Map<String, Object> searchResult = handler.substringSearch(file, pattern);
+
assertEquals(expected, searchResult);
} finally {
Utils.setInstance(prevUtils);
@@ -578,11 +581,11 @@ public class LogviewerLogSearchHandlerTest {
files.add(new File(String.join(File.separator, "src", "test", "resources"),
"logviewer-search-context-tests.log.gz"));
- LogviewerLogSearchHandler handler = getSearchHandler();
+ final LogviewerLogSearchHandler handler = getSearchHandler();
- List<Map<String, Object>> matches1 = handler.findNMatches(files, 20, 0, 0, "needle").getMatches();
- List<Map<String, Object>> matches2 = handler.findNMatches(files, 20, 0, 126, "needle").getMatches();
- List<Map<String, Object>> matches3 = handler.findNMatches(files, 20, 1, 0, "needle").getMatches();
+ final List<Map<String, Object>> matches1 = handler.findNMatches(files, 20, 0, 0, "needle").getMatches();
+ final List<Map<String, Object>> matches2 = handler.findNMatches(files, 20, 0, 126, "needle").getMatches();
+ final List<Map<String, Object>> matches3 = handler.findNMatches(files, 20, 1, 0, "needle").getMatches();
assertEquals(2, matches1.size());
assertEquals(4, ((List) matches1.get(0).get("matches")).size());
@@ -603,6 +606,9 @@ public class LogviewerLogSearchHandlerTest {
private List<File> logFiles;
private String topoPath;
+ /**
+ * Setup test environment for each test.
+ */
@Before
public void setUp() throws IOException {
logFiles = new ArrayList<>();
@@ -619,6 +625,9 @@ public class LogviewerLogSearchHandlerTest {
new File(topoPath, "6700").createNewFile();
}
+ /**
+ * Clean up test environment.
+ */
@After
public void tearDown() {
if (StringUtils.isNotEmpty(topoPath)) {
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/ArgumentsVerifier.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/ArgumentsVerifier.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/ArgumentsVerifier.java
index e52c9db..7fc0ab6 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/ArgumentsVerifier.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/ArgumentsVerifier.java
@@ -18,13 +18,22 @@
package org.apache.storm.daemon.logviewer.testsupport;
-import org.mockito.ArgumentCaptor;
+import static org.junit.Assert.assertEquals;
import java.util.function.Consumer;
+import org.mockito.ArgumentCaptor;
-import static org.junit.Assert.assertEquals;
-
+/**
+ * Help verifying captured argument in Mockito.
+ */
public class ArgumentsVerifier {
+ /**
+ * Asserting that method is called with expected first argument.
+ *
+ * @param verifyConsumer Consumer implementation that takes ArgumentCaptor and call 'Mockito.verify'
+ * @param argClazz Class type for argument
+ * @param expectedArg expected argument
+ */
public static <T> void verifyFirstCallArgsForSingleArgMethod(Consumer<ArgumentCaptor<T>> verifyConsumer,
Class<T> argClazz, T expectedArg) {
ArgumentCaptor<T> captor = ArgumentCaptor.forClass(argClazz);
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockDirectoryBuilder.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockDirectoryBuilder.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockDirectoryBuilder.java
index 7215456..b8be8ad 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockDirectoryBuilder.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockDirectoryBuilder.java
@@ -18,17 +18,20 @@
package org.apache.storm.daemon.logviewer.testsupport;
-import java.io.File;
-import java.io.IOException;
-
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.io.File;
+import java.io.IOException;
+
public class MockDirectoryBuilder {
private String dirName;
private long mtime;
private File[] files;
+ /**
+ * Constructor.
+ */
public MockDirectoryBuilder() {
this.dirName = "adir";
this.mtime = 1;
@@ -50,6 +53,9 @@ public class MockDirectoryBuilder {
return this;
}
+ /**
+ * Build mocked File object with given (or default) attributes for a directory.
+ */
public File build() {
File mockFile = mock(File.class);
when(mockFile.getName()).thenReturn(dirName);
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockFileBuilder.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockFileBuilder.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockFileBuilder.java
index 385eec4..e6a7c20 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockFileBuilder.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/testsupport/MockFileBuilder.java
@@ -18,17 +18,20 @@
package org.apache.storm.daemon.logviewer.testsupport;
-import java.io.File;
-import java.io.IOException;
-
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import java.io.File;
+import java.io.IOException;
+
public class MockFileBuilder {
private String fileName;
private long mtime;
private long length;
+ /**
+ * Constructor.
+ */
public MockFileBuilder() {
this.fileName = "afile";
this.mtime = 1;
@@ -50,6 +53,9 @@ public class MockFileBuilder {
return this;
}
+ /**
+ * Build mocked File object with given (or default) attributes for a file.
+ */
public File build() {
File mockFile = mock(File.class);
when(mockFile.getName()).thenReturn(fileName);
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/LogCleanerTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/LogCleanerTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/LogCleanerTest.java
index 21f4e9e..1031c04 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/LogCleanerTest.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/LogCleanerTest.java
@@ -18,15 +18,22 @@
package org.apache.storm.daemon.logviewer.utils;
-import org.apache.storm.daemon.supervisor.SupervisorUtils;
-import org.apache.storm.daemon.logviewer.testsupport.MockDirectoryBuilder;
-import org.apache.storm.daemon.logviewer.testsupport.MockFileBuilder;
-import org.apache.storm.generated.LSWorkerHeartbeat;
-import org.apache.storm.utils.Time;
-import org.apache.storm.utils.Utils;
-import org.jooq.lambda.Seq;
-import org.junit.Test;
-import org.mockito.internal.util.collections.Sets;
+import static java.util.stream.Collectors.toList;
+import static org.apache.storm.Config.SUPERVISOR_WORKER_TIMEOUT_SECS;
+import static org.apache.storm.DaemonConfig.LOGVIEWER_CLEANUP_AGE_MINS;
+import static org.apache.storm.DaemonConfig.LOGVIEWER_CLEANUP_INTERVAL_SECS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Matchers.anyListOf;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyMapOf;
+import static org.mockito.Matchers.anySetOf;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.File;
import java.io.FileFilter;
@@ -40,27 +47,19 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
-import static java.util.stream.Collectors.toList;
-import static org.apache.storm.Config.SUPERVISOR_WORKER_TIMEOUT_SECS;
-import static org.apache.storm.DaemonConfig.LOGVIEWER_CLEANUP_AGE_MINS;
-import static org.apache.storm.DaemonConfig.LOGVIEWER_CLEANUP_INTERVAL_SECS;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyListOf;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyMapOf;
-import static org.mockito.Matchers.anySetOf;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.doAnswer;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.apache.storm.daemon.logviewer.testsupport.MockDirectoryBuilder;
+import org.apache.storm.daemon.logviewer.testsupport.MockFileBuilder;
+import org.apache.storm.daemon.supervisor.SupervisorUtils;
+import org.apache.storm.generated.LSWorkerHeartbeat;
+import org.apache.storm.utils.Time;
+import org.apache.storm.utils.Utils;
+import org.jooq.lambda.Seq;
+import org.junit.Test;
+import org.mockito.internal.util.collections.Sets;
public class LogCleanerTest {
/**
@@ -84,10 +83,10 @@ public class LogCleanerTest {
LogCleaner logCleaner = new LogCleaner(conf, workerLogs, mockDirectoryCleaner, null);
- long nowMillis = Time.currentTimeMillis();
- long cutoffMillis = logCleaner.cleanupCutoffAgeMillis(nowMillis);
- long oldMtimeMillis = cutoffMillis - 500;
- long newMtimeMillis = cutoffMillis + 500;
+ final long nowMillis = Time.currentTimeMillis();
+ final long cutoffMillis = logCleaner.cleanupCutoffAgeMillis(nowMillis);
+ final long oldMtimeMillis = cutoffMillis - 500;
+ final long newMtimeMillis = cutoffMillis + 500;
List<File> matchingFiles = new ArrayList<>();
matchingFiles.add(new MockDirectoryBuilder().setDirName("3031").setMtime(oldMtimeMillis).build());
@@ -278,7 +277,7 @@ public class LogCleanerTest {
}
/**
- * cleanup function forceDeletes files of dead workers
+ * cleanup function forceDeletes files of dead workers.
*/
@Test
public void testCleanupFn() throws IOException {
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/ResourceAuthorizerTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/ResourceAuthorizerTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/ResourceAuthorizerTest.java
index 3d0e43e..63363fa 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/ResourceAuthorizerTest.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/ResourceAuthorizerTest.java
@@ -18,14 +18,6 @@
package org.apache.storm.daemon.logviewer.utils;
-import org.apache.storm.daemon.logviewer.testsupport.ArgumentsVerifier;
-import org.apache.storm.utils.Utils;
-import org.junit.Test;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
import static org.apache.storm.Config.NIMBUS_ADMINS;
import static org.apache.storm.Config.TOPOLOGY_GROUPS;
import static org.apache.storm.Config.TOPOLOGY_USERS;
@@ -38,6 +30,14 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.storm.daemon.logviewer.testsupport.ArgumentsVerifier;
+import org.apache.storm.utils.Utils;
+import org.junit.Test;
+
public class ResourceAuthorizerTest {
/**
@@ -172,11 +172,11 @@ public class ResourceAuthorizerTest {
private void verifyStubMethodsAreCalledProperly(ResourceAuthorizer authorizer) {
ArgumentsVerifier.verifyFirstCallArgsForSingleArgMethod(
- captor -> verify(authorizer, times(2)).getLogUserGroupWhitelist(captor.capture()),
- String.class, "non-blank-fname");
+ captor -> verify(authorizer, times(2)).getLogUserGroupWhitelist(captor.capture()),
+ String.class, "non-blank-fname");
ArgumentsVerifier.verifyFirstCallArgsForSingleArgMethod(
- captor -> verify(authorizer).getUserGroups(captor.capture()),
- String.class, "alice");
+ captor -> verify(authorizer).getUserGroups(captor.capture()),
+ String.class, "alice");
}
}
http://git-wip-us.apache.org/repos/asf/storm/blob/6a041a98/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/WorkerLogsTest.java
----------------------------------------------------------------------
diff --git a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/WorkerLogsTest.java b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/WorkerLogsTest.java
index b8b5d8c..30b1678 100644
--- a/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/WorkerLogsTest.java
+++ b/storm-webapp/src/test/java/org/apache/storm/daemon/logviewer/utils/WorkerLogsTest.java
@@ -18,11 +18,10 @@
package org.apache.storm.daemon.logviewer.utils;
-import org.apache.storm.daemon.logviewer.testsupport.MockDirectoryBuilder;
-import org.apache.storm.daemon.logviewer.testsupport.MockFileBuilder;
-import org.apache.storm.daemon.supervisor.SupervisorUtils;
-import org.apache.storm.utils.Utils;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.anyMapOf;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.File;
import java.io.IOException;
@@ -30,10 +29,11 @@ import java.util.Collections;
import java.util.Map;
import java.util.Optional;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Matchers.anyMapOf;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.apache.storm.daemon.logviewer.testsupport.MockDirectoryBuilder;
+import org.apache.storm.daemon.logviewer.testsupport.MockFileBuilder;
+import org.apache.storm.daemon.supervisor.SupervisorUtils;
+import org.apache.storm.utils.Utils;
+import org.junit.Test;
public class WorkerLogsTest {