hotspot/src/share/vm/logging/log.cpp
changeset 37254 8631304f255c
parent 37247 bdbfe42632cb
child 37255 100d4a515df0
--- a/hotspot/src/share/vm/logging/log.cpp	Tue Apr 05 00:41:55 2016 +0200
+++ b/hotspot/src/share/vm/logging/log.cpp	Tue Apr 05 10:35:39 2016 +0200
@@ -31,6 +31,7 @@
 #include "logging/log.hpp"
 #include "logging/logConfiguration.hpp"
 #include "logging/logOutput.hpp"
+#include "logging/logStream.inline.hpp"
 #include "memory/resourceArea.hpp"
 
 #define assert_str_eq(s1, s2) \
@@ -315,4 +316,58 @@
   Test_logtarget_off();
 }
 
+
+static void Test_logstream_helper(outputStream* stream) {
+  TestLogFile log_file("log_stream");
+  TestLogSavedConfig tlsc(log_file.name(), "gc=debug");
+
+  // Try to log, but expect this to be filtered out.
+  stream->print("%d ", 3); stream->print("workers"); stream->cr();
+
+  FILE* fp = fopen(log_file.name(), "r");
+  assert(fp != NULL, "File read error");
+
+  char output[256 /* Large enough buffer */];
+  char* res = fgets(output, sizeof(output), fp);
+  assert(res != NULL, "assert");
+
+  assert(strstr(output, "3 workers") != NULL, "log line missing");
+
+  fclose(fp);
+}
+
+static void Test_logstream_log() {
+  Log(gc) log;
+  LogStream stream(log.debug());
+
+  Test_logstream_helper(&stream);
+}
+
+static void Test_logstream_logtarget() {
+  LogTarget(Debug, gc) log;
+  LogStream stream(log);
+
+  Test_logstream_helper(&stream);
+}
+
+static void Test_logstream_logstreamhandle() {
+  LogStreamHandle(Debug, gc) stream;
+
+  Test_logstream_helper(&stream);
+}
+
+static void Test_logstream_no_rm() {
+  ResourceMark rm;
+  outputStream* stream = LogTarget(Debug, gc)::stream();
+
+  Test_logstream_helper(stream);
+}
+
+void Test_logstream() {
+  Test_logstream_log();
+  Test_logstream_logtarget();
+  Test_logstream_logstreamhandle();
+  Test_logstream_no_rm();
+}
+
 #endif // PRODUCT