http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/AbstractInterpreterTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/AbstractInterpreterTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/AbstractInterpreterTest.java deleted file mode 100644 index 21d7526..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/AbstractInterpreterTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.apache.zeppelin.interpreter; - -import org.apache.commons.io.FileUtils; -import org.apache.zeppelin.conf.ZeppelinConfiguration; -import org.apache.zeppelin.display.AngularObjectRegistryListener; -import org.apache.zeppelin.helium.ApplicationEventListener; -import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; -import org.junit.After; -import org.junit.Before; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.File; - -import static org.mockito.Mockito.mock; - - -/** - * This class will load configuration files under - * src/test/resources/interpreter - * src/test/resources/conf - * - * to construct InterpreterSettingManager and InterpreterFactory properly - * - */ -public abstract class AbstractInterpreterTest { - protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractInterpreterTest.class); - private static final String INTERPRETER_SCRIPT = - System.getProperty("os.name").startsWith("Windows") ? - "../bin/interpreter.cmd" : - "../bin/interpreter.sh"; - - protected InterpreterSettingManager interpreterSettingManager; - protected InterpreterFactory interpreterFactory; - protected File testRootDir; - protected File interpreterDir; - protected File confDir; - protected File notebookDir; - protected ZeppelinConfiguration conf; - - @Before - public void setUp() throws Exception { - // copy the resources files to a temp folder - testRootDir = new File(System.getProperty("java.io.tmpdir") + "/Zeppelin_Test_" + System.currentTimeMillis()); - testRootDir.mkdirs(); - LOGGER.info("Create tmp directory: {} as root folder of ZEPPELIN_INTERPRETER_DIR & ZEPPELIN_CONF_DIR", testRootDir.getAbsolutePath()); - interpreterDir = new File(testRootDir, "interpreter"); - confDir = new File(testRootDir, "conf"); - notebookDir = new File(testRootDir, "notebook"); - - interpreterDir.mkdirs(); - confDir.mkdirs(); - notebookDir.mkdirs(); - - FileUtils.copyDirectory(new File("src/test/resources/interpreter"), interpreterDir); - FileUtils.copyDirectory(new File("src/test/resources/conf"), confDir); - - System.setProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_CONF_DIR.getVarName(), confDir.getAbsolutePath()); - System.setProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_INTERPRETER_DIR.getVarName(), interpreterDir.getAbsolutePath()); - System.setProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_NOTEBOOK_DIR.getVarName(), notebookDir.getAbsolutePath()); - System.setProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_INTERPRETER_REMOTE_RUNNER.getVarName(), INTERPRETER_SCRIPT); - - conf = new ZeppelinConfiguration(); - interpreterSettingManager = new InterpreterSettingManager(conf, - mock(AngularObjectRegistryListener.class), mock(RemoteInterpreterProcessListener.class), mock(ApplicationEventListener.class)); - interpreterFactory = new InterpreterFactory(interpreterSettingManager); - } - - @After - public void tearDown() throws Exception { - interpreterSettingManager.close(); - FileUtils.deleteDirectory(testRootDir); - } -}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DoubleEchoInterpreter.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DoubleEchoInterpreter.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DoubleEchoInterpreter.java deleted file mode 100644 index 8eea4b2..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DoubleEchoInterpreter.java +++ /dev/null @@ -1,61 +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.zeppelin.interpreter; - -import java.util.Properties; - -/** - * - */ -public class DoubleEchoInterpreter extends Interpreter { - - public DoubleEchoInterpreter(Properties property) { - super(property); - } - - @Override - public void open() { - - } - - @Override - public void close() { - - } - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - return new InterpreterResult(InterpreterResult.Code.SUCCESS, st + "," + st); - } - - @Override - public void cancel(InterpreterContext context) { - - } - - @Override - public FormType getFormType() { - return null; - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DummyInterpreter.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DummyInterpreter.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DummyInterpreter.java new file mode 100644 index 0000000..a7a6eb9 --- /dev/null +++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/DummyInterpreter.java @@ -0,0 +1,43 @@ +package org.apache.zeppelin.interpreter; + +import java.util.Properties; + +/** + * + */ +public class DummyInterpreter extends Interpreter { + + public DummyInterpreter(Properties property) { + super(property); + } + + @Override + public void open() { + + } + + @Override + public void close() { + + } + + @Override + public InterpreterResult interpret(String st, InterpreterContext context) { + return null; + } + + @Override + public void cancel(InterpreterContext context) { + + } + + @Override + public FormType getFormType() { + return null; + } + + @Override + public int getProgress(InterpreterContext context) { + return 0; + } +} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/EchoInterpreter.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/EchoInterpreter.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/EchoInterpreter.java deleted file mode 100644 index e7a04f3..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/EchoInterpreter.java +++ /dev/null @@ -1,65 +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.zeppelin.interpreter; - -import java.util.Properties; - -/** - * Just return the received statement back - */ -public class EchoInterpreter extends Interpreter { - - public EchoInterpreter(Properties property) { - super(property); - } - - @Override - public void open() { - - } - - @Override - public void close() { - - } - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - if (Boolean.parseBoolean(property.getProperty("zeppelin.interpreter.echo.fail", "false"))) { - return new InterpreterResult(InterpreterResult.Code.ERROR); - } else { - return new InterpreterResult(InterpreterResult.Code.SUCCESS, st); - } - } - - @Override - public void cancel(InterpreterContext context) { - - } - - @Override - public FormType getFormType() { - return FormType.NATIVE; - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java deleted file mode 100644 index f3137d9..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java +++ /dev/null @@ -1,66 +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.zeppelin.interpreter; - -import org.apache.zeppelin.interpreter.remote.RemoteInterpreter; -import org.junit.Test; - -import java.io.IOException; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -public class InterpreterFactoryTest extends AbstractInterpreterTest { - - @Test - public void testGetFactory() throws IOException { - // no default interpreter because there's no interpreter setting binded to this note - assertNull(interpreterFactory.getInterpreter("user1", "note1", "")); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getSettingIds()); - assertTrue(interpreterFactory.getInterpreter("user1", "note1", "") instanceof RemoteInterpreter); - RemoteInterpreter remoteInterpreter = (RemoteInterpreter) interpreterFactory.getInterpreter("user1", "note1", ""); - // EchoInterpreter is the default interpreter (see zeppelin-interpreter/src/test/resources/conf/interpreter.json) - assertEquals(EchoInterpreter.class.getName(), remoteInterpreter.getClassName()); - - assertTrue(interpreterFactory.getInterpreter("user1", "note1", "test") instanceof RemoteInterpreter); - remoteInterpreter = (RemoteInterpreter) interpreterFactory.getInterpreter("user1", "note1", "test"); - assertEquals(EchoInterpreter.class.getName(), remoteInterpreter.getClassName()); - - assertTrue(interpreterFactory.getInterpreter("user1", "note1", "echo") instanceof RemoteInterpreter); - remoteInterpreter = (RemoteInterpreter) interpreterFactory.getInterpreter("user1", "note1", "echo"); - assertEquals(EchoInterpreter.class.getName(), remoteInterpreter.getClassName()); - - assertTrue(interpreterFactory.getInterpreter("user1", "note1", "double_echo") instanceof RemoteInterpreter); - remoteInterpreter = (RemoteInterpreter) interpreterFactory.getInterpreter("user1", "note1", "double_echo"); - assertEquals(DoubleEchoInterpreter.class.getName(), remoteInterpreter.getClassName()); - } - - @Test(expected = InterpreterException.class) - public void testUnknownRepl1() throws IOException { - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getSettingIds()); - interpreterFactory.getInterpreter("user1", "note1", "test.unknown_repl"); - } - - @Test - public void testUnknownRepl2() throws IOException { - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getSettingIds()); - assertNull(interpreterFactory.getInterpreter("user1", "note1", "unknown_repl")); - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterGroupTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterGroupTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterGroupTest.java deleted file mode 100644 index 11607bb..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterGroupTest.java +++ /dev/null @@ -1,90 +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.zeppelin.interpreter; - -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sonatype.aether.RepositoryException; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import static org.junit.Assert.assertEquals; - - -public class InterpreterGroupTest { - - private static final Logger LOGGER = LoggerFactory.getLogger(InterpreterGroupTest.class); - - private InterpreterSetting interpreterSetting; - - @Before - public void setUp() throws IOException, RepositoryException { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SCOPED); - interpreterOption.setRemote(false); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - } - - @Test - public void testInterpreterGroup() { - InterpreterGroup interpreterGroup = new InterpreterGroup("group_1", interpreterSetting); - assertEquals(0, interpreterGroup.getSessionNum()); - - // create session_1 - List<Interpreter> interpreters = interpreterGroup.getOrCreateSession("user1", "session_1"); - assertEquals(2, interpreters.size()); - assertEquals(EchoInterpreter.class.getName(), interpreters.get(0).getClassName()); - assertEquals(DoubleEchoInterpreter.class.getName(), interpreters.get(1).getClassName()); - assertEquals(1, interpreterGroup.getSessionNum()); - - // get the same interpreters when interpreterGroup.getOrCreateSession is invoked again - assertEquals(interpreters, interpreterGroup.getOrCreateSession("user1", "session_1")); - assertEquals(1, interpreterGroup.getSessionNum()); - - // create session_2 - List<Interpreter> interpreters2 = interpreterGroup.getOrCreateSession("user1", "session_2"); - assertEquals(2, interpreters2.size()); - assertEquals(EchoInterpreter.class.getName(), interpreters2.get(0).getClassName()); - assertEquals(DoubleEchoInterpreter.class.getName(), interpreters2.get(1).getClassName()); - assertEquals(2, interpreterGroup.getSessionNum()); - - // close session_1 - interpreterGroup.close("session_1"); - assertEquals(1, interpreterGroup.getSessionNum()); - - // close InterpreterGroup - interpreterGroup.close(); - assertEquals(0, interpreterGroup.getSessionNum()); - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterOutputChangeWatcherTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterOutputChangeWatcherTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterOutputChangeWatcherTest.java index f3a30fb..e376809 100644 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterOutputChangeWatcherTest.java +++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterOutputChangeWatcherTest.java @@ -21,7 +21,6 @@ import static org.junit.Assert.*; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.util.concurrent.atomic.AtomicInteger; import org.junit.After; import org.junit.Before; @@ -30,7 +29,7 @@ import org.junit.Test; public class InterpreterOutputChangeWatcherTest implements InterpreterOutputChangeListener { private File tmpDir; private File fileChanged; - private AtomicInteger numChanged; + private int numChanged; private InterpreterOutputChangeWatcher watcher; @Before @@ -41,7 +40,7 @@ public class InterpreterOutputChangeWatcherTest implements InterpreterOutputChan tmpDir = new File(System.getProperty("java.io.tmpdir")+"/ZeppelinLTest_"+System.currentTimeMillis()); tmpDir.mkdirs(); fileChanged = null; - numChanged = new AtomicInteger(0); + numChanged = 0; } @After @@ -67,7 +66,7 @@ public class InterpreterOutputChangeWatcherTest implements InterpreterOutputChan @Test public void test() throws IOException, InterruptedException { assertNull(fileChanged); - assertEquals(0, numChanged.get()); + assertEquals(0, numChanged); Thread.sleep(1000); // create new file @@ -93,14 +92,14 @@ public class InterpreterOutputChangeWatcherTest implements InterpreterOutputChan } assertNotNull(fileChanged); - assertEquals(1, numChanged.get()); + assertEquals(1, numChanged); } @Override public void fileChanged(File file) { fileChanged = file; - numChanged.incrementAndGet(); + numChanged++; synchronized(this) { notify(); http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java deleted file mode 100644 index c74760f..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingManagerTest.java +++ /dev/null @@ -1,270 +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.zeppelin.interpreter; - -import org.apache.zeppelin.conf.ZeppelinConfiguration; -import org.apache.zeppelin.dep.Dependency; -import org.apache.zeppelin.display.AngularObjectRegistryListener; -import org.apache.zeppelin.helium.ApplicationEventListener; -import org.apache.zeppelin.interpreter.remote.RemoteInterpreterProcessListener; -import org.junit.Test; -import org.sonatype.aether.RepositoryException; -import org.sonatype.aether.repository.RemoteRepository; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.mock; - - -public class InterpreterSettingManagerTest extends AbstractInterpreterTest { - - @Test - public void testInitInterpreterSettingManager() throws IOException, RepositoryException { - assertEquals(2, interpreterSettingManager.get().size()); - InterpreterSetting interpreterSetting = interpreterSettingManager.getByName("test"); - assertEquals("test", interpreterSetting.getName()); - assertEquals("test", interpreterSetting.getGroup()); - assertEquals(2, interpreterSetting.getInterpreterInfos().size()); - // 3 other builtin properties: - // * zeppelin.interpeter.output.limit - // * zeppelin.interpreter.localRepo - // * zeppelin.interpreter.max.poolsize - assertEquals(6, interpreterSetting.getJavaProperties().size()); - assertEquals("value_1", interpreterSetting.getJavaProperties().getProperty("property_1")); - assertEquals("new_value_2", interpreterSetting.getJavaProperties().getProperty("property_2")); - assertEquals("value_3", interpreterSetting.getJavaProperties().getProperty("property_3")); - assertEquals("shared", interpreterSetting.getOption().perNote); - assertEquals("shared", interpreterSetting.getOption().perUser); - assertEquals(0, interpreterSetting.getDependencies().size()); - assertNotNull(interpreterSetting.getAngularObjectRegistryListener()); - assertNotNull(interpreterSetting.getRemoteInterpreterProcessListener()); - assertNotNull(interpreterSetting.getAppEventListener()); - assertNotNull(interpreterSetting.getDependencyResolver()); - assertNotNull(interpreterSetting.getInterpreterSettingManager()); - - List<RemoteRepository> repositories = interpreterSettingManager.getRepositories(); - assertEquals(2, repositories.size()); - assertEquals("central", repositories.get(0).getId()); - - // Load it again - InterpreterSettingManager interpreterSettingManager2 = new InterpreterSettingManager(conf, - mock(AngularObjectRegistryListener.class), mock(RemoteInterpreterProcessListener.class), mock(ApplicationEventListener.class)); - assertEquals(2, interpreterSettingManager2.get().size()); - interpreterSetting = interpreterSettingManager2.getByName("test"); - assertEquals("test", interpreterSetting.getName()); - assertEquals("test", interpreterSetting.getGroup()); - assertEquals(2, interpreterSetting.getInterpreterInfos().size()); - assertEquals(6, interpreterSetting.getJavaProperties().size()); - assertEquals("value_1", interpreterSetting.getJavaProperties().getProperty("property_1")); - assertEquals("new_value_2", interpreterSetting.getJavaProperties().getProperty("property_2")); - assertEquals("value_3", interpreterSetting.getJavaProperties().getProperty("property_3")); - assertEquals("shared", interpreterSetting.getOption().perNote); - assertEquals("shared", interpreterSetting.getOption().perUser); - assertEquals(0, interpreterSetting.getDependencies().size()); - - repositories = interpreterSettingManager2.getRepositories(); - assertEquals(2, repositories.size()); - assertEquals("central", repositories.get(0).getId()); - - } - - @Test - public void testCreateUpdateRemoveSetting() throws IOException { - // create new interpreter setting - InterpreterOption option = new InterpreterOption(); - option.setPerNote("scoped"); - option.setPerUser("scoped"); - Map<String, InterpreterProperty> properties = new HashMap<>(); - properties.put("property_4", new InterpreterProperty("property_4","value_4")); - - try { - interpreterSettingManager.createNewSetting("test2", "test", new ArrayList<Dependency>(), option, properties); - fail("Should fail due to interpreter already existed"); - } catch (IOException e) { - assertTrue(e.getMessage().contains("already existed")); - } - - interpreterSettingManager.createNewSetting("test3", "test", new ArrayList<Dependency>(), option, properties); - assertEquals(3, interpreterSettingManager.get().size()); - InterpreterSetting interpreterSetting = interpreterSettingManager.getByName("test3"); - assertEquals("test3", interpreterSetting.getName()); - assertEquals("test", interpreterSetting.getGroup()); - // 3 other builtin properties: - // * zeppelin.interpeter.output.limit - // * zeppelin.interpreter.localRepo - // * zeppelin.interpreter.max.poolsize - assertEquals(4, interpreterSetting.getJavaProperties().size()); - assertEquals("value_4", interpreterSetting.getJavaProperties().getProperty("property_4")); - assertEquals("scoped", interpreterSetting.getOption().perNote); - assertEquals("scoped", interpreterSetting.getOption().perUser); - assertEquals(0, interpreterSetting.getDependencies().size()); - assertNotNull(interpreterSetting.getAngularObjectRegistryListener()); - assertNotNull(interpreterSetting.getRemoteInterpreterProcessListener()); - assertNotNull(interpreterSetting.getAppEventListener()); - assertNotNull(interpreterSetting.getDependencyResolver()); - assertNotNull(interpreterSetting.getInterpreterSettingManager()); - - // load it again, it should be saved in interpreter-setting.json. So we can restore it properly - InterpreterSettingManager interpreterSettingManager2 = new InterpreterSettingManager(conf, - mock(AngularObjectRegistryListener.class), mock(RemoteInterpreterProcessListener.class), mock(ApplicationEventListener.class)); - assertEquals(3, interpreterSettingManager2.get().size()); - interpreterSetting = interpreterSettingManager2.getByName("test3"); - assertEquals("test3", interpreterSetting.getName()); - assertEquals("test", interpreterSetting.getGroup()); - assertEquals(6, interpreterSetting.getJavaProperties().size()); - assertEquals("value_4", interpreterSetting.getJavaProperties().getProperty("property_4")); - assertEquals("scoped", interpreterSetting.getOption().perNote); - assertEquals("scoped", interpreterSetting.getOption().perUser); - assertEquals(0, interpreterSetting.getDependencies().size()); - - // update interpreter setting - InterpreterOption newOption = new InterpreterOption(); - newOption.setPerNote("scoped"); - newOption.setPerUser("isolated"); - Map<String, InterpreterProperty> newProperties = new HashMap<>(properties); - newProperties.put("property_4", new InterpreterProperty("property_4", "new_value_4")); - List<Dependency> newDependencies = new ArrayList<>(); - newDependencies.add(new Dependency("com.databricks:spark-avro_2.11:3.1.0")); - interpreterSettingManager.setPropertyAndRestart(interpreterSetting.getId(), newOption, newProperties, newDependencies); - interpreterSetting = interpreterSettingManager.get(interpreterSetting.getId()); - assertEquals("test3", interpreterSetting.getName()); - assertEquals("test", interpreterSetting.getGroup()); - assertEquals(4, interpreterSetting.getJavaProperties().size()); - assertEquals("new_value_4", interpreterSetting.getJavaProperties().getProperty("property_4")); - assertEquals("scoped", interpreterSetting.getOption().perNote); - assertEquals("isolated", interpreterSetting.getOption().perUser); - assertEquals(1, interpreterSetting.getDependencies().size()); - assertNotNull(interpreterSetting.getAngularObjectRegistryListener()); - assertNotNull(interpreterSetting.getRemoteInterpreterProcessListener()); - assertNotNull(interpreterSetting.getAppEventListener()); - assertNotNull(interpreterSetting.getDependencyResolver()); - assertNotNull(interpreterSetting.getInterpreterSettingManager()); - - // restart in note page - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getSettingIds()); - interpreterSettingManager.setInterpreterBinding("user2", "note2", interpreterSettingManager.getSettingIds()); - interpreterSettingManager.setInterpreterBinding("user3", "note3", interpreterSettingManager.getSettingIds()); - // create 3 sessions as it is scoped mode - interpreterSetting.getOption().setPerUser("scoped"); - interpreterSetting.getDefaultInterpreter("user1", "note1"); - interpreterSetting.getDefaultInterpreter("user2", "note2"); - interpreterSetting.getDefaultInterpreter("user3", "note3"); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - assertEquals(3, interpreterGroup.getSessionNum()); - // only close user1's session - interpreterSettingManager.restart(interpreterSetting.getId(), "note1", "user1"); - assertEquals(2, interpreterGroup.getSessionNum()); - // close all the sessions - interpreterSettingManager.restart(interpreterSetting.getId(), "note1", "anonymous"); - assertEquals(0, interpreterGroup.getSessionNum()); - - // remove interpreter setting - interpreterSettingManager.remove(interpreterSetting.getId()); - assertEquals(2, interpreterSettingManager.get().size()); - - // load it again - InterpreterSettingManager interpreterSettingManager3 = new InterpreterSettingManager(new ZeppelinConfiguration(), - mock(AngularObjectRegistryListener.class), mock(RemoteInterpreterProcessListener.class), mock(ApplicationEventListener.class)); - assertEquals(2, interpreterSettingManager3.get().size()); - - } - - @Test - public void testInterpreterBinding() throws IOException { - assertNull(interpreterSettingManager.getInterpreterBinding("note1")); - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getInterpreterSettingIds()); - assertEquals(interpreterSettingManager.getInterpreterSettingIds(), interpreterSettingManager.getInterpreterBinding("note1")); - } - - @Test - public void testUpdateInterpreterBinding_PerNoteShared() throws IOException { - InterpreterSetting defaultInterpreterSetting = interpreterSettingManager.get().get(0); - defaultInterpreterSetting.getOption().setPerNote("shared"); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getInterpreterSettingIds()); - // create interpreter of the first binded interpreter setting - interpreterFactory.getInterpreter("user1", "note1", ""); - assertEquals(1, defaultInterpreterSetting.getAllInterpreterGroups().size()); - - // choose the first setting - List<String> newSettingIds = new ArrayList<>(); - newSettingIds.add(interpreterSettingManager.getInterpreterSettingIds().get(1)); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", newSettingIds); - assertEquals(newSettingIds, interpreterSettingManager.getInterpreterBinding("note1")); - // InterpreterGroup will still be alive as it is shared - assertEquals(1, defaultInterpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testUpdateInterpreterBinding_PerNoteIsolated() throws IOException { - InterpreterSetting defaultInterpreterSetting = interpreterSettingManager.get().get(0); - defaultInterpreterSetting.getOption().setPerNote("isolated"); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getInterpreterSettingIds()); - // create interpreter of the first binded interpreter setting - interpreterFactory.getInterpreter("user1", "note1", ""); - assertEquals(1, defaultInterpreterSetting.getAllInterpreterGroups().size()); - - // choose the first setting - List<String> newSettingIds = new ArrayList<>(); - newSettingIds.add(interpreterSettingManager.getInterpreterSettingIds().get(1)); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", newSettingIds); - assertEquals(newSettingIds, interpreterSettingManager.getInterpreterBinding("note1")); - // InterpreterGroup will be closed as it is only belong to this note - assertEquals(0, defaultInterpreterSetting.getAllInterpreterGroups().size()); - - } - - @Test - public void testUpdateInterpreterBinding_PerNoteScoped() throws IOException { - InterpreterSetting defaultInterpreterSetting = interpreterSettingManager.get().get(0); - defaultInterpreterSetting.getOption().setPerNote("scoped"); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", interpreterSettingManager.getInterpreterSettingIds()); - interpreterSettingManager.setInterpreterBinding("user1", "note2", interpreterSettingManager.getInterpreterSettingIds()); - // create 2 interpreter of the first binded interpreter setting for note1 and note2 - interpreterFactory.getInterpreter("user1", "note1", ""); - interpreterFactory.getInterpreter("user1", "note2", ""); - assertEquals(1, defaultInterpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, defaultInterpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // choose the first setting - List<String> newSettingIds = new ArrayList<>(); - newSettingIds.add(interpreterSettingManager.getInterpreterSettingIds().get(1)); - - interpreterSettingManager.setInterpreterBinding("user1", "note1", newSettingIds); - assertEquals(newSettingIds, interpreterSettingManager.getInterpreterBinding("note1")); - // InterpreterGroup will be still alive but session belong to note1 will be closed - assertEquals(1, defaultInterpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, defaultInterpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java deleted file mode 100644 index 3c061a9..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java +++ /dev/null @@ -1,411 +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.zeppelin.interpreter; - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -public class InterpreterSettingTest { - - @Test - public void testCreateInterpreters() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SHARED); - interpreterOption.setRemote(false); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create default interpreter for user1 and note1 - assertEquals(EchoInterpreter.class.getName(), interpreterSetting.getDefaultInterpreter("user1", "note1").getClassName()); - - // create interpreter echo for user1 and note1 - assertEquals(EchoInterpreter.class.getName(), interpreterSetting.getInterpreter("user1", "note1", "echo").getClassName()); - assertEquals(interpreterSetting.getDefaultInterpreter("user1", "note1"), interpreterSetting.getInterpreter("user1", "note1", "echo")); - - // create interpreter double_echo for user1 and note1 - assertEquals(DoubleEchoInterpreter.class.getName(), interpreterSetting.getInterpreter("user1", "note1", "double_echo").getClassName()); - - // create non-existed interpreter - assertNull(interpreterSetting.getInterpreter("user1", "note1", "invalid_echo")); - } - - @Test - public void testSharedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SHARED); - interpreterOption.setRemote(false); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create default interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - // create default interpreter for user2 and note1 - interpreterSetting.getDefaultInterpreter("user2", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - // create default interpreter user1 and note2 - interpreterSetting.getDefaultInterpreter("user1", "note2"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - // only 1 session is created, this session is shared across users and notes - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - interpreterSetting.closeInterpreters("note1", "user1"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerUserScopedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SCOPED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user2 and note1 - interpreterSetting.getDefaultInterpreter("user2", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - interpreterSetting.closeInterpreters("user1", "note1"); - // InterpreterGroup is still there, but one session is removed - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - interpreterSetting.closeInterpreters("user2", "note1"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerNoteScopedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerNote(InterpreterOption.SCOPED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user1 and note2 - interpreterSetting.getDefaultInterpreter("user1", "note2"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - interpreterSetting.closeInterpreters("user1", "note1"); - // InterpreterGroup is still there, but one session is removed - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - interpreterSetting.closeInterpreters("user1", "note2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerUserIsolatedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.ISOLATED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user2 and note1 - interpreterSetting.getDefaultInterpreter("user2", "note1"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - - // Each user own one InterpreterGroup and one session per InterpreterGroup - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(1).getSessionNum()); - - interpreterSetting.closeInterpreters("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - interpreterSetting.closeInterpreters("user2", "note1"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerNoteIsolatedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerNote(InterpreterOption.ISOLATED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user2 and note2 - interpreterSetting.getDefaultInterpreter("user1", "note2"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - // Each user own one InterpreterGroup and one session per InterpreterGroup - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(1).getSessionNum()); - - interpreterSetting.closeInterpreters("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - interpreterSetting.closeInterpreters("user1", "note2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerUserIsolatedPerNoteScopedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.ISOLATED); - interpreterOption.setPerNote(InterpreterOption.SCOPED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - interpreterSetting.getDefaultInterpreter("user1", "note2"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user2 and note1 - interpreterSetting.getDefaultInterpreter("user2", "note1"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - - // group1 for user1 has 2 sessions, and group2 for user2 has 1 session - assertEquals(interpreterSetting.getInterpreterGroup("user1", "note1"), interpreterSetting.getInterpreterGroup("user1", "note2")); - assertEquals(2, interpreterSetting.getInterpreterGroup("user1", "note1").getSessionNum()); - assertEquals(2, interpreterSetting.getInterpreterGroup("user1", "note2").getSessionNum()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user2", "note1").getSessionNum()); - - // close one session for user1 - interpreterSetting.closeInterpreters("user1", "note1"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").getSessionNum()); - - // close another session for user1 - interpreterSetting.closeInterpreters("user1", "note2"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - // close session for user2 - interpreterSetting.closeInterpreters("user2", "note1"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerUserIsolatedPerNoteIsolatedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.ISOLATED); - interpreterOption.setPerNote(InterpreterOption.ISOLATED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - // create interpreter for user1 and note2 - interpreterSetting.getDefaultInterpreter("user1", "note2"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - - // create interpreter for user2 and note1 - interpreterSetting.getDefaultInterpreter("user2", "note1"); - assertEquals(3, interpreterSetting.getAllInterpreterGroups().size()); - - // create interpreter for user2 and note2 - interpreterSetting.getDefaultInterpreter("user2", "note2"); - assertEquals(4, interpreterSetting.getAllInterpreterGroups().size()); - - for (InterpreterGroup interpreterGroup : interpreterSetting.getAllInterpreterGroups()) { - // each InterpreterGroup has one session - assertEquals(1, interpreterGroup.getSessionNum()); - } - - // close one session for user1 and note1 - interpreterSetting.closeInterpreters("user1", "note1"); - assertEquals(3, interpreterSetting.getAllInterpreterGroups().size()); - - // close one session for user1 and note2 - interpreterSetting.closeInterpreters("user1", "note2"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - - // close one session for user2 and note1 - interpreterSetting.closeInterpreters("user2", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - // close one session for user2 and note2 - interpreterSetting.closeInterpreters("user2", "note2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void testPerUserScopedPerNoteScopedMode() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SCOPED); - interpreterOption.setPerNote(InterpreterOption.SCOPED); - interpreterOption.setRemote(true); - InterpreterInfo interpreterInfo1 = new InterpreterInfo(EchoInterpreter.class.getName(), "echo", true, new HashMap<String, Object>()); - InterpreterInfo interpreterInfo2 = new InterpreterInfo(DoubleEchoInterpreter.class.getName(), "double_echo", false, new HashMap<String, Object>()); - List<InterpreterInfo> interpreterInfos = new ArrayList<>(); - interpreterInfos.add(interpreterInfo1); - interpreterInfos.add(interpreterInfo2); - InterpreterSetting interpreterSetting = new InterpreterSetting.Builder() - .setId("id") - .setName("test") - .setGroup("test") - .setInterpreterInfos(interpreterInfos) - .setOption(interpreterOption) - .create(); - - // create interpreter for user1 and note1 - interpreterSetting.getDefaultInterpreter("user1", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user1 and note2 - interpreterSetting.getDefaultInterpreter("user1", "note2"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user2 and note1 - interpreterSetting.getDefaultInterpreter("user2", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(3, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // create interpreter for user2 and note2 - interpreterSetting.getDefaultInterpreter("user2", "note2"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(4, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // close one session for user1 and note1 - interpreterSetting.closeInterpreters("user1", "note1"); - assertEquals(3, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // close one session for user1 and note2 - interpreterSetting.closeInterpreters("user1", "note2"); - assertEquals(2, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // close one session for user2 and note1 - interpreterSetting.closeInterpreters("user2", "note1"); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().get(0).getSessionNum()); - - // close one session for user2 and note2 - interpreterSetting.closeInterpreters("user2", "note2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterTest.java index d46eaa7..305268c 100644 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterTest.java +++ b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/InterpreterTest.java @@ -24,14 +24,13 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; -//TODO(zjffdu) add more test for Interpreter which is a very important class public class InterpreterTest { @Test public void testDefaultProperty() { Properties p = new Properties(); p.put("p1", "v1"); - Interpreter intp = new EchoInterpreter(p); + Interpreter intp = new DummyInterpreter(p); assertEquals(1, intp.getProperty().size()); assertEquals("v1", intp.getProperty().get("p1")); @@ -42,7 +41,7 @@ public class InterpreterTest { public void testOverriddenProperty() { Properties p = new Properties(); p.put("p1", "v1"); - Interpreter intp = new EchoInterpreter(p); + Interpreter intp = new DummyInterpreter(p); Properties overriddenProperty = new Properties(); overriddenProperty.put("p1", "v2"); intp.setProperty(overriddenProperty); @@ -74,7 +73,7 @@ public class InterpreterTest { Properties p = new Properties(); p.put("p1", "replName #{noteId}, #{paragraphTitle}, #{paragraphId}, #{paragraphText}, #{replName}, #{noteId}, #{user}," + " #{authenticationInfo}"); - Interpreter intp = new EchoInterpreter(p); + Interpreter intp = new DummyInterpreter(p); intp.setUserName(user); String actual = intp.getProperty("p1"); InterpreterContext.remove(); http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/SleepInterpreter.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/SleepInterpreter.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/SleepInterpreter.java deleted file mode 100644 index 9deafcf..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/SleepInterpreter.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.apache.zeppelin.interpreter; - -import org.apache.zeppelin.scheduler.Scheduler; -import org.apache.zeppelin.scheduler.SchedulerFactory; - -import java.util.Properties; - -/** - * Interpreter that only accept long value and sleep for such period - */ -public class SleepInterpreter extends Interpreter { - - public SleepInterpreter(Properties property) { - super(property); - } - - @Override - public void open() { - - } - - @Override - public void close() { - - } - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - try { - Thread.sleep(Long.parseLong(st)); - return new InterpreterResult(InterpreterResult.Code.SUCCESS); - } catch (Exception e) { - return new InterpreterResult(InterpreterResult.Code.ERROR, e.getMessage()); - } - } - - @Override - public void cancel(InterpreterContext context) { - - } - - @Override - public FormType getFormType() { - return FormType.NATIVE; - } - - @Override - public Scheduler getScheduler() { - if (Boolean.parseBoolean(property.getProperty("zeppelin.SleepInterpreter.parallel", "false"))) { - return SchedulerFactory.singleton().createOrGetParallelScheduler( - "Parallel-" + SleepInterpreter.class.getName(), 10); - } - return super.getScheduler(); - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java deleted file mode 100644 index e934f1a..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.apache.zeppelin.interpreter.install; - -import org.apache.commons.io.FileUtils; -import org.apache.zeppelin.conf.ZeppelinConfiguration; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/* - * 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. - */ -public class InstallInterpreterTest { - private File tmpDir; - private InstallInterpreter installer; - private File interpreterBaseDir; - - @Before - public void setUp() throws IOException { - tmpDir = new File(System.getProperty("java.io.tmpdir")+"/ZeppelinLTest_"+System.currentTimeMillis()); - new File(tmpDir, "conf").mkdirs(); - interpreterBaseDir = new File(tmpDir, "interpreter"); - File localRepoDir = new File(tmpDir, "local-repo"); - interpreterBaseDir.mkdir(); - localRepoDir.mkdir(); - - File interpreterListFile = new File(tmpDir, "conf/interpreter-list"); - - - // create interpreter list file - System.setProperty(ZeppelinConfiguration.ConfVars.ZEPPELIN_HOME.getVarName(), tmpDir.getAbsolutePath()); - - String interpreterList = ""; - interpreterList += "intp1 org.apache.commons:commons-csv:1.1 test interpreter 1\n"; - interpreterList += "intp2 org.apache.commons:commons-math3:3.6.1 test interpreter 2\n"; - - FileUtils.writeStringToFile(new File(tmpDir, "conf/interpreter-list"), interpreterList); - - installer = new InstallInterpreter(interpreterListFile, interpreterBaseDir, localRepoDir - .getAbsolutePath()); - } - - @After - public void tearDown() throws IOException { - FileUtils.deleteDirectory(tmpDir); - } - - - @Test - public void testList() { - assertEquals(2, installer.list().size()); - } - - @Test - public void install() { - assertEquals(0, interpreterBaseDir.listFiles().length); - - installer.install("intp1"); - assertTrue(new File(interpreterBaseDir, "intp1").isDirectory()); - } - - @Test - public void installAll() { - installer.installAll(); - assertTrue(new File(interpreterBaseDir, "intp1").isDirectory()); - assertTrue(new File(interpreterBaseDir, "intp2").isDirectory()); - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java deleted file mode 100644 index a533c12..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java +++ /dev/null @@ -1,106 +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.zeppelin.interpreter.mock; - -import org.apache.zeppelin.interpreter.Interpreter; -import org.apache.zeppelin.interpreter.InterpreterContext; -import org.apache.zeppelin.interpreter.InterpreterResult; -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; -import org.apache.zeppelin.scheduler.Scheduler; -import org.apache.zeppelin.scheduler.SchedulerFactory; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -public class MockInterpreter1 extends Interpreter { - - Map<String, Object> vars = new HashMap<>(); - - public MockInterpreter1(Properties property) { - super(property); - } - boolean open; - - - @Override - public void open() { - open = true; - } - - @Override - public void close() { - open = false; - } - - - public boolean isOpen() { - return open; - } - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - InterpreterResult result; - - if ("getId".equals(st)) { - // get unique id of this interpreter instance - result = new InterpreterResult(InterpreterResult.Code.SUCCESS, "" + this.hashCode()); - } else if (st.startsWith("sleep")) { - try { - Thread.sleep(Integer.parseInt(st.split(" ")[1])); - } catch (InterruptedException e) { - // nothing to do - } - result = new InterpreterResult(InterpreterResult.Code.SUCCESS, "repl1: " + st); - } else { - result = new InterpreterResult(InterpreterResult.Code.SUCCESS, "repl1: " + st); - } - - if (context.getResourcePool() != null) { - context.getResourcePool().put(context.getNoteId(), context.getParagraphId(), "result", result); - } - - return result; - } - - @Override - public void cancel(InterpreterContext context) { - } - - @Override - public FormType getFormType() { - return FormType.SIMPLE; - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } - - @Override - public Scheduler getScheduler() { - return SchedulerFactory.singleton().createOrGetFIFOScheduler("test_"+this.hashCode()); - } - - @Override - public List<InterpreterCompletion> completion(String buf, int cursor, - InterpreterContext interpreterContext) { - return null; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java deleted file mode 100644 index d53716f..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java +++ /dev/null @@ -1,85 +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.zeppelin.interpreter.mock; - - -import org.apache.zeppelin.interpreter.Interpreter; -import org.apache.zeppelin.interpreter.InterpreterContext; -import org.apache.zeppelin.interpreter.InterpreterResult; -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; -import org.apache.zeppelin.scheduler.Scheduler; -import org.apache.zeppelin.scheduler.SchedulerFactory; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -public class MockInterpreter11 extends Interpreter { - Map<String, Object> vars = new HashMap<>(); - - public MockInterpreter11(Properties property) { - super(property); - } - - boolean open; - - @Override - public void open() { - open = true; - } - - @Override - public void close() { - open = false; - } - - public boolean isOpen() { - return open; - } - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - return new InterpreterResult(InterpreterResult.Code.SUCCESS, "repl11: " + st); - } - - @Override - public void cancel(InterpreterContext context) { - } - - @Override - public FormType getFormType() { - return FormType.SIMPLE; - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } - - @Override - public Scheduler getScheduler() { - return SchedulerFactory.singleton().createOrGetFIFOScheduler("test_" + this.hashCode()); - } - - @Override - public List<InterpreterCompletion> completion(String buf, int cursor, - InterpreterContext interpreterContext) { - return null; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java deleted file mode 100644 index f36df56..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java +++ /dev/null @@ -1,104 +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.zeppelin.interpreter.mock; - -import org.apache.zeppelin.interpreter.Interpreter; -import org.apache.zeppelin.interpreter.InterpreterContext; -import org.apache.zeppelin.interpreter.InterpreterResult; -import org.apache.zeppelin.interpreter.thrift.InterpreterCompletion; -import org.apache.zeppelin.scheduler.Scheduler; -import org.apache.zeppelin.scheduler.SchedulerFactory; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -public class MockInterpreter2 extends Interpreter{ - Map<String, Object> vars = new HashMap<>(); - - public MockInterpreter2(Properties property) { - super(property); - } - - boolean open; - - @Override - public void open() { - open = true; - } - - @Override - public void close() { - open = false; - } - - public boolean isOpen() { - return open; - } - - - @Override - public InterpreterResult interpret(String st, InterpreterContext context) { - InterpreterResult result; - - if ("getId".equals(st)) { - // get unique id of this interpreter instance - result = new InterpreterResult(InterpreterResult.Code.SUCCESS, "" + this.hashCode()); - } else if (st.startsWith("sleep")) { - try { - Thread.sleep(Integer.parseInt(st.split(" ")[1])); - } catch (InterruptedException e) { - // nothing to do - } - result = new InterpreterResult(InterpreterResult.Code.SUCCESS, "repl2: " + st); - } else { - result = new InterpreterResult(InterpreterResult.Code.SUCCESS, "repl2: " + st); - } - - if (context.getResourcePool() != null) { - context.getResourcePool().put(context.getNoteId(), context.getParagraphId(), "result", result); - } - return result; - } - - @Override - public void cancel(InterpreterContext context) { - } - - @Override - public FormType getFormType() { - return FormType.SIMPLE; - } - - @Override - public int getProgress(InterpreterContext context) { - return 0; - } - - @Override - public Scheduler getScheduler() { - return SchedulerFactory.singleton().createOrGetFIFOScheduler("test_"+this.hashCode()); - } - - @Override - public List<InterpreterCompletion> completion(String buf, int cursor, - InterpreterContext interpreterContext) { - return null; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/2a379102/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java b/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java deleted file mode 100644 index c9dc5c0..0000000 --- a/zeppelin-interpreter/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java +++ /dev/null @@ -1,232 +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.zeppelin.interpreter.remote; - -import org.apache.log4j.AppenderSkeleton; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.spi.LoggingEvent; -import org.junit.After; -import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Mockito.*; - -public class AppendOutputRunnerTest { - - private static final int NUM_EVENTS = 10000; - private static final int NUM_CLUBBED_EVENTS = 100; - private static final ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor(); - private static ScheduledFuture<?> future = null; - /* It is being accessed by multiple threads. - * While loop for 'loopForBufferCompletion' could - * run for-ever. - */ - private volatile static int numInvocations = 0; - - @After - public void afterEach() { - if (future != null) { - future.cancel(true); - } - } - - @Test - public void testSingleEvent() throws InterruptedException { - RemoteInterpreterProcessListener listener = mock(RemoteInterpreterProcessListener.class); - String[][] buffer = {{"note", "para", "data\n"}}; - - loopForCompletingEvents(listener, 1, buffer); - verify(listener, times(1)).onOutputAppend(any(String.class), any(String.class), anyInt(), any(String.class)); - verify(listener, times(1)).onOutputAppend("note", "para", 0, "data\n"); - } - - @Test - public void testMultipleEventsOfSameParagraph() throws InterruptedException { - RemoteInterpreterProcessListener listener = mock(RemoteInterpreterProcessListener.class); - String note1 = "note1"; - String para1 = "para1"; - String[][] buffer = { - {note1, para1, "data1\n"}, - {note1, para1, "data2\n"}, - {note1, para1, "data3\n"} - }; - - loopForCompletingEvents(listener, 1, buffer); - verify(listener, times(1)).onOutputAppend(any(String.class), any(String.class), anyInt(), any(String.class)); - verify(listener, times(1)).onOutputAppend(note1, para1, 0, "data1\ndata2\ndata3\n"); - } - - @Test - public void testMultipleEventsOfDifferentParagraphs() throws InterruptedException { - RemoteInterpreterProcessListener listener = mock(RemoteInterpreterProcessListener.class); - String note1 = "note1"; - String note2 = "note2"; - String para1 = "para1"; - String para2 = "para2"; - String[][] buffer = { - {note1, para1, "data1\n"}, - {note1, para2, "data2\n"}, - {note2, para1, "data3\n"}, - {note2, para2, "data4\n"} - }; - loopForCompletingEvents(listener, 4, buffer); - - verify(listener, times(4)).onOutputAppend(any(String.class), any(String.class), anyInt(), any(String.class)); - verify(listener, times(1)).onOutputAppend(note1, para1, 0, "data1\n"); - verify(listener, times(1)).onOutputAppend(note1, para2, 0, "data2\n"); - verify(listener, times(1)).onOutputAppend(note2, para1, 0, "data3\n"); - verify(listener, times(1)).onOutputAppend(note2, para2, 0, "data4\n"); - } - - @Test - public void testClubbedData() throws InterruptedException { - RemoteInterpreterProcessListener listener = mock(RemoteInterpreterProcessListener.class); - AppendOutputRunner runner = new AppendOutputRunner(listener); - future = service.scheduleWithFixedDelay(runner, 0, - AppendOutputRunner.BUFFER_TIME_MS, TimeUnit.MILLISECONDS); - Thread thread = new Thread(new BombardEvents(runner)); - thread.start(); - thread.join(); - Thread.sleep(1000); - - /* NUM_CLUBBED_EVENTS is a heuristic number. - * It has been observed that for 10,000 continuos event - * calls, 30-40 Web-socket calls are made. Keeping - * the unit-test to a pessimistic 100 web-socket calls. - */ - verify(listener, atMost(NUM_CLUBBED_EVENTS)).onOutputAppend(any(String.class), any(String.class), anyInt(), any(String.class)); - } - - @Test - public void testWarnLoggerForLargeData() throws InterruptedException { - RemoteInterpreterProcessListener listener = mock(RemoteInterpreterProcessListener.class); - AppendOutputRunner runner = new AppendOutputRunner(listener); - String data = "data\n"; - int numEvents = 100000; - - for (int i=0; i<numEvents; i++) { - runner.appendBuffer("noteId", "paraId", 0, data); - } - - TestAppender appender = new TestAppender(); - Logger logger = Logger.getRootLogger(); - logger.addAppender(appender); - Logger.getLogger(RemoteInterpreterEventPoller.class); - - runner.run(); - List<LoggingEvent> log; - - int warnLogCounter; - LoggingEvent sizeWarnLogEntry = null; - do { - warnLogCounter = 0; - log = appender.getLog(); - for (LoggingEvent logEntry: log) { - if (Level.WARN.equals(logEntry.getLevel())) { - sizeWarnLogEntry = logEntry; - warnLogCounter += 1; - } - } - } while(warnLogCounter != 2); - - String loggerString = "Processing size for buffered append-output is high: " + - (data.length() * numEvents) + " characters."; - assertTrue(loggerString.equals(sizeWarnLogEntry.getMessage())); - } - - private class BombardEvents implements Runnable { - - private final AppendOutputRunner runner; - - private BombardEvents(AppendOutputRunner runner) { - this.runner = runner; - } - - @Override - public void run() { - String noteId = "noteId"; - String paraId = "paraId"; - for (int i=0; i<NUM_EVENTS; i++) { - runner.appendBuffer(noteId, paraId, 0, "data\n"); - } - } - } - - private class TestAppender extends AppenderSkeleton { - private final List<LoggingEvent> log = new ArrayList<>(); - - @Override - public boolean requiresLayout() { - return false; - } - - @Override - protected void append(final LoggingEvent loggingEvent) { - log.add(loggingEvent); - } - - @Override - public void close() { - } - - public List<LoggingEvent> getLog() { - return new ArrayList<>(log); - } - } - - private void prepareInvocationCounts(RemoteInterpreterProcessListener listener) { - doAnswer(new Answer<Void>() { - @Override - public Void answer(InvocationOnMock invocation) throws Throwable { - numInvocations += 1; - return null; - } - }).when(listener).onOutputAppend(any(String.class), any(String.class), anyInt(), any(String.class)); - } - - private void loopForCompletingEvents(RemoteInterpreterProcessListener listener, - int numTimes, String[][] buffer) { - numInvocations = 0; - prepareInvocationCounts(listener); - AppendOutputRunner runner = new AppendOutputRunner(listener); - for (String[] bufferElement: buffer) { - runner.appendBuffer(bufferElement[0], bufferElement[1], 0, bufferElement[2]); - } - future = service.scheduleWithFixedDelay(runner, 0, - AppendOutputRunner.BUFFER_TIME_MS, TimeUnit.MILLISECONDS); - long startTimeMs = System.currentTimeMillis(); - while(numInvocations != numTimes) { - if (System.currentTimeMillis() - startTimeMs > 2000) { - fail("Buffered events were not sent for 2 seconds"); - } - } - } -} \ No newline at end of file