http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java deleted file mode 100644 index 1aab757..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterSettingTest.java +++ /dev/null @@ -1,327 +0,0 @@ -package org.apache.zeppelin.interpreter; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import org.junit.Test; - -import org.apache.zeppelin.dep.Dependency; -import org.apache.zeppelin.interpreter.remote.RemoteInterpreter; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; - -public class InterpreterSettingTest { - - @Test - public void sharedModeCloseandRemoveInterpreterGroupTest() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SHARED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - // This won't effect anything - Interpreter mockInterpreter2 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList2 = new ArrayList<>(); - interpreterList2.add(mockInterpreter2); - interpreterGroup = interpreterSetting.getInterpreterGroup("user2", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user2", "note1"), interpreterList2); - - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void perUserScopedModeCloseAndRemoveInterpreterGroupTest() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SCOPED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - Interpreter mockInterpreter2 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList2 = new ArrayList<>(); - interpreterList2.add(mockInterpreter2); - interpreterGroup = interpreterSetting.getInterpreterGroup("user2", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user2", "note1"), interpreterList2); - - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - assertEquals(2, interpreterSetting.getInterpreterGroup("user2", "note1").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user1"); - assertEquals(1, interpreterSetting.getInterpreterGroup("user2","note1").size()); - - // Check if non-existed key works or not - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user1"); - assertEquals(1, interpreterSetting.getInterpreterGroup("user2","note1").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void perUserIsolatedModeCloseAndRemoveInterpreterGroupTest() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.ISOLATED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - Interpreter mockInterpreter2 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList2 = new ArrayList<>(); - interpreterList2.add(mockInterpreter2); - interpreterGroup = interpreterSetting.getInterpreterGroup("user2", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user2", "note1"), interpreterList2); - - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user2", "note1").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user1"); - assertEquals(1, interpreterSetting.getInterpreterGroup("user2","note1").size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user2"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void perNoteScopedModeCloseAndRemoveInterpreterGroupTest() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerNote(InterpreterOption.SCOPED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - Interpreter mockInterpreter2 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList2 = new ArrayList<>(); - interpreterList2.add(mockInterpreter2); - interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note2"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note2"), interpreterList2); - - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(2, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - assertEquals(2, interpreterSetting.getInterpreterGroup("user1", "note2").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user1"); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1","note2").size()); - - // Check if non-existed key works or not - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user1"); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1","note2").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note2", "user1"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void perNoteIsolatedModeCloseAndRemoveInterpreterGroupTest() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerNote(InterpreterOption.ISOLATED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - Interpreter mockInterpreter2 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList2 = new ArrayList<>(); - interpreterList2.add(mockInterpreter2); - interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note2"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note2"), interpreterList2); - - assertEquals(2, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note2").size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note1", "user1"); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1","note2").size()); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - - interpreterSetting.closeAndRemoveInterpreterGroup("note2", "user1"); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - } - - @Test - public void perNoteScopedModeRemoveInterpreterGroupWhenNoteIsRemoved() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerNote(InterpreterOption.SCOPED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - - // This method will be called when remove note - interpreterSetting.closeAndRemoveInterpreterGroup("note1",""); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - // Be careful that getInterpreterGroup makes interpreterGroup if it doesn't exist - assertEquals(0, interpreterSetting.getInterpreterGroup("user1","note1").size()); - } - - @Test - public void perNoteIsolatedModeRemoveInterpreterGroupWhenNoteIsRemoved() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerNote(InterpreterOption.ISOLATED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - - // This method will be called when remove note - interpreterSetting.closeAndRemoveInterpreterGroup("note1",""); - assertEquals(0, interpreterSetting.getAllInterpreterGroups().size()); - // Be careful that getInterpreterGroup makes interpreterGroup if it doesn't exist - assertEquals(0, interpreterSetting.getInterpreterGroup("user1","note1").size()); - } - - @Test - public void perUserScopedModeNeverRemoveInterpreterGroupWhenNoteIsRemoved() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.SCOPED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - - // This method will be called when remove note - interpreterSetting.closeAndRemoveInterpreterGroup("note1",""); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - // Be careful that getInterpreterGroup makes interpreterGroup if it doesn't exist - assertEquals(1, interpreterSetting.getInterpreterGroup("user1","note1").size()); - } - - @Test - public void perUserIsolatedModeNeverRemoveInterpreterGroupWhenNoteIsRemoved() { - InterpreterOption interpreterOption = new InterpreterOption(); - interpreterOption.setPerUser(InterpreterOption.ISOLATED); - InterpreterSetting interpreterSetting = new InterpreterSetting("", "", "", new ArrayList<InterpreterInfo>(), new Properties(), new ArrayList<Dependency>(), interpreterOption, "", null); - - interpreterSetting.setInterpreterGroupFactory(new InterpreterGroupFactory() { - @Override - public InterpreterGroup createInterpreterGroup(String interpreterGroupId, - InterpreterOption option) { - return new InterpreterGroup(interpreterGroupId); - } - }); - - Interpreter mockInterpreter1 = mock(RemoteInterpreter.class); - List<Interpreter> interpreterList1 = new ArrayList<>(); - interpreterList1.add(mockInterpreter1); - InterpreterGroup interpreterGroup = interpreterSetting.getInterpreterGroup("user1", "note1"); - interpreterGroup.put(interpreterSetting.getInterpreterSessionKey("user1", "note1"), interpreterList1); - - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - assertEquals(1, interpreterSetting.getInterpreterGroup("user1", "note1").size()); - - // This method will be called when remove note - interpreterSetting.closeAndRemoveInterpreterGroup("note1",""); - assertEquals(1, interpreterSetting.getAllInterpreterGroups().size()); - // Be careful that getInterpreterGroup makes interpreterGroup if it doesn't exist - assertEquals(1, interpreterSetting.getInterpreterGroup("user1","note1").size()); - } -}
http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/install/InstallInterpreterTest.java deleted file mode 100644 index e934f1a..0000000 --- a/zeppelin-zengine/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/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java deleted file mode 100644 index b16e937..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter1.java +++ /dev/null @@ -1,105 +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 java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -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; - -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/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java deleted file mode 100644 index 5b9e802..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter11.java +++ /dev/null @@ -1,83 +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 java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -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; - -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; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/mock/MockInterpreter2.java deleted file mode 100644 index 7a52f7d..0000000 --- a/zeppelin-zengine/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 java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -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; - -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/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java deleted file mode 100644 index c8c64ea..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/AppendOutputRunnerTest.java +++ /dev/null @@ -1,236 +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 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.atMost; -import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; - -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 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; - -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 http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectTest.java deleted file mode 100644 index f7404e3..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteAngularObjectTest.java +++ /dev/null @@ -1,201 +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 static org.junit.Assert.assertEquals; - -import java.io.File; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Properties; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.zeppelin.display.*; -import org.apache.zeppelin.interpreter.*; -import org.apache.zeppelin.interpreter.remote.mock.MockInterpreterAngular; -import org.apache.zeppelin.resource.LocalResourcePool; -import org.apache.zeppelin.user.AuthenticationInfo; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class RemoteAngularObjectTest implements AngularObjectRegistryListener { - private static final String INTERPRETER_SCRIPT = - System.getProperty("os.name").startsWith("Windows") ? - "../bin/interpreter.cmd" : - "../bin/interpreter.sh"; - - private InterpreterGroup intpGroup; - private HashMap<String, String> env; - private RemoteInterpreter intp; - private InterpreterContext context; - private RemoteAngularObjectRegistry localRegistry; - - private AtomicInteger onAdd; - private AtomicInteger onUpdate; - private AtomicInteger onRemove; - - @Before - public void setUp() throws Exception { - onAdd = new AtomicInteger(0); - onUpdate = new AtomicInteger(0); - onRemove = new AtomicInteger(0); - - intpGroup = new InterpreterGroup("intpId"); - localRegistry = new RemoteAngularObjectRegistry("intpId", this, intpGroup); - intpGroup.setAngularObjectRegistry(localRegistry); - env = new HashMap<>(); - env.put("ZEPPELIN_CLASSPATH", new File("./target/test-classes").getAbsolutePath()); - - Properties p = new Properties(); - - intp = new RemoteInterpreter( - p, - "note", - MockInterpreterAngular.class.getName(), - new File(INTERPRETER_SCRIPT).getAbsolutePath(), - "fake", - "fakeRepo", - env, - 10 * 1000, - null, - null, - "anonymous", - false - ); - - intpGroup.put("note", new LinkedList<Interpreter>()); - intpGroup.get("note").add(intp); - intp.setInterpreterGroup(intpGroup); - - context = new InterpreterContext( - "note", - "id", - null, - "title", - "text", - new AuthenticationInfo(), - new HashMap<String, Object>(), - new GUI(), - new AngularObjectRegistry(intpGroup.getId(), null), - new LocalResourcePool("pool1"), - new LinkedList<InterpreterContextRunner>(), null); - - intp.open(); - } - - @After - public void tearDown() throws Exception { - intp.close(); - intpGroup.close(); - } - - @Test - public void testAngularObjectInterpreterSideCRUD() throws InterruptedException { - InterpreterResult ret = intp.interpret("get", context); - Thread.sleep(500); // waitFor eventpoller pool event - String[] result = ret.message().get(0).getData().split(" "); - assertEquals("0", result[0]); // size of registry - assertEquals("0", result[1]); // num watcher called - - // create object - ret = intp.interpret("add n1 v1", context); - Thread.sleep(500); - result = ret.message().get(0).getData().split(" "); - assertEquals("1", result[0]); // size of registry - assertEquals("0", result[1]); // num watcher called - assertEquals("v1", localRegistry.get("n1", "note", null).get()); - - // update object - ret = intp.interpret("update n1 v11", context); - result = ret.message().get(0).getData().split(" "); - Thread.sleep(500); - assertEquals("1", result[0]); // size of registry - assertEquals("1", result[1]); // num watcher called - assertEquals("v11", localRegistry.get("n1", "note", null).get()); - - // remove object - ret = intp.interpret("remove n1", context); - result = ret.message().get(0).getData().split(" "); - Thread.sleep(500); - assertEquals("0", result[0]); // size of registry - assertEquals("1", result[1]); // num watcher called - assertEquals(null, localRegistry.get("n1", "note", null)); - } - - @Test - public void testAngularObjectRemovalOnZeppelinServerSide() throws InterruptedException { - // test if angularobject removal from server side propagate to interpreter process's registry. - // will happen when notebook is removed. - - InterpreterResult ret = intp.interpret("get", context); - Thread.sleep(500); // waitFor eventpoller pool event - String[] result = ret.message().get(0).getData().split(" "); - assertEquals("0", result[0]); // size of registry - - // create object - ret = intp.interpret("add n1 v1", context); - Thread.sleep(500); - result = ret.message().get(0).getData().split(" "); - assertEquals("1", result[0]); // size of registry - assertEquals("v1", localRegistry.get("n1", "note", null).get()); - - // remove object in local registry. - localRegistry.removeAndNotifyRemoteProcess("n1", "note", null); - ret = intp.interpret("get", context); - Thread.sleep(500); // waitFor eventpoller pool event - result = ret.message().get(0).getData().split(" "); - assertEquals("0", result[0]); // size of registry - } - - @Test - public void testAngularObjectAddOnZeppelinServerSide() throws InterruptedException { - // test if angularobject add from server side propagate to interpreter process's registry. - // will happen when zeppelin server loads notebook and restore the object into registry - - InterpreterResult ret = intp.interpret("get", context); - Thread.sleep(500); // waitFor eventpoller pool event - String[] result = ret.message().get(0).getData().split(" "); - assertEquals("0", result[0]); // size of registry - - // create object - localRegistry.addAndNotifyRemoteProcess("n1", "v1", "note", null); - - // get from remote registry - ret = intp.interpret("get", context); - Thread.sleep(500); // waitFor eventpoller pool event - result = ret.message().get(0).getData().split(" "); - assertEquals("1", result[0]); // size of registry - } - - @Override - public void onAdd(String interpreterGroupId, AngularObject object) { - onAdd.incrementAndGet(); - } - - @Override - public void onUpdate(String interpreterGroupId, AngularObject object) { - onUpdate.incrementAndGet(); - } - - @Override - public void onRemove(String interpreterGroupId, String name, String noteId, String paragraphId) { - onRemove.incrementAndGet(); - } - -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPollerTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPollerTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPollerTest.java deleted file mode 100644 index 49aa7aa..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterEventPollerTest.java +++ /dev/null @@ -1,55 +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.zeppelin.interpreter.thrift.RemoteInterpreterEvent; -import org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService; -import org.junit.Test; - -import static org.apache.zeppelin.interpreter.thrift.RemoteInterpreterEventType.NO_OP; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class RemoteInterpreterEventPollerTest { - - @Test - public void shouldClearUnreadEventsOnShutdown() throws Exception { - RemoteInterpreterProcess interpreterProc = getMockEventsInterpreterProcess(); - RemoteInterpreterEventPoller eventPoller = new RemoteInterpreterEventPoller(null, null); - - eventPoller.setInterpreterProcess(interpreterProc); - eventPoller.shutdown(); - eventPoller.start(); - eventPoller.join(); - - assertEquals(NO_OP, interpreterProc.getClient().getEvent().getType()); - } - - private RemoteInterpreterProcess getMockEventsInterpreterProcess() throws Exception { - RemoteInterpreterEvent fakeEvent = new RemoteInterpreterEvent(); - RemoteInterpreterEvent noMoreEvents = new RemoteInterpreterEvent(NO_OP, ""); - RemoteInterpreterService.Client client = mock(RemoteInterpreterService.Client.class); - RemoteInterpreterProcess intProc = mock(RemoteInterpreterProcess.class); - - when(client.getEvent()).thenReturn(fakeEvent, fakeEvent, noMoreEvents); - when(intProc.getClient()).thenReturn(client); - - return intProc; - } -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterOutputTestStream.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterOutputTestStream.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterOutputTestStream.java deleted file mode 100644 index 3f865cb..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterOutputTestStream.java +++ /dev/null @@ -1,191 +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.zeppelin.display.AngularObjectRegistry; -import org.apache.zeppelin.user.AuthenticationInfo; -import org.apache.zeppelin.display.GUI; -import org.apache.zeppelin.interpreter.*; -import org.apache.zeppelin.interpreter.remote.mock.MockInterpreterOutputStream; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import java.io.File; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Map; -import java.util.Properties; - -import static org.junit.Assert.assertEquals; - - -/** - * Test for remote interpreter output stream - */ -public class RemoteInterpreterOutputTestStream implements RemoteInterpreterProcessListener { - private static final String INTERPRETER_SCRIPT = - System.getProperty("os.name").startsWith("Windows") ? - "../bin/interpreter.cmd" : - "../bin/interpreter.sh"; - private InterpreterGroup intpGroup; - private HashMap<String, String> env; - - @Before - public void setUp() throws Exception { - intpGroup = new InterpreterGroup(); - intpGroup.put("note", new LinkedList<Interpreter>()); - - env = new HashMap<>(); - env.put("ZEPPELIN_CLASSPATH", new File("./target/test-classes").getAbsolutePath()); - } - - @After - public void tearDown() throws Exception { - intpGroup.close(); - } - - private RemoteInterpreter createMockInterpreter() { - RemoteInterpreter intp = new RemoteInterpreter( - new Properties(), - "note", - MockInterpreterOutputStream.class.getName(), - new File(INTERPRETER_SCRIPT).getAbsolutePath(), - "fake", - "fakeRepo", - env, - 10 * 1000, - this, - null, - "anonymous", - false); - - intpGroup.get("note").add(intp); - intp.setInterpreterGroup(intpGroup); - return intp; - } - - private InterpreterContext createInterpreterContext() { - return new InterpreterContext( - "noteId", - "id", - null, - "title", - "text", - new AuthenticationInfo(), - new HashMap<String, Object>(), - new GUI(), - new AngularObjectRegistry(intpGroup.getId(), null), - null, - new LinkedList<InterpreterContextRunner>(), null); - } - - @Test - public void testInterpreterResultOnly() { - RemoteInterpreter intp = createMockInterpreter(); - InterpreterResult ret = intp.interpret("SUCCESS::staticresult", createInterpreterContext()); - assertEquals(InterpreterResult.Code.SUCCESS, ret.code()); - assertEquals("staticresult", ret.message().get(0).getData()); - - ret = intp.interpret("SUCCESS::staticresult2", createInterpreterContext()); - assertEquals(InterpreterResult.Code.SUCCESS, ret.code()); - assertEquals("staticresult2", ret.message().get(0).getData()); - - ret = intp.interpret("ERROR::staticresult3", createInterpreterContext()); - assertEquals(InterpreterResult.Code.ERROR, ret.code()); - assertEquals("staticresult3", ret.message().get(0).getData()); - } - - @Test - public void testInterpreterOutputStreamOnly() { - RemoteInterpreter intp = createMockInterpreter(); - InterpreterResult ret = intp.interpret("SUCCESS:streamresult:", createInterpreterContext()); - assertEquals(InterpreterResult.Code.SUCCESS, ret.code()); - assertEquals("streamresult", ret.message().get(0).getData()); - - ret = intp.interpret("ERROR:streamresult2:", createInterpreterContext()); - assertEquals(InterpreterResult.Code.ERROR, ret.code()); - assertEquals("streamresult2", ret.message().get(0).getData()); - } - - @Test - public void testInterpreterResultOutputStreamMixed() { - RemoteInterpreter intp = createMockInterpreter(); - InterpreterResult ret = intp.interpret("SUCCESS:stream:static", createInterpreterContext()); - assertEquals(InterpreterResult.Code.SUCCESS, ret.code()); - assertEquals("stream", ret.message().get(0).getData()); - assertEquals("static", ret.message().get(1).getData()); - } - - @Test - public void testOutputType() { - RemoteInterpreter intp = createMockInterpreter(); - - InterpreterResult ret = intp.interpret("SUCCESS:%html hello:", createInterpreterContext()); - assertEquals(InterpreterResult.Type.HTML, ret.message().get(0).getType()); - assertEquals("hello", ret.message().get(0).getData()); - - ret = intp.interpret("SUCCESS:%html\nhello:", createInterpreterContext()); - assertEquals(InterpreterResult.Type.HTML, ret.message().get(0).getType()); - assertEquals("hello", ret.message().get(0).getData()); - - ret = intp.interpret("SUCCESS:%html hello:%angular world", createInterpreterContext()); - assertEquals(InterpreterResult.Type.HTML, ret.message().get(0).getType()); - assertEquals("hello", ret.message().get(0).getData()); - assertEquals(InterpreterResult.Type.ANGULAR, ret.message().get(1).getType()); - assertEquals("world", ret.message().get(1).getData()); - } - - @Override - public void onOutputAppend(String noteId, String paragraphId, int index, String output) { - - } - - @Override - public void onOutputUpdated(String noteId, String paragraphId, int index, InterpreterResult.Type type, String output) { - - } - - @Override - public void onOutputClear(String noteId, String paragraphId) { - - } - - @Override - public void onMetaInfosReceived(String settingId, Map<String, String> metaInfos) { - - } - - @Override - public void onGetParagraphRunners(String noteId, String paragraphId, RemoteWorksEventListener callback) { - if (callback != null) { - callback.onFinished(new LinkedList<>()); - } - } - - @Override - public void onRemoteRunParagraph(String noteId, String ParagraphID) throws Exception { - - } - - @Override - public void onParaInfosReceived(String noteId, String paragraphId, - String interpreterSettingId, Map<String, String> metaInfos) { - } - -} http://git-wip-us.apache.org/repos/asf/zeppelin/blob/8d4902e7/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcessTest.java ---------------------------------------------------------------------- diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcessTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcessTest.java deleted file mode 100644 index b85d7ef..0000000 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/remote/RemoteInterpreterProcessTest.java +++ /dev/null @@ -1,131 +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 static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.mockito.Mockito.*; - -import java.util.HashMap; -import java.util.Properties; - -import org.apache.thrift.TException; -import org.apache.thrift.transport.TTransportException; -import org.apache.zeppelin.interpreter.Constants; -import org.apache.zeppelin.interpreter.InterpreterException; -import org.apache.zeppelin.interpreter.InterpreterGroup; -import org.apache.zeppelin.interpreter.thrift.RemoteInterpreterService.Client; -import org.junit.Test; - -public class RemoteInterpreterProcessTest { - private static final String INTERPRETER_SCRIPT = - System.getProperty("os.name").startsWith("Windows") ? - "../bin/interpreter.cmd" : - "../bin/interpreter.sh"; - private static final int DUMMY_PORT=3678; - - @Test - public void testStartStop() { - InterpreterGroup intpGroup = new InterpreterGroup(); - RemoteInterpreterManagedProcess rip = new RemoteInterpreterManagedProcess( - INTERPRETER_SCRIPT, "nonexists", "fakeRepo", new HashMap<String, String>(), - 10 * 1000, null, null,"fakeName"); - assertFalse(rip.isRunning()); - assertEquals(0, rip.referenceCount()); - assertEquals(1, rip.reference(intpGroup, "anonymous", false)); - assertEquals(2, rip.reference(intpGroup, "anonymous", false)); - assertEquals(true, rip.isRunning()); - assertEquals(1, rip.dereference()); - assertEquals(true, rip.isRunning()); - assertEquals(0, rip.dereference()); - assertEquals(false, rip.isRunning()); - } - - @Test - public void testClientFactory() throws Exception { - InterpreterGroup intpGroup = new InterpreterGroup(); - RemoteInterpreterManagedProcess rip = new RemoteInterpreterManagedProcess( - INTERPRETER_SCRIPT, "nonexists", "fakeRepo", new HashMap<String, String>(), - mock(RemoteInterpreterEventPoller.class), 10 * 1000, "fakeName"); - rip.reference(intpGroup, "anonymous", false); - assertEquals(0, rip.getNumActiveClient()); - assertEquals(0, rip.getNumIdleClient()); - - Client client = rip.getClient(); - assertEquals(1, rip.getNumActiveClient()); - assertEquals(0, rip.getNumIdleClient()); - - rip.releaseClient(client); - assertEquals(0, rip.getNumActiveClient()); - assertEquals(1, rip.getNumIdleClient()); - - rip.dereference(); - } - - @Test - public void testStartStopRemoteInterpreter() throws TException, InterruptedException { - RemoteInterpreterServer server = new RemoteInterpreterServer(3678); - server.start(); - boolean running = false; - long startTime = System.currentTimeMillis(); - while (System.currentTimeMillis() - startTime < 10 * 1000) { - if (server.isRunning()) { - running = true; - break; - } else { - Thread.sleep(200); - } - } - Properties properties = new Properties(); - properties.setProperty(Constants.ZEPPELIN_INTERPRETER_PORT, "3678"); - properties.setProperty(Constants.ZEPPELIN_INTERPRETER_HOST, "localhost"); - InterpreterGroup intpGroup = mock(InterpreterGroup.class); - when(intpGroup.getProperty()).thenReturn(properties); - when(intpGroup.containsKey(Constants.EXISTING_PROCESS)).thenReturn(true); - - RemoteInterpreterProcess rip = new RemoteInterpreterManagedProcess( - INTERPRETER_SCRIPT, - "nonexists", - "fakeRepo", - new HashMap<String, String>(), - mock(RemoteInterpreterEventPoller.class) - , 10 * 1000, - "fakeName"); - assertFalse(rip.isRunning()); - assertEquals(0, rip.referenceCount()); - assertEquals(1, rip.reference(intpGroup, "anonymous", false)); - assertEquals(true, rip.isRunning()); - } - - - @Test - public void testPropagateError() throws TException, InterruptedException { - InterpreterGroup intpGroup = new InterpreterGroup(); - RemoteInterpreterManagedProcess rip = new RemoteInterpreterManagedProcess( - "echo hello_world", "nonexists", "fakeRepo", new HashMap<String, String>(), - 10 * 1000, null, null, "fakeName"); - assertFalse(rip.isRunning()); - assertEquals(0, rip.referenceCount()); - try { - assertEquals(1, rip.reference(intpGroup, "anonymous", false)); - } catch (InterpreterException e) { - e.getMessage().contains("hello_world"); - } - assertEquals(0, rip.referenceCount()); - } -}