Repository: incubator-taverna-server
Updated Branches:
  refs/heads/master 63fdb899d -> 46777e2c6


http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/00397eff/taverna-server-worker/src/test/java/org/apache/taverna/server/localworker/impl/LocalWorkerTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-server-worker/src/test/java/org/apache/taverna/server/localworker/impl/LocalWorkerTest.java
 
b/taverna-server-worker/src/test/java/org/apache/taverna/server/localworker/impl/LocalWorkerTest.java
new file mode 100644
index 0000000..084738f
--- /dev/null
+++ 
b/taverna-server-worker/src/test/java/org/apache/taverna/server/localworker/impl/LocalWorkerTest.java
@@ -0,0 +1,564 @@
+/*
+ */
+package org.taverna.server.localworker.impl;
+/*
+ * 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.
+ */
+
+import static java.util.UUID.randomUUID;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.taverna.server.localworker.impl.LocalWorker.DO_MKDIR;
+
+import java.io.File;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.taverna.server.localworker.api.Worker;
+import org.taverna.server.localworker.api.WorkerFactory;
+import org.taverna.server.localworker.remote.IllegalStateTransitionException;
+import org.taverna.server.localworker.remote.ImplementationException;
+import org.taverna.server.localworker.remote.RemoteDirectory;
+import org.taverna.server.localworker.remote.RemoteInput;
+import org.taverna.server.localworker.remote.RemoteListener;
+import org.taverna.server.localworker.remote.RemoteStatus;
+import org.taverna.server.localworker.server.UsageRecordReceiver;
+
+public class LocalWorkerTest {
+       LocalWorker lw;
+       static List<String> events;
+
+       public static RemoteStatus returnThisStatus = RemoteStatus.Operating;
+
+       static class DummyWorker implements Worker {
+               @Override
+               public RemoteListener getDefaultListener() {
+                       return new RemoteListener() {
+                               @Override
+                               public String getConfiguration() {
+                                       return "RLCONFIG";
+                               }
+
+                               @Override
+                               public String getName() {
+                                       return "RLNAME";
+                               }
+
+                               @Override
+                               public String getProperty(String propName) {
+                                       return "RLPROP[" + propName + "]";
+                               }
+
+                               @Override
+                               public String getType() {
+                                       return "RLTYPE";
+                               }
+
+                               @Override
+                               public String[] listProperties() {
+                                       return new String[] { "RLP1", "RLP2" };
+                               }
+
+                               @Override
+                               public void setProperty(String propName, String 
value) {
+                                       events.add("setProperty[");
+                                       events.add(propName);
+                                       events.add(value);
+                                       events.add("]");
+                               }
+                       };
+               }
+
+               @Override
+               public RemoteStatus getWorkerStatus() {
+                       events.add("status=" + returnThisStatus);
+                       return returnThisStatus;
+               }
+
+               @Override
+               public boolean initWorker(LocalWorker local,
+                               String executeWorkflowCommand, byte[] workflow,
+                               File workingDir, File inputBaclava,
+                               Map<String, File> inputFiles, Map<String, 
String> inputValues,
+                               Map<String, String> delimiters, File 
outputBaclava, File cmdir,
+                               char[] cmpass, boolean doprov, Map<String, 
String> env,
+                               String id, List<String> conf) throws Exception {
+                       events.add("init[");
+                       events.add(executeWorkflowCommand);
+                       events.add(new String(workflow, "UTF-8"));
+                       int dirLen = workingDir.getName().length();
+                       events.add(Integer.toString(dirLen));
+                       events.add(inputBaclava == null ? "<null>" : 
inputBaclava
+                                       .toString().substring(dirLen));
+                       Map<String, String> in = new TreeMap<>();
+                       for (Entry<String, File> name : inputFiles.entrySet())
+                               in.put(name.getKey(), name.getValue() == null ? 
"<null>" : name
+                                               .getValue().getName());
+                       events.add(in.toString());
+                       events.add(new TreeMap<>(inputValues).toString());
+                       events.add(outputBaclava == null ? "<null>" : 
outputBaclava
+                                       .getName());
+                       // TODO: check cmdir and cmpass
+                       // TODO: check doprov
+                       // TODO: log env
+                       // TODO: check delimiters
+                       events.add("]");
+                       return true;
+               }
+
+               @Override
+               public void killWorker() throws Exception {
+                       events.add("kill");
+               }
+
+               @Override
+               public void startWorker() throws Exception {
+                       events.add("start");
+               }
+
+               @Override
+               public void stopWorker() throws Exception {
+                       events.add("stop");
+               }
+
+               @Override
+               public void setURReceiver(UsageRecordReceiver receiver) {
+                       // We just ignore this
+               }
+
+               @Override
+               public void deleteLocalResources() throws 
ImplementationException {
+                       // Nothing to do here
+               }
+       }
+
+       WorkerFactory factory = new WorkerFactory() {
+               @Override
+               public Worker makeInstance() throws Exception {
+                       return new DummyWorker();
+               }
+       };
+
+       @Before
+       public void setUp() throws Exception {
+               lw = new LocalWorker("XWC", "WF".getBytes("UTF-8"), null, 
randomUUID(),
+                               new HashMap<String, String>(), new 
ArrayList<String>(), factory);
+               events = new ArrayList<>();
+               returnThisStatus = RemoteStatus.Operating;
+       }
+
+       @After
+       public void tearDown() throws Exception {
+               lw.destroy();
+       }
+
+       private List<String> l(String... strings) {
+               return Arrays.asList(strings);
+       }
+
+       // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+       @Test
+       public void testDestroy1() throws Exception {
+               lw.destroy();
+               assertEquals(l(), events);
+       }
+
+       @Test
+       public void testDestroy2() throws Exception {
+               lw.setStatus(RemoteStatus.Operating);
+               lw.destroy();
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "kill"), events);
+       }
+
+       @Test
+       public void testDestroy3() throws Exception {
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Stopped);
+               lw.destroy();
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "stop", "kill"), events);
+       }
+
+       @Test
+       public void testDestroy4() throws Exception {
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Finished);
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "kill"), events);
+               lw.destroy();
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "kill"), events);
+       }
+
+       @Test
+       public void testAddListener() {
+               Throwable t = null;
+               try {
+                       lw.addListener(null);
+               } catch (Throwable caught) {
+                       t = caught;
+               }
+               assertNotNull(t);
+               assertSame(ImplementationException.class, t.getClass());
+               assertNotNull(t.getMessage());
+               assertEquals("not implemented", t.getMessage());
+       }
+
+       @Test
+       public void testGetInputBaclavaFile() throws Exception {
+               assertNull(lw.getInputBaclavaFile());
+               lw.setInputBaclavaFile("IBaclava");
+               assertNotNull(lw.getInputBaclavaFile());
+               assertEquals("IBaclava", lw.getInputBaclavaFile());
+               lw.makeInput("FOO").setValue("BAR");
+               assertNull(lw.getInputBaclavaFile());
+       }
+
+       @Test
+       public void testGetInputsWithValue() throws Exception {
+               assertEquals(0, lw.getInputs().size());
+
+               lw.makeInput("FOO").setValue("BAR");
+
+               assertEquals(1, lw.getInputs().size());
+               assertEquals("FOO", lw.getInputs().get(0).getName());
+               assertNull(lw.getInputs().get(0).getFile());
+               assertNotNull(lw.getInputs().get(0).getValue());
+
+               lw.setInputBaclavaFile("BLAH");
+
+               assertEquals(1, lw.getInputs().size());
+               assertNull(lw.getInputs().get(0).getFile());
+               assertNull(lw.getInputs().get(0).getValue());
+       }
+
+       @Test
+       public void testGetInputsWithFile() throws Exception {
+               assertEquals(0, lw.getInputs().size());
+
+               lw.makeInput("BAR").setFile("FOO");
+
+               assertEquals(1, lw.getInputs().size());
+               assertEquals("BAR", lw.getInputs().get(0).getName());
+               assertNotNull(lw.getInputs().get(0).getFile());
+               assertNull(lw.getInputs().get(0).getValue());
+
+               lw.setInputBaclavaFile("BLAH");
+
+               assertEquals(1, lw.getInputs().size());
+               assertNull(lw.getInputs().get(0).getFile());
+               assertNull(lw.getInputs().get(0).getValue());
+       }
+
+       @Test
+       public void testGetListenerTypes() {
+               assertEquals("[]", lw.getListenerTypes().toString());
+       }
+
+       @Test
+       public void testGetListeners() throws Exception {
+               assertEquals(1, lw.getListeners().size());
+               RemoteListener rl = lw.getListeners().get(0);
+               assertEquals("RLNAME", rl.getName());
+               assertEquals("RLCONFIG", rl.getConfiguration());
+               assertEquals("RLTYPE", rl.getType());
+               assertEquals("[RLP1, RLP2]", Arrays.asList(rl.listProperties())
+                               .toString());
+               assertEquals("RLPROP[RLP1]", rl.getProperty("RLP1"));
+               assertEquals("RLPROP[RLP2]", rl.getProperty("RLP2"));
+               rl.setProperty("FOOBAR", "BARFOO");
+               assertEquals(l("setProperty[", "FOOBAR", "BARFOO", "]"), 
events);
+       }
+
+       @Test
+       public void testGetOutputBaclavaFile() throws Exception {
+               assertNull(lw.getOutputBaclavaFile());
+               lw.setOutputBaclavaFile("notnull");
+               assertEquals("notnull", lw.getOutputBaclavaFile());
+               lw.setOutputBaclavaFile(null);
+               assertNull(lw.getOutputBaclavaFile());
+       }
+
+       @Test
+       public void testGetSecurityContext() throws Exception {
+               boolean md = DO_MKDIR;
+               LocalWorker.DO_MKDIR = false; // HACK! Work around Hudson 
problem...
+               try {
+                       assertNotNull(lw.getSecurityContext());
+               } finally {
+                       LocalWorker.DO_MKDIR = md;
+               }
+       }
+
+       @Test
+       public void testGetStatusInitial() {
+               assertEquals(RemoteStatus.Initialized, lw.getStatus());
+       }
+
+       @Test
+       public void testGetStatus() throws Exception {
+               assertEquals(RemoteStatus.Initialized, lw.getStatus());
+               returnThisStatus = RemoteStatus.Operating;
+               assertEquals(RemoteStatus.Initialized, lw.getStatus());
+               lw.setStatus(RemoteStatus.Operating);
+               assertEquals(RemoteStatus.Operating, lw.getStatus());
+               assertEquals(RemoteStatus.Operating, lw.getStatus());
+               returnThisStatus = RemoteStatus.Finished;
+               assertEquals(RemoteStatus.Finished, lw.getStatus());
+               returnThisStatus = RemoteStatus.Stopped;
+               assertEquals(RemoteStatus.Finished, lw.getStatus());
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "status=Operating", 
"status=Operating",
+                                               "status=Finished"), events);
+       }
+
+       @Test
+       public void testGetWorkingDirectory() throws Exception {
+               RemoteDirectory rd = lw.getWorkingDirectory();
+               assertNotNull(rd);
+               assertNotNull(rd.getContents());
+               assertNull(rd.getContainingDirectory());
+               assertNotNull(rd.getName());
+               assertEquals(-1, rd.getName().indexOf('/'));
+               assertFalse("..".equals(rd.getName()));
+               assertEquals("", rd.getName());
+       }
+
+       @Test
+       public void testValidateFilename() throws Exception {
+               lw.validateFilename("foobar");
+               lw.validateFilename("foo/bar");
+               lw.validateFilename("foo.bar");
+               lw.validateFilename("foo..bar");
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testValidateFilenameBad0() throws Exception {
+               lw.validateFilename("./.");
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testValidateFilenameBad1() throws Exception {
+               lw.validateFilename("/");
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testValidateFilenameBad2() throws Exception {
+               lw.validateFilename("");
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testValidateFilenameBad3() throws Exception {
+               lw.validateFilename(null);
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testValidateFilenameBad4() throws Exception {
+               lw.validateFilename("..");
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testValidateFilenameBad5() throws Exception {
+               lw.validateFilename("foo/../bar");
+       }
+
+       @Test
+       public void testMakeInput() throws Exception {
+               assertEquals(0, lw.getInputs().size());
+
+               RemoteInput ri = lw.makeInput("TEST");
+
+               assertNotNull(ri);
+               assertEquals(1, lw.getInputs().size());
+               assertNotSame(ri, lw.getInputs().get(0)); // different delegates
+               assertEquals("TEST", ri.getName());
+               assertNull(ri.getFile());
+               assertNull(ri.getValue());
+
+               lw.setInputBaclavaFile("bad");
+               ri.setFile("good");
+               assertEquals("good", ri.getFile());
+               assertNull(lw.getInputBaclavaFile());
+               ri.setValue("very good");
+               assertEquals("very good", ri.getValue());
+               assertNull(ri.getFile());
+               assertNull(lw.getInputBaclavaFile());
+
+               lw.makeInput("TEST2");
+               assertEquals(2, lw.getInputs().size());
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testMakeInputFileSanity() throws Exception {
+               lw.makeInput("foo").setFile("/../bar");
+       }
+
+       @Test
+       public void testMakeListener() {
+               Throwable t = null;
+               try {
+                       lw.makeListener("?", "?");
+               } catch (Throwable caught) {
+                       t = caught;
+               }
+               assertNotNull(t);
+               assertSame(RemoteException.class, t.getClass());
+               assertNotNull(t.getMessage());
+               assertEquals("listener manufacturing unsupported", 
t.getMessage());
+       }
+
+       @Test
+       public void testSetInputBaclavaFile1() throws Exception {
+               assertNull(lw.getInputBaclavaFile());
+               lw.setInputBaclavaFile("eg");
+               assertEquals("eg", lw.getInputBaclavaFile());
+       }
+
+       @Test
+       public void testSetInputBaclavaFile2() throws Exception {
+               RemoteInput ri = lw.makeInput("foo");
+               ri.setValue("bar");
+               assertEquals("bar", ri.getValue());
+               lw.setInputBaclavaFile("eg");
+               assertNull(ri.getValue());
+       }
+
+       @Test
+       public void testSetOutputBaclavaFile1() throws Exception {
+               assertNull(lw.outputBaclava);
+               lw.setOutputBaclavaFile("foobar");
+               assertEquals("foobar", lw.outputBaclava);
+               assertEquals("foobar", lw.getOutputBaclavaFile());
+               lw.setOutputBaclavaFile("foo/bar");
+               assertEquals("foo/bar", lw.outputBaclava);
+               assertEquals("foo/bar", lw.getOutputBaclavaFile());
+               lw.setOutputBaclavaFile(null);
+               assertNull(lw.outputBaclava);
+               assertNull(lw.getOutputBaclavaFile());
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testSetOutputBaclavaFile2() throws Exception {
+               lw.setOutputBaclavaFile("/foobar");
+       }
+
+       @Test(expected = IllegalArgumentException.class)
+       public void testSetOutputBaclavaFile3() throws Exception {
+               lw.setOutputBaclavaFile("foo/../bar");
+       }
+
+       @Test
+       public void testSetStatus0() throws Exception {
+               lw.setStatus(RemoteStatus.Initialized);
+               lw.setStatus(RemoteStatus.Initialized);
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Stopped);
+               lw.setStatus(RemoteStatus.Stopped);
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Finished);
+               lw.setStatus(RemoteStatus.Finished);
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "stop", "start", "kill"), 
events);
+       }
+
+       @Test
+       public void testSetStatus1() throws Exception {
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Stopped);
+               lw.setStatus(RemoteStatus.Finished);
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
+                                               "]", "stop", "kill"), events);
+       }
+
+       @Test
+       public void testSetStatus2() throws Exception {
+               lw.setStatus(RemoteStatus.Initialized);
+               lw.setStatus(RemoteStatus.Finished);
+               assertEquals(l(), events);
+       }
+
+       @Test(expected = IllegalStateTransitionException.class)
+       public void testSetStatus3() throws Exception {
+               lw.setStatus(RemoteStatus.Initialized);
+               lw.setStatus(RemoteStatus.Finished);
+               lw.setStatus(RemoteStatus.Initialized);
+       }
+
+       @Test(expected = IllegalStateTransitionException.class)
+       public void testSetStatus4() throws Exception {
+               lw.setStatus(RemoteStatus.Initialized);
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Initialized);
+       }
+
+       @Test(expected = IllegalStateTransitionException.class)
+       public void testSetStatus5() throws Exception {
+               lw.setStatus(RemoteStatus.Initialized);
+               lw.setStatus(RemoteStatus.Stopped);
+       }
+
+       @Test(expected = IllegalStateTransitionException.class)
+       public void testSetStatus6() throws Exception {
+               lw.setStatus(RemoteStatus.Finished);
+               lw.setStatus(RemoteStatus.Stopped);
+       }
+
+       @Test(expected = IllegalStateTransitionException.class)
+       public void testSetStatus7() throws Exception {
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Stopped);
+               lw.setStatus(RemoteStatus.Initialized);
+       }
+
+       @Test
+       public void testLifecycle() throws Exception {
+               lw.makeInput("foo").setFile("foofile");
+               lw.makeInput("bar").setValue("barvalue");
+               lw.setOutputBaclavaFile("spong");
+               lw.setOutputBaclavaFile("boo");
+               lw.setStatus(RemoteStatus.Operating);
+               lw.setStatus(RemoteStatus.Finished);
+               // Assumes order of map, so fragile but works...
+               assertEquals(
+                               l("init[", "XWC", "WF", "36", "<null>",
+                                               "{bar=<null>, foo=foofile}",
+                                               "{bar=barvalue, foo=null}", 
"boo", "]", "kill"), events);
+       }
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/00397eff/taverna-server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
----------------------------------------------------------------------
diff --git 
a/taverna-server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
 
b/taverna-server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
deleted file mode 100644
index 084738f..0000000
--- 
a/taverna-server-worker/src/test/java/org/taverna/server/localworker/impl/LocalWorkerTest.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- */
-package org.taverna.server.localworker.impl;
-/*
- * 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.
- */
-
-import static java.util.UUID.randomUUID;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.taverna.server.localworker.impl.LocalWorker.DO_MKDIR;
-
-import java.io.File;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.taverna.server.localworker.api.Worker;
-import org.taverna.server.localworker.api.WorkerFactory;
-import org.taverna.server.localworker.remote.IllegalStateTransitionException;
-import org.taverna.server.localworker.remote.ImplementationException;
-import org.taverna.server.localworker.remote.RemoteDirectory;
-import org.taverna.server.localworker.remote.RemoteInput;
-import org.taverna.server.localworker.remote.RemoteListener;
-import org.taverna.server.localworker.remote.RemoteStatus;
-import org.taverna.server.localworker.server.UsageRecordReceiver;
-
-public class LocalWorkerTest {
-       LocalWorker lw;
-       static List<String> events;
-
-       public static RemoteStatus returnThisStatus = RemoteStatus.Operating;
-
-       static class DummyWorker implements Worker {
-               @Override
-               public RemoteListener getDefaultListener() {
-                       return new RemoteListener() {
-                               @Override
-                               public String getConfiguration() {
-                                       return "RLCONFIG";
-                               }
-
-                               @Override
-                               public String getName() {
-                                       return "RLNAME";
-                               }
-
-                               @Override
-                               public String getProperty(String propName) {
-                                       return "RLPROP[" + propName + "]";
-                               }
-
-                               @Override
-                               public String getType() {
-                                       return "RLTYPE";
-                               }
-
-                               @Override
-                               public String[] listProperties() {
-                                       return new String[] { "RLP1", "RLP2" };
-                               }
-
-                               @Override
-                               public void setProperty(String propName, String 
value) {
-                                       events.add("setProperty[");
-                                       events.add(propName);
-                                       events.add(value);
-                                       events.add("]");
-                               }
-                       };
-               }
-
-               @Override
-               public RemoteStatus getWorkerStatus() {
-                       events.add("status=" + returnThisStatus);
-                       return returnThisStatus;
-               }
-
-               @Override
-               public boolean initWorker(LocalWorker local,
-                               String executeWorkflowCommand, byte[] workflow,
-                               File workingDir, File inputBaclava,
-                               Map<String, File> inputFiles, Map<String, 
String> inputValues,
-                               Map<String, String> delimiters, File 
outputBaclava, File cmdir,
-                               char[] cmpass, boolean doprov, Map<String, 
String> env,
-                               String id, List<String> conf) throws Exception {
-                       events.add("init[");
-                       events.add(executeWorkflowCommand);
-                       events.add(new String(workflow, "UTF-8"));
-                       int dirLen = workingDir.getName().length();
-                       events.add(Integer.toString(dirLen));
-                       events.add(inputBaclava == null ? "<null>" : 
inputBaclava
-                                       .toString().substring(dirLen));
-                       Map<String, String> in = new TreeMap<>();
-                       for (Entry<String, File> name : inputFiles.entrySet())
-                               in.put(name.getKey(), name.getValue() == null ? 
"<null>" : name
-                                               .getValue().getName());
-                       events.add(in.toString());
-                       events.add(new TreeMap<>(inputValues).toString());
-                       events.add(outputBaclava == null ? "<null>" : 
outputBaclava
-                                       .getName());
-                       // TODO: check cmdir and cmpass
-                       // TODO: check doprov
-                       // TODO: log env
-                       // TODO: check delimiters
-                       events.add("]");
-                       return true;
-               }
-
-               @Override
-               public void killWorker() throws Exception {
-                       events.add("kill");
-               }
-
-               @Override
-               public void startWorker() throws Exception {
-                       events.add("start");
-               }
-
-               @Override
-               public void stopWorker() throws Exception {
-                       events.add("stop");
-               }
-
-               @Override
-               public void setURReceiver(UsageRecordReceiver receiver) {
-                       // We just ignore this
-               }
-
-               @Override
-               public void deleteLocalResources() throws 
ImplementationException {
-                       // Nothing to do here
-               }
-       }
-
-       WorkerFactory factory = new WorkerFactory() {
-               @Override
-               public Worker makeInstance() throws Exception {
-                       return new DummyWorker();
-               }
-       };
-
-       @Before
-       public void setUp() throws Exception {
-               lw = new LocalWorker("XWC", "WF".getBytes("UTF-8"), null, 
randomUUID(),
-                               new HashMap<String, String>(), new 
ArrayList<String>(), factory);
-               events = new ArrayList<>();
-               returnThisStatus = RemoteStatus.Operating;
-       }
-
-       @After
-       public void tearDown() throws Exception {
-               lw.destroy();
-       }
-
-       private List<String> l(String... strings) {
-               return Arrays.asList(strings);
-       }
-
-       // -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-       @Test
-       public void testDestroy1() throws Exception {
-               lw.destroy();
-               assertEquals(l(), events);
-       }
-
-       @Test
-       public void testDestroy2() throws Exception {
-               lw.setStatus(RemoteStatus.Operating);
-               lw.destroy();
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "kill"), events);
-       }
-
-       @Test
-       public void testDestroy3() throws Exception {
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Stopped);
-               lw.destroy();
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "stop", "kill"), events);
-       }
-
-       @Test
-       public void testDestroy4() throws Exception {
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Finished);
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "kill"), events);
-               lw.destroy();
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "kill"), events);
-       }
-
-       @Test
-       public void testAddListener() {
-               Throwable t = null;
-               try {
-                       lw.addListener(null);
-               } catch (Throwable caught) {
-                       t = caught;
-               }
-               assertNotNull(t);
-               assertSame(ImplementationException.class, t.getClass());
-               assertNotNull(t.getMessage());
-               assertEquals("not implemented", t.getMessage());
-       }
-
-       @Test
-       public void testGetInputBaclavaFile() throws Exception {
-               assertNull(lw.getInputBaclavaFile());
-               lw.setInputBaclavaFile("IBaclava");
-               assertNotNull(lw.getInputBaclavaFile());
-               assertEquals("IBaclava", lw.getInputBaclavaFile());
-               lw.makeInput("FOO").setValue("BAR");
-               assertNull(lw.getInputBaclavaFile());
-       }
-
-       @Test
-       public void testGetInputsWithValue() throws Exception {
-               assertEquals(0, lw.getInputs().size());
-
-               lw.makeInput("FOO").setValue("BAR");
-
-               assertEquals(1, lw.getInputs().size());
-               assertEquals("FOO", lw.getInputs().get(0).getName());
-               assertNull(lw.getInputs().get(0).getFile());
-               assertNotNull(lw.getInputs().get(0).getValue());
-
-               lw.setInputBaclavaFile("BLAH");
-
-               assertEquals(1, lw.getInputs().size());
-               assertNull(lw.getInputs().get(0).getFile());
-               assertNull(lw.getInputs().get(0).getValue());
-       }
-
-       @Test
-       public void testGetInputsWithFile() throws Exception {
-               assertEquals(0, lw.getInputs().size());
-
-               lw.makeInput("BAR").setFile("FOO");
-
-               assertEquals(1, lw.getInputs().size());
-               assertEquals("BAR", lw.getInputs().get(0).getName());
-               assertNotNull(lw.getInputs().get(0).getFile());
-               assertNull(lw.getInputs().get(0).getValue());
-
-               lw.setInputBaclavaFile("BLAH");
-
-               assertEquals(1, lw.getInputs().size());
-               assertNull(lw.getInputs().get(0).getFile());
-               assertNull(lw.getInputs().get(0).getValue());
-       }
-
-       @Test
-       public void testGetListenerTypes() {
-               assertEquals("[]", lw.getListenerTypes().toString());
-       }
-
-       @Test
-       public void testGetListeners() throws Exception {
-               assertEquals(1, lw.getListeners().size());
-               RemoteListener rl = lw.getListeners().get(0);
-               assertEquals("RLNAME", rl.getName());
-               assertEquals("RLCONFIG", rl.getConfiguration());
-               assertEquals("RLTYPE", rl.getType());
-               assertEquals("[RLP1, RLP2]", Arrays.asList(rl.listProperties())
-                               .toString());
-               assertEquals("RLPROP[RLP1]", rl.getProperty("RLP1"));
-               assertEquals("RLPROP[RLP2]", rl.getProperty("RLP2"));
-               rl.setProperty("FOOBAR", "BARFOO");
-               assertEquals(l("setProperty[", "FOOBAR", "BARFOO", "]"), 
events);
-       }
-
-       @Test
-       public void testGetOutputBaclavaFile() throws Exception {
-               assertNull(lw.getOutputBaclavaFile());
-               lw.setOutputBaclavaFile("notnull");
-               assertEquals("notnull", lw.getOutputBaclavaFile());
-               lw.setOutputBaclavaFile(null);
-               assertNull(lw.getOutputBaclavaFile());
-       }
-
-       @Test
-       public void testGetSecurityContext() throws Exception {
-               boolean md = DO_MKDIR;
-               LocalWorker.DO_MKDIR = false; // HACK! Work around Hudson 
problem...
-               try {
-                       assertNotNull(lw.getSecurityContext());
-               } finally {
-                       LocalWorker.DO_MKDIR = md;
-               }
-       }
-
-       @Test
-       public void testGetStatusInitial() {
-               assertEquals(RemoteStatus.Initialized, lw.getStatus());
-       }
-
-       @Test
-       public void testGetStatus() throws Exception {
-               assertEquals(RemoteStatus.Initialized, lw.getStatus());
-               returnThisStatus = RemoteStatus.Operating;
-               assertEquals(RemoteStatus.Initialized, lw.getStatus());
-               lw.setStatus(RemoteStatus.Operating);
-               assertEquals(RemoteStatus.Operating, lw.getStatus());
-               assertEquals(RemoteStatus.Operating, lw.getStatus());
-               returnThisStatus = RemoteStatus.Finished;
-               assertEquals(RemoteStatus.Finished, lw.getStatus());
-               returnThisStatus = RemoteStatus.Stopped;
-               assertEquals(RemoteStatus.Finished, lw.getStatus());
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "status=Operating", 
"status=Operating",
-                                               "status=Finished"), events);
-       }
-
-       @Test
-       public void testGetWorkingDirectory() throws Exception {
-               RemoteDirectory rd = lw.getWorkingDirectory();
-               assertNotNull(rd);
-               assertNotNull(rd.getContents());
-               assertNull(rd.getContainingDirectory());
-               assertNotNull(rd.getName());
-               assertEquals(-1, rd.getName().indexOf('/'));
-               assertFalse("..".equals(rd.getName()));
-               assertEquals("", rd.getName());
-       }
-
-       @Test
-       public void testValidateFilename() throws Exception {
-               lw.validateFilename("foobar");
-               lw.validateFilename("foo/bar");
-               lw.validateFilename("foo.bar");
-               lw.validateFilename("foo..bar");
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testValidateFilenameBad0() throws Exception {
-               lw.validateFilename("./.");
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testValidateFilenameBad1() throws Exception {
-               lw.validateFilename("/");
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testValidateFilenameBad2() throws Exception {
-               lw.validateFilename("");
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testValidateFilenameBad3() throws Exception {
-               lw.validateFilename(null);
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testValidateFilenameBad4() throws Exception {
-               lw.validateFilename("..");
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testValidateFilenameBad5() throws Exception {
-               lw.validateFilename("foo/../bar");
-       }
-
-       @Test
-       public void testMakeInput() throws Exception {
-               assertEquals(0, lw.getInputs().size());
-
-               RemoteInput ri = lw.makeInput("TEST");
-
-               assertNotNull(ri);
-               assertEquals(1, lw.getInputs().size());
-               assertNotSame(ri, lw.getInputs().get(0)); // different delegates
-               assertEquals("TEST", ri.getName());
-               assertNull(ri.getFile());
-               assertNull(ri.getValue());
-
-               lw.setInputBaclavaFile("bad");
-               ri.setFile("good");
-               assertEquals("good", ri.getFile());
-               assertNull(lw.getInputBaclavaFile());
-               ri.setValue("very good");
-               assertEquals("very good", ri.getValue());
-               assertNull(ri.getFile());
-               assertNull(lw.getInputBaclavaFile());
-
-               lw.makeInput("TEST2");
-               assertEquals(2, lw.getInputs().size());
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testMakeInputFileSanity() throws Exception {
-               lw.makeInput("foo").setFile("/../bar");
-       }
-
-       @Test
-       public void testMakeListener() {
-               Throwable t = null;
-               try {
-                       lw.makeListener("?", "?");
-               } catch (Throwable caught) {
-                       t = caught;
-               }
-               assertNotNull(t);
-               assertSame(RemoteException.class, t.getClass());
-               assertNotNull(t.getMessage());
-               assertEquals("listener manufacturing unsupported", 
t.getMessage());
-       }
-
-       @Test
-       public void testSetInputBaclavaFile1() throws Exception {
-               assertNull(lw.getInputBaclavaFile());
-               lw.setInputBaclavaFile("eg");
-               assertEquals("eg", lw.getInputBaclavaFile());
-       }
-
-       @Test
-       public void testSetInputBaclavaFile2() throws Exception {
-               RemoteInput ri = lw.makeInput("foo");
-               ri.setValue("bar");
-               assertEquals("bar", ri.getValue());
-               lw.setInputBaclavaFile("eg");
-               assertNull(ri.getValue());
-       }
-
-       @Test
-       public void testSetOutputBaclavaFile1() throws Exception {
-               assertNull(lw.outputBaclava);
-               lw.setOutputBaclavaFile("foobar");
-               assertEquals("foobar", lw.outputBaclava);
-               assertEquals("foobar", lw.getOutputBaclavaFile());
-               lw.setOutputBaclavaFile("foo/bar");
-               assertEquals("foo/bar", lw.outputBaclava);
-               assertEquals("foo/bar", lw.getOutputBaclavaFile());
-               lw.setOutputBaclavaFile(null);
-               assertNull(lw.outputBaclava);
-               assertNull(lw.getOutputBaclavaFile());
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testSetOutputBaclavaFile2() throws Exception {
-               lw.setOutputBaclavaFile("/foobar");
-       }
-
-       @Test(expected = IllegalArgumentException.class)
-       public void testSetOutputBaclavaFile3() throws Exception {
-               lw.setOutputBaclavaFile("foo/../bar");
-       }
-
-       @Test
-       public void testSetStatus0() throws Exception {
-               lw.setStatus(RemoteStatus.Initialized);
-               lw.setStatus(RemoteStatus.Initialized);
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Stopped);
-               lw.setStatus(RemoteStatus.Stopped);
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Finished);
-               lw.setStatus(RemoteStatus.Finished);
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "stop", "start", "kill"), 
events);
-       }
-
-       @Test
-       public void testSetStatus1() throws Exception {
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Stopped);
-               lw.setStatus(RemoteStatus.Finished);
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>", "{}", 
"{}", "<null>",
-                                               "]", "stop", "kill"), events);
-       }
-
-       @Test
-       public void testSetStatus2() throws Exception {
-               lw.setStatus(RemoteStatus.Initialized);
-               lw.setStatus(RemoteStatus.Finished);
-               assertEquals(l(), events);
-       }
-
-       @Test(expected = IllegalStateTransitionException.class)
-       public void testSetStatus3() throws Exception {
-               lw.setStatus(RemoteStatus.Initialized);
-               lw.setStatus(RemoteStatus.Finished);
-               lw.setStatus(RemoteStatus.Initialized);
-       }
-
-       @Test(expected = IllegalStateTransitionException.class)
-       public void testSetStatus4() throws Exception {
-               lw.setStatus(RemoteStatus.Initialized);
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Initialized);
-       }
-
-       @Test(expected = IllegalStateTransitionException.class)
-       public void testSetStatus5() throws Exception {
-               lw.setStatus(RemoteStatus.Initialized);
-               lw.setStatus(RemoteStatus.Stopped);
-       }
-
-       @Test(expected = IllegalStateTransitionException.class)
-       public void testSetStatus6() throws Exception {
-               lw.setStatus(RemoteStatus.Finished);
-               lw.setStatus(RemoteStatus.Stopped);
-       }
-
-       @Test(expected = IllegalStateTransitionException.class)
-       public void testSetStatus7() throws Exception {
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Stopped);
-               lw.setStatus(RemoteStatus.Initialized);
-       }
-
-       @Test
-       public void testLifecycle() throws Exception {
-               lw.makeInput("foo").setFile("foofile");
-               lw.makeInput("bar").setValue("barvalue");
-               lw.setOutputBaclavaFile("spong");
-               lw.setOutputBaclavaFile("boo");
-               lw.setStatus(RemoteStatus.Operating);
-               lw.setStatus(RemoteStatus.Finished);
-               // Assumes order of map, so fragile but works...
-               assertEquals(
-                               l("init[", "XWC", "WF", "36", "<null>",
-                                               "{bar=<null>, foo=foofile}",
-                                               "{bar=barvalue, foo=null}", 
"boo", "]", "kill"), events);
-       }
-}

Reply via email to