|
@@ -23,6 +23,7 @@ import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.io.FileWriter;
|
|
import java.io.PrintWriter;
|
|
import java.io.PrintWriter;
|
|
import java.io.Writer;
|
|
import java.io.Writer;
|
|
|
|
+import java.net.URL;
|
|
import java.util.Arrays;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -30,6 +31,7 @@ import java.util.Map;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
|
|
+import org.apache.commons.io.FileUtils;
|
|
import org.apache.hadoop.conf.Configuration;
|
|
import org.apache.hadoop.conf.Configuration;
|
|
import org.apache.hadoop.fs.FileUtil;
|
|
import org.apache.hadoop.fs.FileUtil;
|
|
import org.apache.hadoop.fs.Path;
|
|
import org.apache.hadoop.fs.Path;
|
|
@@ -117,7 +119,8 @@ public class TestAggregatedLogsBlock {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * All ok and the AggregatedLogsBlockFor should aggregate logs and show it.
|
|
|
|
|
|
+ * Reading from logs should succeed and they should be shown in the
|
|
|
|
+ * AggregatedLogsBlock html.
|
|
*
|
|
*
|
|
* @throws Exception
|
|
* @throws Exception
|
|
*/
|
|
*/
|
|
@@ -144,8 +147,56 @@ public class TestAggregatedLogsBlock {
|
|
assertTrue(out.contains("test log1"));
|
|
assertTrue(out.contains("test log1"));
|
|
assertTrue(out.contains("test log2"));
|
|
assertTrue(out.contains("test log2"));
|
|
assertTrue(out.contains("test log3"));
|
|
assertTrue(out.contains("test log3"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Reading from logs should succeed (from a HAR archive) and they should be
|
|
|
|
+ * shown in the AggregatedLogsBlock html.
|
|
|
|
+ *
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ @Test
|
|
|
|
+ public void testAggregatedLogsBlockHar() throws Exception {
|
|
|
|
+ FileUtil.fullyDelete(new File("target/logs"));
|
|
|
|
+ Configuration configuration = getConfiguration();
|
|
|
|
+
|
|
|
|
+ URL harUrl = ClassLoader.getSystemClassLoader()
|
|
|
|
+ .getResource("application_1440536969523_0001.har");
|
|
|
|
+ assertNotNull(harUrl);
|
|
|
|
+ String path = "target/logs/admin/logs/application_1440536969523_0001" +
|
|
|
|
+ "/application_1440536969523_0001.har";
|
|
|
|
+ FileUtils.copyDirectory(new File(harUrl.getPath()), new File(path));
|
|
|
|
+
|
|
|
|
+ AggregatedLogsBlockForTest aggregatedBlock = getAggregatedLogsBlockForTest(
|
|
|
|
+ configuration, "admin",
|
|
|
|
+ "container_1440536969523_0001_01_000001", "host1:1111");
|
|
|
|
+ ByteArrayOutputStream data = new ByteArrayOutputStream();
|
|
|
|
+ PrintWriter printWriter = new PrintWriter(data);
|
|
|
|
+ HtmlBlock html = new HtmlBlockForTest();
|
|
|
|
+ HtmlBlock.Block block = new BlockForTest(html, printWriter, 10, false);
|
|
|
|
+ aggregatedBlock.render(block);
|
|
|
|
|
|
|
|
+ block.getWriter().flush();
|
|
|
|
+ String out = data.toString();
|
|
|
|
+ assertTrue(out.contains("Hello stderr"));
|
|
|
|
+ assertTrue(out.contains("Hello stdout"));
|
|
|
|
+ assertTrue(out.contains("Hello syslog"));
|
|
|
|
+
|
|
|
|
+ aggregatedBlock = getAggregatedLogsBlockForTest(
|
|
|
|
+ configuration, "admin",
|
|
|
|
+ "container_1440536969523_0001_01_000002", "host2:2222");
|
|
|
|
+ data = new ByteArrayOutputStream();
|
|
|
|
+ printWriter = new PrintWriter(data);
|
|
|
|
+ html = new HtmlBlockForTest();
|
|
|
|
+ block = new BlockForTest(html, printWriter, 10, false);
|
|
|
|
+ aggregatedBlock.render(block);
|
|
|
|
+ block.getWriter().flush();
|
|
|
|
+ out = data.toString();
|
|
|
|
+ assertTrue(out.contains("Goodbye stderr"));
|
|
|
|
+ assertTrue(out.contains("Goodbye stdout"));
|
|
|
|
+ assertTrue(out.contains("Goodbye syslog"));
|
|
}
|
|
}
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Log files was deleted.
|
|
* Log files was deleted.
|
|
* @throws Exception
|
|
* @throws Exception
|
|
@@ -188,14 +239,20 @@ public class TestAggregatedLogsBlock {
|
|
|
|
|
|
private AggregatedLogsBlockForTest getAggregatedLogsBlockForTest(
|
|
private AggregatedLogsBlockForTest getAggregatedLogsBlockForTest(
|
|
Configuration configuration, String user, String containerId) {
|
|
Configuration configuration, String user, String containerId) {
|
|
|
|
+ return getAggregatedLogsBlockForTest(configuration, user, containerId,
|
|
|
|
+ "localhost:1234");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private AggregatedLogsBlockForTest getAggregatedLogsBlockForTest(
|
|
|
|
+ Configuration configuration, String user, String containerId,
|
|
|
|
+ String nodeName) {
|
|
HttpServletRequest request = mock(HttpServletRequest.class);
|
|
HttpServletRequest request = mock(HttpServletRequest.class);
|
|
when(request.getRemoteUser()).thenReturn(user);
|
|
when(request.getRemoteUser()).thenReturn(user);
|
|
AggregatedLogsBlockForTest aggregatedBlock = new AggregatedLogsBlockForTest(
|
|
AggregatedLogsBlockForTest aggregatedBlock = new AggregatedLogsBlockForTest(
|
|
configuration);
|
|
configuration);
|
|
aggregatedBlock.setRequest(request);
|
|
aggregatedBlock.setRequest(request);
|
|
aggregatedBlock.moreParams().put(YarnWebParams.CONTAINER_ID, containerId);
|
|
aggregatedBlock.moreParams().put(YarnWebParams.CONTAINER_ID, containerId);
|
|
- aggregatedBlock.moreParams().put(YarnWebParams.NM_NODENAME,
|
|
|
|
- "localhost:1234");
|
|
|
|
|
|
+ aggregatedBlock.moreParams().put(YarnWebParams.NM_NODENAME, nodeName);
|
|
aggregatedBlock.moreParams().put(YarnWebParams.APP_OWNER, user);
|
|
aggregatedBlock.moreParams().put(YarnWebParams.APP_OWNER, user);
|
|
aggregatedBlock.moreParams().put("start", "");
|
|
aggregatedBlock.moreParams().put("start", "");
|
|
aggregatedBlock.moreParams().put("end", "");
|
|
aggregatedBlock.moreParams().put("end", "");
|