瀏覽代碼

[livy] Capture stdout in scala, add tests for scala and python

Erick Tryzelaar 10 年之前
父節點
當前提交
e4555b0bc0

+ 15 - 13
apps/spark/java/livy-repl/src/main/scala/com/cloudera/hue/livy/repl/scala/interpreter/Interpreter.scala

@@ -62,23 +62,25 @@ class Interpreter {
 
 
       _state = Interpreter.Busy()
       _state = Interpreter.Busy()
 
 
-      val result = sparkIMain.interpret(code) match {
-        case Results.Success =>
-          val output = outputStream.toString("UTF-8").trim
-          outputStream.reset()
+      val result = scala.Console.withOut(outputStream) {
+        sparkIMain.interpret(code) match {
+          case Results.Success =>
+            val output = outputStream.toString("UTF-8").trim
+            outputStream.reset()
 
 
-          ExecuteComplete(executeCount - 1, output)
+            ExecuteComplete(executeCount - 1, output)
 
 
-        case Results.Incomplete =>
-          val output = outputStream.toString("UTF-8").trim
-          outputStream.reset()
+          case Results.Incomplete =>
+            val output = outputStream.toString("UTF-8").trim
+            outputStream.reset()
 
 
-          ExecuteIncomplete(executeCount - 1, output)
+            ExecuteIncomplete(executeCount - 1, output)
 
 
-        case Results.Error =>
-          val output = outputStream.toString("UTF-8").trim
-          outputStream.reset()
-          ExecuteError(executeCount - 1, output)
+          case Results.Error =>
+            val output = outputStream.toString("UTF-8").trim
+            outputStream.reset()
+            ExecuteError(executeCount - 1, output)
+        }
       }
       }
 
 
       _state = Interpreter.Idle()
       _state = Interpreter.Idle()

+ 13 - 0
apps/spark/java/livy-repl/src/test/scala/com/cloudera/hue/livy/repl/PythonSessionSpec.scala

@@ -97,5 +97,18 @@ class PythonSessionSpec extends FunSpec with ShouldMatchers with BeforeAndAfter
 
 
       result should equal (expectedResult)
       result should equal (expectedResult)
     }
     }
+
+    it("should capture stdout") {
+      val result = Await.result(session.execute("""print 'Hello World'"""), Duration.Inf)
+      val expectedResult = Extraction.decompose(Map(
+        "status" -> "ok",
+        "execution_count" -> 0,
+        "data" -> Map(
+          "text/plain" -> "Hello World"
+        )
+      ))
+
+      result should equal (expectedResult)
+    }
   }
   }
 }
 }

+ 13 - 0
apps/spark/java/livy-repl/src/test/scala/com/cloudera/hue/livy/repl/SparkSessionSpec.scala

@@ -79,5 +79,18 @@ class SparkSessionSpec extends FunSpec with ShouldMatchers with BeforeAndAfter {
 
 
       result should equal (expectedResult)
       result should equal (expectedResult)
     }
     }
+
+    it("should capture stdout") {
+      val result = Await.result(session.execute("""println("Hello World")"""), Duration.Inf)
+      val expectedResult = Extraction.decompose(Map(
+        "status" -> "ok",
+        "execution_count" -> 0,
+        "data" -> Map(
+          "text/plain" -> "Hello World"
+        )
+      ))
+
+      result should equal (expectedResult)
+    }
   }
   }
  }
  }