Marius, Could you please help merging this to master, I believe this is the last thing we need to get the 0.2.0 release out.
Thanks On Mon, Jan 23, 2017 at 8:37 AM, <chipsenkb...@apache.org> wrote: > Repository: incubator-toree > Updated Branches: > refs/heads/0.1.x 2eb26cd3c -> f0bb5d238 > > > Removed compiled assets from codebase. > > Generate them during testing instead. This is adapted from code that is > part of Apache Spark. > > > Project: http://git-wip-us.apache.org/repos/asf/incubator-toree/repo > Commit: http://git-wip-us.apache.org/repos/asf/incubator-toree/ > commit/f0bb5d23 > Tree: http://git-wip-us.apache.org/repos/asf/incubator-toree/tree/f0bb5d23 > Diff: http://git-wip-us.apache.org/repos/asf/incubator-toree/diff/f0bb5d23 > > Branch: refs/heads/0.1.x > Commit: f0bb5d238dc10376db3935c15e007ea46076e548 > Parents: 2eb26cd > Author: mariusvniekerk <marius.v.niek...@gmail.com> > Authored: Mon Jan 23 10:47:42 2017 -0500 > Committer: mariusvniekerk <marius.v.niek...@gmail.com> > Committed: Mon Jan 23 10:53:30 2017 -0500 > > ---------------------------------------------------------------------- > .../src/test/resources/ScalaTestJar.jar | Bin 1313 -> 0 bytes > .../src/test/resources/TestJar.jar | Bin 849 -> 0 bytes > .../src/test/resources/TestJar2.jar | Bin 736 -> 0 bytes > .../AddExternalJarMagicSpecForIntegration.scala | 60 +++++++++++-------- > .../apache/spark/toree/testutils/JarUtils.scala | 41 +++++++++++++ > 5 files changed, 75 insertions(+), 26 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/incubator-toree/ > blob/f0bb5d23/scala-interpreter/src/test/resources/ScalaTestJar.jar > ---------------------------------------------------------------------- > diff --git a/scala-interpreter/src/test/resources/ScalaTestJar.jar > b/scala-interpreter/src/test/resources/ScalaTestJar.jar > deleted file mode 100644 > index de9bed6..0000000 > Binary files a/scala-interpreter/src/test/resources/ScalaTestJar.jar and > /dev/null differ > > http://git-wip-us.apache.org/repos/asf/incubator-toree/ > blob/f0bb5d23/scala-interpreter/src/test/resources/TestJar.jar > ---------------------------------------------------------------------- > diff --git a/scala-interpreter/src/test/resources/TestJar.jar > b/scala-interpreter/src/test/resources/TestJar.jar > deleted file mode 100644 > index 153ea3a..0000000 > Binary files a/scala-interpreter/src/test/resources/TestJar.jar and > /dev/null differ > > http://git-wip-us.apache.org/repos/asf/incubator-toree/ > blob/f0bb5d23/scala-interpreter/src/test/resources/TestJar2.jar > ---------------------------------------------------------------------- > diff --git a/scala-interpreter/src/test/resources/TestJar2.jar > b/scala-interpreter/src/test/resources/TestJar2.jar > deleted file mode 100644 > index 1e40e7e..0000000 > Binary files a/scala-interpreter/src/test/resources/TestJar2.jar and > /dev/null differ > > http://git-wip-us.apache.org/repos/asf/incubator-toree/ > blob/f0bb5d23/scala-interpreter/src/test/scala/ > integration/interpreter/scala/AddExternalJarMagicSpecForIntegration.scala > ---------------------------------------------------------------------- > diff --git a/scala-interpreter/src/test/scala/integration/interpreter/ > scala/AddExternalJarMagicSpecForIntegration.scala > b/scala-interpreter/src/test/scala/integration/interpreter/scala/ > AddExternalJarMagicSpecForIntegration.scala > index 2863bec..8fdafe7 100644 > --- a/scala-interpreter/src/test/scala/integration/interpreter/scala/ > AddExternalJarMagicSpecForIntegration.scala > +++ b/scala-interpreter/src/test/scala/integration/interpreter/scala/ > AddExternalJarMagicSpecForIntegration.scala > @@ -17,13 +17,14 @@ > > package integration.interpreter.scala > > -import java.io.{ByteArrayOutputStream, OutputStream} > +import java.io.{ByteArrayOutputStream, File, OutputStream} > > +import org.apache.spark.toree.testutils.JarUtils > import org.apache.toree.global.StreamState > import org.apache.toree.interpreter._ > import org.apache.toree.kernel.api.KernelLike > import org.apache.toree.kernel.interpreter.scala.{ScalaInterpreter, > StandardSettingsProducer, StandardSparkIMainProducer, > StandardTaskManagerProducer} > -import org.apache.toree.utils.{TaskManager, MultiOutputStream} > +import org.apache.toree.utils.{MultiOutputStream, TaskManager} > import org.scalatest.mock.MockitoSugar > import org.scalatest.{BeforeAndAfter, FunSpec, Matchers} > > @@ -33,6 +34,7 @@ class AddExternalJarMagicSpecForIntegration > > private val outputResult = new ByteArrayOutputStream() > private var interpreter: Interpreter = _ > + private var tempdir: File = _ > > before { > interpreter = new ScalaInterpreter { > @@ -44,6 +46,8 @@ class AddExternalJarMagicSpecForIntegration > interpreter.init(mock[KernelLike]) > > StreamState.setStreams(outputStream = outputResult) > + > + tempdir = JarUtils.createTemporaryDir() > } > > after { > @@ -53,7 +57,8 @@ class AddExternalJarMagicSpecForIntegration > describe("ScalaInterpreter") { > describe("#addJars") { > it("should be able to load an external jar") { > - val testJarUrl = this.getClass.getClassLoader. > getResource("TestJar.jar") > + > + val testJarUrl = JarUtils.createDummyJar(tempdir.toString, > "testing.external", "TestClass") > > // > // NOTE: This can be done with any jar. I have tested it > previously by > @@ -62,14 +67,14 @@ class AddExternalJarMagicSpecForIntegration > > // Should fail since jar was not added to paths > interpreter.interpret( > - "import com.ibm.testjar.TestClass")._1 should be (Results.Error) > + "import testing.external.TestClass")._1 should be > (Results.Error) > > // Add jar to paths > interpreter.addJars(testJarUrl) > > // Should now succeed > interpreter.interpret( > - "import com.ibm.testjar.TestClass")._1 should be > (Results.Success) > + "import testing.external.TestClass")._1 should be > (Results.Success) > > // Should now run > interpreter.interpret( > @@ -78,7 +83,9 @@ class AddExternalJarMagicSpecForIntegration > outputResult.toString should be ("Hello, Chip\n") > } > > - it("should support Scala jars") { > + // Test disabled due to removal of statically compiled Scala Jar. > + // Should replace with something that fetches a jar using coursier > instead. > + ignore("should support Scala jars") { > val testJarUrl = this.getClass.getClassLoader. > getResource("ScalaTestJar.jar") > > // Should fail since jar was not added to paths > @@ -101,9 +108,9 @@ class AddExternalJarMagicSpecForIntegration > > it("should be able to add multiple jars at once") { > val testJar1Url = > - this.getClass.getClassLoader.getResource("TestJar.jar") > + JarUtils.createDummyJar(tempdir.toString, "testing.testjar1", > "TestClass") > val testJar2Url = > - this.getClass.getClassLoader.getResource("TestJar2.jar") > + JarUtils.createDummyJar(tempdir.toString, "testing.testjar2", > "TestClass") > // val interpreter = new ScalaInterpreter(List(), > mock[OutputStream]) > // with StandardSparkIMainProducer > // with StandardTaskManagerProducer > @@ -112,37 +119,37 @@ class AddExternalJarMagicSpecForIntegration > > // Should fail since jars were not added to paths > interpreter.interpret( > - "import com.ibm.testjar.TestClass")._1 should be (Results.Error) > + "import testing.testjar.TestClass")._1 should be (Results.Error) > interpreter.interpret( > - "import com.ibm.testjar2.TestClass")._1 should be > (Results.Error) > + "import testing.testjar2.TestClass")._1 should be > (Results.Error) > > // Add jars to paths > interpreter.addJars(testJar1Url, testJar2Url) > > // Should now succeed > interpreter.interpret( > - "import com.ibm.testjar.TestClass")._1 should be > (Results.Success) > + "import testing.testjar.TestClass")._1 should be > (Results.Success) > interpreter.interpret( > - "import com.ibm.testjar2.TestClass")._1 should be > (Results.Success) > + "import testing.testjar2.TestClass")._1 should be > (Results.Success) > > // Should now run > interpreter.interpret( > - """println(new com.ibm.testjar.TestClass().sayHello("Chip"))""" > + """println(new testing.testjar.TestClass().sayHello("Chip"))""" > ) should be ((Results.Success, Left(""))) > outputResult.toString should be ("Hello, Chip\n") > outputResult.reset() > > interpreter.interpret( > - """println(new com.ibm.testjar2.TestClass().CallMe())""" > + """println(new testing.testjar.TestClass().addStuff(1, 2))""" > ) should be ((Results.Success, Left(""))) > outputResult.toString should be ("3\n") > } > > it("should be able to add multiple jars in consecutive calls to > addjar") { > val testJar1Url = > - this.getClass.getClassLoader.getResource("TestJar.jar") > + JarUtils.createDummyJar(tempdir.toString, "testing.testjar1", > "TestClass") > val testJar2Url = > - this.getClass.getClassLoader.getResource("TestJar2.jar") > + JarUtils.createDummyJar(tempdir.toString, "testing.testjar2", > "TestClass") > // val interpreter = new ScalaInterpreter(List(), > mock[OutputStream]) > // with StandardSparkIMainProducer > // with StandardTaskManagerProducer > @@ -151,45 +158,46 @@ class AddExternalJarMagicSpecForIntegration > > // Should fail since jars were not added to paths > interpreter.interpret( > - "import com.ibm.testjar.TestClass")._1 should be (Results.Error) > + "import testing.testjar1.TestClass")._1 should be > (Results.Error) > interpreter.interpret( > - "import com.ibm.testjar2.TestClass")._1 should be > (Results.Error) > + "import testing.testjar2.TestClass")._1 should be > (Results.Error) > > // Add jars to paths > interpreter.addJars(testJar1Url) > interpreter.addJars(testJar2Url) > > // Should now succeed > + // Should now succeed > interpreter.interpret( > - "import com.ibm.testjar.TestClass")._1 should be > (Results.Success) > + "import testing.testjar1.TestClass")._1 should be > (Results.Success) > interpreter.interpret( > - "import com.ibm.testjar2.TestClass")._1 should be > (Results.Success) > + "import testing.testjar2.TestClass")._1 should be > (Results.Success) > > // Should now run > interpreter.interpret( > - """println(new com.ibm.testjar.TestClass().sayHello("Chip"))""" > + """println(new testing.testjar1.TestClass(). > sayHello("Chip"))""" > ) should be ((Results.Success, Left(""))) > outputResult.toString should be ("Hello, Chip\n") > outputResult.reset() > > interpreter.interpret( > - """println(new com.ibm.testjar2.TestClass().CallMe())""" > + """println(new testing.testjar2.TestClass().addStuff(1, 2))""" > ) should be ((Results.Success, Left(""))) > outputResult.toString should be ("3\n") > } > > it("should not have issues with previous variables") { > val testJar1Url = > - this.getClass.getClassLoader.getResource("TestJar.jar") > + JarUtils.createDummyJar(tempdir.toString, "testing.testjar1", > "TestClass") > val testJar2Url = > - this.getClass.getClassLoader.getResource("TestJar2.jar") > + JarUtils.createDummyJar(tempdir.toString, "testing.testjar2", > "TestClass") > > // Add a jar, which reinitializes the symbols > interpreter.addJars(testJar1Url) > > interpreter.interpret( > """ > - |val t = new com.ibm.testjar.TestClass() > + |val t = new testing.testjar1.TestClass() > """.stripMargin)._1 should be (Results.Success) > > // Add a second jar, which reinitializes the symbols and breaks > the > @@ -198,7 +206,7 @@ class AddExternalJarMagicSpecForIntegration > > interpreter.interpret( > """ > - |def runMe(testClass: com.ibm.testjar.TestClass) = > + |def runMe(testClass: testing.testjar1.TestClass) = > |testClass.sayHello("Hello") > """.stripMargin)._1 should be (Results.Success) > > > http://git-wip-us.apache.org/repos/asf/incubator-toree/ > blob/f0bb5d23/scala-interpreter/src/test/scala/org/apache/spark/toree/ > testutils/JarUtils.scala > ---------------------------------------------------------------------- > diff --git > a/scala-interpreter/src/test/scala/org/apache/spark/toree/testutils/JarUtils.scala > b/scala-interpreter/src/test/scala/org/apache/spark/toree/ > testutils/JarUtils.scala > new file mode 100644 > index 0000000..572aa4a > --- /dev/null > +++ b/scala-interpreter/src/test/scala/org/apache/spark/toree/ > testutils/JarUtils.scala > @@ -0,0 +1,41 @@ > +package org.apache.spark.toree.testutils > + > +import java.io.File > +import java.util.UUID > + > +import org.apache.spark.TestUtils.{JavaSourceFromString, _} > + > +object JarUtils { > + > + def createTemporaryDir() = { > + val tempDir = System.getProperty("java.io.tmpdir") > + val dir = new File(tempDir, UUID.randomUUID.toString) > + dir.mkdirs() > + dir.deleteOnExit() > + dir.getCanonicalFile > + } > + > + def createDummyJar(destDir: String, packageName: String, className: > String) = { > + val srcDir = new File(destDir, packageName) > + srcDir.mkdirs() > + val excSource = new JavaSourceFromString( > + new File(srcDir, className).getAbsolutePath, > + s"""package $packageName; > + | > + |public class $className implements java.io.Serializable { > + | public static String sayHello(String arg) { return "Hello, " + > arg; } > + | public static int addStuff(int arg1, int arg2) { return arg1 + > arg2; } > + |} > + """. > + stripMargin) > + val excFile = createCompiledClass(className, srcDir, excSource, > Seq.empty) > + val jarFile = new File(destDir, > + s"$packageName-$className-%s.jar".format(System. > currentTimeMillis())) > + val jarURL = createJar(Seq(excFile), jarFile, directoryPrefix = > Some(packageName)) > + jarFile.deleteOnExit() > + jarURL > + } > + > + > + > +} > > -- Luciano Resende http://twitter.com/lresende1975 http://lresende.blogspot.com/