diff options
author | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
---|---|---|
committer | dims <dims@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 00:23:01 +0000 |
commit | bdd0a41aed7edf21ec2a65cfa17a86af2ef8c48a (patch) | |
tree | 38a92061c0793434c4be189f1d70c3458b6bc41d /tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest |
Move Tuscany from Incubator to top level.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@668359 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest')
11 files changed, 561 insertions, 0 deletions
diff --git a/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/pom.xml b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/pom.xml new file mode 100644 index 0000000000..055e1d11ef --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/pom.xml @@ -0,0 +1,100 @@ +<?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. +--> +<project> + <parent> + <groupId>org.apache.tuscany.sca.runtime</groupId> + <artifactId>standalone</artifactId> + <version>2.0-alpha-incubating</version> + </parent> + <modelVersion>4.0.0</modelVersion> + <groupId>org.apache.tuscany.sca.runtime.standalone</groupId> + <artifactId>smoketest</artifactId> + <name>Apache Tuscany SCA Standalone Smoketest</name> + <description>Module to smoketest the standalone runtime.</description> + + <properties> + <tuscany.installDir>${project.build.directory}/assembly</tuscany.installDir> + </properties> + + <dependencies> + <dependency> + <groupId>org.osoa</groupId> + <artifactId>sca-api-r${scaSpecVersion}</artifactId> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <finalName>smoketest</finalName> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <phase>pre-integration-test</phase> + <goals> + <goal>unpack</goal> + </goals> + <configuration> + <artifactItems> + <artifactItem> + <groupId>org.apache.tuscany.sca.runtime.standalone</groupId> + <artifactId>assembly</artifactId> + <version>${project.version}</version> + <classifier>bin</classifier> + <type>zip</type> + <overWrite>true</overWrite> + <outputDirectory>${tuscany.installDir}</outputDirectory> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <executions> + <execution> + <phase>integration-test</phase> + <goals> + <goal>test</goal> + </goals> + <configuration> + <includes> + <include>**/SmokeTest*.java</include> + </includes> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> diff --git a/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloService.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloService.java new file mode 100644 index 0000000000..7d45d73183 --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloServiceImpl.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloServiceImpl.java new file mode 100644 index 0000000000..8012aecc8f --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/HelloServiceImpl.java @@ -0,0 +1,36 @@ +/* + * 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; + +/** + * @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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/Launched.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/Launched.java new file mode 100644 index 0000000000..8c30070725 --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/java/org/apache/tuscany/sca/runtime/standalone/smoketest/Launched.java @@ -0,0 +1,49 @@ +/* + * 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; + +/** + * @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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/resources/META-INF/sca/default.scdl b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/main/resources/META-INF/sca/default.scdl new file mode 100644 index 0000000000..ca2ac88a01 --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/CommandTestCase.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/CommandTestCase.java new file mode 100644 index 0000000000..64d5c02192 --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/ProcessDrainer.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/ProcessDrainer.java new file mode 100644 index 0000000000..31e697bb23 --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestAssemblyContent.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestAssemblyContent.java new file mode 100644 index 0000000000..7ac45268ae --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestLauncher.java b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/java/org/apache/tuscany/sca/runtime/standalone/smoketest/SmokeTestLauncher.java new file mode 100644 index 0000000000..f3e7c3e40c --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherNoComponent.txt b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherNoComponent.txt new file mode 100644 index 0000000000..c77e130b05 --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherUsage.txt b/tags/java/sca/runtime/2.0-alpha-incubating/standalone/smoketest/src/test/resources/org/apache/tuscany/sca/runtime/standalone/smoketest/LauncherUsage.txt new file mode 100644 index 0000000000..d2b766f8ae --- /dev/null +++ b/tags/java/sca/runtime/2.0-alpha-incubating/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, ...] |