diff options
Diffstat (limited to 'sandbox/old/contrib/runtime-standalone/smoketest/src')
10 files changed, 463 insertions, 0 deletions
diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloService.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloService.java new file mode 100644 index 0000000000..7d45d73183 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloService.java @@ -0,0 +1,26 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +/** + * @version $Rev$ $Date$ + */ +public interface HelloService { + String getGreeting(); +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloServiceImpl.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloServiceImpl.java new file mode 100644 index 0000000000..a2d367096a --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloServiceImpl.java @@ -0,0 +1,37 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +import org.osoa.sca.annotations.Property; +import org.osoa.sca.annotations.Scope; + +/** + * @version $Rev$ $Date$ + */ +public class HelloServiceImpl implements HelloService { + private final String greeting; + + public HelloServiceImpl(@Property(name="greeting") String greeting) { + this.greeting = greeting; + } + + public String getGreeting() { + return greeting; + } +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/Launched.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/Launched.java new file mode 100644 index 0000000000..271f9e8273 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/Launched.java @@ -0,0 +1,50 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; + +/** + * @version $Rev$ $Date$ + */ +public class Launched { + private HelloService hello; + + @Reference + public void setHello(HelloService hello) { + this.hello = hello; + } + + public int main(String[] args) throws Exception { + if (args.length == 0) { + System.out.println("No Args"); + return 0; + } + String command = args[0]; + if ("testReference".equals(command)) { + if ("Hello World".equals(hello.getGreeting())) { + return 0; + } else { + return 1; + } + } + return 1; + } +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/main/resources/META-INF/sca/default.scdl b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/resources/META-INF/sca/default.scdl new file mode 100644 index 0000000000..ca2ac88a01 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/main/resources/META-INF/sca/default.scdl @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * 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. +--> +<composite xmlns="http://www.osoa.org/xmlns/sca/1.0" + xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/2.0-alpha" + name="SmoketestComposite"> + + <component name="Main"> + <tuscany:launched class="org.apache.tuscany.sca.runtime.standalone.smoketest.Launched"/> + <reference name="hello" target="Hello"/> + </component> + + <component name="Hello"> + <implementation.java class="org.apache.tuscany.sca.runtime.standalone.smoketest.HelloServiceImpl"/> + <property name="greeting">Hello World</property> + </component> +</composite> diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/CommandTestCase.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/CommandTestCase.java new file mode 100644 index 0000000000..64d5c02192 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/CommandTestCase.java @@ -0,0 +1,63 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +import java.io.InputStream; +import java.io.IOException; +import java.io.BufferedInputStream; +import java.io.File; + +import junit.framework.TestCase; + +/** + * @version $Rev$ $Date$ + */ +public abstract class CommandTestCase extends TestCase { + protected File buildDir; + protected File installDir; + + public void compareOutput(String master, InputStream is) throws Exception { + String processText = readStream(is); + assertEquals(master, processText); + } + + public String loadResource(String resource) throws IOException { + InputStream is = getClass().getResourceAsStream(resource); + assertNotNull(is); + return readStream(is); + } + + public String readStream(InputStream is) throws IOException { + assertNotNull(is); + StringBuilder sb = new StringBuilder(); + is = new BufferedInputStream(is); + int ch; + while ((ch = is.read()) != -1) { + sb.append((char)ch); + } + is.close(); + return sb.toString(); + } + + protected void setUp() throws Exception { + super.setUp(); + buildDir = new File(System.getProperty("basedir"), "target"); + installDir = new File(buildDir, "assembly"); + } +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/ProcessDrainer.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/ProcessDrainer.java new file mode 100644 index 0000000000..31e697bb23 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/ProcessDrainer.java @@ -0,0 +1,131 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +/** + * Stream drainer used for draining the out and err streams of an external + * process to avoid buffer overflow and deadlock. + * + * @version $Revision$ $Date$ + * + */ +public class ProcessDrainer { + + // Default time out in seconds + private static final int DEFAULT_TIMEOUT = 60; + + // Process whose streams are being drained + private Process process; + + // Timeout to wait for the extrenal process to whutdown + private int timeout = DEFAULT_TIMEOUT; + + // Executor that is scheduling the draining + private ExecutorService executor = Executors.newFixedThreadPool(2); + + /* + * Initializes the process to drained. + */ + private ProcessDrainer(Process process) { + this.process = process; + } + + /* + * Initializes the process to drained. + */ + private ProcessDrainer(Process process, int timeout) { + this.process = process; + this.timeout = timeout; + } + + /** + * Creates a new instance of the stream drainer for the processed. + * @param process Process to be drained. + * @return An instance of the stream drainer. + */ + public static ProcessDrainer newInstance(Process process) { + return new ProcessDrainer(process); + } + + /** + * Creates a new instance of the stream drainer for the processed. + * @param process Process to be drained. + * @param timeout Timeout before which teh drainer stops. + * @return An instance of the stream drainer. + */ + public static ProcessDrainer newInstance(Process process, int timeout) { + return new ProcessDrainer(process, timeout); + } + + /** + * Starts draining the stream. + */ + public void drain() { + + executor.execute(new StreamDrainer(process.getErrorStream())); + executor.execute(new StreamDrainer(process.getInputStream())); + + executor.shutdown(); + try { + executor.awaitTermination(timeout, TimeUnit.SECONDS); + } catch (InterruptedException ex) { + return; + } + + } + + /* + * Scheduled stream drainer. + */ + private class StreamDrainer implements Runnable { + + // Stream to be drained + private final InputStream inputStream; + + /* + * Initializes the stream to drained. + */ + private StreamDrainer(InputStream inputStream) { + this.inputStream = inputStream; + } + + /* + * Starts draing the stream. + */ + public void run() { + try { + int count = 0; + byte[] buffer = new byte[4096]; + count = inputStream.read(buffer); + while (count != -1) { + count = inputStream.read(buffer); + } + } catch (IOException ex) { + } + } + + } + +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestAssemblyContent.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestAssemblyContent.java new file mode 100644 index 0000000000..7ac45268ae --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestAssemblyContent.java @@ -0,0 +1,33 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +import java.io.File; + +/** + * @version $Rev$ $Date$ + */ +public class SmokeTestAssemblyContent extends CommandTestCase { + public void testLegalFilesArePresent() { + assertTrue(installDir.exists()); + assertTrue(installDir.isDirectory()); + assertTrue(new File(installDir, "LICENSE.txt").exists()); + assertTrue(new File(installDir, "NOTICE.txt").exists()); + } +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestLauncher.java b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestLauncher.java new file mode 100644 index 0000000000..f3e7c3e40c --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestLauncher.java @@ -0,0 +1,88 @@ +/* + * 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.tuscany.sca.runtime.standalone.smoketest; + +import java.io.File; + +/** + * @version $Rev$ $Date$ + */ +public class SmokeTestLauncher extends CommandTestCase { + private static final String LF = System.getProperty("line.separator"); + private File launcher; + private File testJar; + + public void testLauncherCommandIsPresent() { + assertTrue(launcher.exists()); + } + + public void testLauncherUsage() throws Exception { + ProcessBuilder pb = new ProcessBuilder("java", "-jar", launcher.getAbsolutePath()); + pb.directory(installDir); + Process process = pb.start(); + try { + compareOutput(loadResource("LauncherUsage.txt"), process.getErrorStream()); + ProcessDrainer drainer = ProcessDrainer.newInstance(process); + drainer.drain(); + process.waitFor(); + assertEquals(1, process.exitValue()); + } finally { + process.destroy(); + } + } + + public void testLauncherWithNoArgs() throws Exception { + ProcessBuilder pb = new ProcessBuilder("java", "-jar", launcher.getAbsolutePath(), testJar.getAbsolutePath()); + pb.directory(installDir); + Process process = pb.start(); + try { + compareOutput("No Args" + LF, process.getInputStream()); + ProcessDrainer drainer = ProcessDrainer.newInstance(process); + drainer.drain(); + process.waitFor(); + assertEquals(0, process.exitValue()); + } finally { + process.destroy(); + } + } + + public void testReference() throws Exception { + ProcessBuilder pb = new ProcessBuilder("java", + "-jar", + launcher.getAbsolutePath(), + testJar.getAbsolutePath(), + "testReference"); + pb.directory(installDir); + Process process = pb.start(); + try { + ProcessDrainer drainer = ProcessDrainer.newInstance(process); + drainer.drain(); + process.waitFor(); + assertEquals(0, process.exitValue()); + } finally { + process.destroy(); + } + } + + protected void setUp() throws Exception { + super.setUp(); + launcher = new File(installDir, "bin/launcher.jar"); + testJar = new File(buildDir, "smoketest.jar"); + } +} diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherNoComponent.txt b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherNoComponent.txt new file mode 100644 index 0000000000..c77e130b05 --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherNoComponent.txt @@ -0,0 +1 @@ +No component found with id "http://no.such.component" diff --git a/sandbox/old/contrib/runtime-standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherUsage.txt b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherUsage.txt new file mode 100644 index 0000000000..d2b766f8ae --- /dev/null +++ b/sandbox/old/contrib/runtime-standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherUsage.txt @@ -0,0 +1 @@ +usage: java [jvm-options] -jar launcher.jar <componentJar> [apparg1, apparg2, ...] |