You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2010/09/30 17:20:12 UTC

svn commit: r1003097 - in /tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test: java/helloworld/ java/org/apache/tuscany/sca/binding/jsonrpc/ resources/

Author: slaws
Date: Thu Sep 30 15:20:02 2010
New Revision: 1003097

URL: http://svn.apache.org/viewvc?rev=1003097&view=rev
Log:
Add the test case from JSONP to check if JSONRPC covers the same cases. Not all tests enabled yet. 

Added:
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/BeanA.java
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldClient.java
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldImpl.java
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldService.java
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/BindingTestCase.java
    tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/resources/helloworld.composite

Added: tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/BeanA.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/BeanA.java?rev=1003097&view=auto
==============================================================================
--- tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/BeanA.java (added)
+++ tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/BeanA.java Thu Sep 30 15:20:02 2010
@@ -0,0 +1,60 @@
+/*
+ * 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 helloworld;
+
+public class BeanA {
+
+    protected Boolean b;
+    protected String s;
+    protected int x;
+    protected Integer y;
+    
+    public Boolean getB() {
+        return b;
+    }
+    
+    public void setB(Boolean b) {
+        this.b = b;
+    }
+    
+    public String getS() {
+        return s;
+    }
+    
+    public void setS(String s) {
+        this.s = s;
+    }
+    
+    public int getX() {
+        return x;
+    }
+    
+    public void setX(int x) {
+        this.x = x;
+    }
+    
+    public Integer getY() {
+        return y;
+    }
+
+    public void setY(Integer y) {
+        this.y = y;
+    }
+}

Added: tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldClient.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldClient.java?rev=1003097&view=auto
==============================================================================
--- tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldClient.java (added)
+++ tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldClient.java Thu Sep 30 15:20:02 2010
@@ -0,0 +1,57 @@
+/*
+ * 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 helloworld;
+
+import org.osoa.sca.annotations.Reference;
+
+
+public class HelloWorldClient implements HelloWorldService {
+
+    @Reference
+    public HelloWorldService  ref;
+    
+    public String sayHello(String name) {
+        return ref.sayHello(name);
+    }
+
+    public String sayHello2(String firstName, String lastName) {
+        return ref.sayHello2(firstName, lastName);
+    }
+
+    public BeanA sayHello3(BeanA bean) {
+        return ref.sayHello3(bean);
+    }
+    
+    public String[] sayHello4(String[] name) {
+        return ref.sayHello4(name);
+    }
+    
+    public BeanA[] sayHello5(BeanA[] beans){
+    	return ref.sayHello5(beans);
+    }
+    
+    public String[] sayHello6(BeanA[] beans, String[] names, String anotherName){
+    	return ref.sayHello6(beans, names, anotherName);
+    }    
+    
+    public void sayHello7() {
+    	ref.sayHello7();
+    }    
+}

Added: tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldImpl.java?rev=1003097&view=auto
==============================================================================
--- tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldImpl.java (added)
+++ tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldImpl.java Thu Sep 30 15:20:02 2010
@@ -0,0 +1,71 @@
+/*
+ * 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 helloworld;
+
+
+public class HelloWorldImpl implements HelloWorldService {
+
+    public String sayHello(String name) {
+        return "Hello " + name;
+    }
+
+    public String sayHello2(String firstName, String lastName) {
+        return "Hello " + firstName + " " + lastName;
+    }
+    
+    public BeanA sayHello3(BeanA bean) {
+        bean.setS("XYZ");
+        return bean;
+    }
+    
+    public String[] sayHello4(String[] name) {
+    	String returnString = "Hello";
+    	
+    	for (int i=0 ; i < name.length; i++){
+    		returnString += " " + name[i];
+    	}
+    	
+    	String [] response = {returnString};
+        return response;
+    }
+    
+    public BeanA[] sayHello5(BeanA[] beans){
+    	beans[0].setS("Hello " + beans[0].getS());
+    	return beans;
+    }
+    
+    public String[] sayHello6(BeanA[] beans, String[] names, String anotherName){
+    	String returnString = "Hello";
+    	
+    	returnString += " " + beans[0].getS();
+    	
+    	for (int i=0 ; i < names.length; i++){
+    		returnString += " " + names[i];
+    	}
+    	
+    	returnString += " " + anotherName;
+    	
+    	String [] response = {returnString};
+        return response;
+    }  
+   
+    public void sayHello7() {
+    	System.out.println("Hello void Fred");
+    }
+}

Added: tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldService.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldService.java?rev=1003097&view=auto
==============================================================================
--- tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldService.java (added)
+++ tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/helloworld/HelloWorldService.java Thu Sep 30 15:20:02 2010
@@ -0,0 +1,41 @@
+/*
+ * 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 helloworld;
+
+import org.osoa.sca.annotations.Remotable;
+
+
+@Remotable
+public interface HelloWorldService {
+
+    String sayHello(String name);
+
+    String sayHello2(String firstName, String lastName);
+    
+    BeanA sayHello3(BeanA bean);
+    
+    String[] sayHello4(String[] name);
+    
+    BeanA[] sayHello5(BeanA[] beans);
+    
+    String[] sayHello6(BeanA[] beans, String[] names, String anotherName);
+    
+    void sayHello7();
+ 
+}

Added: tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/BindingTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/BindingTestCase.java?rev=1003097&view=auto
==============================================================================
--- tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/BindingTestCase.java (added)
+++ tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/BindingTestCase.java Thu Sep 30 15:20:02 2010
@@ -0,0 +1,226 @@
+/*
+ * 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.binding.jsonrpc;
+
+import helloworld.BeanA;
+import helloworld.HelloWorldService;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import junit.framework.Assert;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.apache.tuscany.sca.node.SCANode;
+import org.json.JSONObject;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import com.meterware.httpunit.PostMethodWebRequest;
+import com.meterware.httpunit.WebConversation;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+
+public class BindingTestCase {
+
+    private static SCANode node;
+    
+    /* SMD =
+     * 
+     * {"SMDVersion":".1","objectName":"HelloWorldService","serviceType":"JSON-RPC","serviceURL":"http://ibm-7a66aa9141b:8085/HelloWorldComponent/HelloWorldService","methods":[{"name":"sayHello","parameters":[{"name":"param0","type":"STRING"}]},{"name":"sayHello2","parameters":[{"name":"param0","type":"STRING"},{"name":"param1","type":"STRING"}]},{"name":"sayHello3","parameters":[{"name":"param0","type":"STRING"}]},{"name":"sayHello4","parameters":[{"name":"param0","type":"STRING"}]},{"name":"sayHello5","parameters":[{"name":"param0","type":"STRING"}]},{"name":"sayHello6","parameters":[{"name":"param0","type":"STRING"},{"name":"param1","type":"STRING"},{"name":"param2","type":"STRING"}]},{"name":"sayHello7","parameters":[]}]}
+     */
+    
+    public JSONObject callService(String url, JSONObject jsonRequest) throws Exception {
+        System.out.println("Request = " + jsonRequest.toString());
+        WebConversation wc   = new WebConversation();
+        WebRequest request   = new PostMethodWebRequest( url, 
+                                                         new ByteArrayInputStream(jsonRequest.toString().getBytes("UTF-8")),"application/json");
+        WebResponse response = wc.getResource(request);
+        System.out.println("Response= " + response.getText());               
+        Assert.assertEquals(200, response.getResponseCode());
+        return new JSONObject(response.getText()); 
+    }    
+
+    @Test
+    public void testOneArg() throws MalformedURLException, IOException {
+        try {
+	        JSONObject jsonRequest = new JSONObject("{\"params\":[\"\\\"petra\\\"\"],\"method\":\"sayHello\",\"id\":1}");
+	        JSONObject jsonResp    = callService ("http://localhost:8085/HelloWorldComponent/HelloWorldService",
+	                                              jsonRequest);
+	        Assert.assertNotNull(jsonResp);
+	        Assert.assertEquals("{\"id\":1,\"result\":\"\\\"Hello petra\\\"\"}", jsonResp.toString());
+        
+        } catch(Exception ex){
+        	ex.printStackTrace();
+        	Assert.fail();
+        }
+    }
+
+    @Test
+    public void testTwoArgs() throws MalformedURLException, IOException {       
+        try {
+	        JSONObject jsonRequest = new JSONObject("{\"params\":[\"\\\"petra\\\"\", \"\\\"arnold\\\"\"],\"method\":\"sayHello2\",\"id\":1}");
+	        JSONObject jsonResp    = callService ("http://localhost:8085/HelloWorldComponent/HelloWorldService",
+	                                              jsonRequest);
+	        Assert.assertNotNull(jsonResp);
+	        Assert.assertEquals("{\"id\":1,\"result\":\"\\\"Hello petra arnold\\\"\"}", jsonResp.toString());
+        
+        } catch(Exception ex){
+        	ex.printStackTrace();
+        	Assert.fail();
+        }       
+
+    } 
+    
+    @Test
+    public void testComplexParams() throws MalformedURLException, IOException {         
+        try {
+	        JSONObject jsonRequest = new JSONObject("{\"params\":[{\"b\":true, \"s\":\"fred\", \"x\":2, \"y\":5}],\"method\":\"sayHello3\",\"id\":1}");
+	        JSONObject jsonResp    = callService ("http://localhost:8085/HelloWorldComponent/HelloWorldService",
+	                                              jsonRequest);
+	        Assert.assertNotNull(jsonResp);
+	        Assert.assertEquals("{\"id\":1,\"result\":{\"s\":\"XYZ\",\"b\":true,\"y\":5,\"x\":2}}", jsonResp.toString());
+        
+        } catch(Exception ex){
+        	ex.printStackTrace();
+        	Assert.fail();
+        }          
+    }  
+    
+    @Test
+    public void testStringArray() throws MalformedURLException, IOException {     
+        
+        try {
+	        JSONObject jsonRequest = new JSONObject("{\"params\":[[\"Fred\", \"Bloggs\"]],\"method\":\"sayHello4\",\"id\":1}");
+	        JSONObject jsonResp    = callService ("http://localhost:8085/HelloWorldComponent/HelloWorldService",
+	                                              jsonRequest);
+	        Assert.assertNotNull(jsonResp);
+	        Assert.assertEquals("{\"id\":1,\"result\":[\"Hello Fred Bloggs\"]}", jsonResp.toString());
+        
+        } catch(Exception ex){
+        	ex.printStackTrace();
+        	Assert.fail();
+        }        
+    }   
+    
+    @Test
+    @Ignore
+    public void testBeanArray() throws MalformedURLException, IOException {
+/*
+        HelloWorldService client = ((SCAClient)node).getService(HelloWorldService.class, "HelloWorldClient");
+
+        BeanA bean = new BeanA();
+        bean.setB(true);
+        bean.setS("Fred");
+        bean.setX(2);
+        bean.setX(5);
+        
+        BeanA[] beans = {bean};
+        BeanA[] response = client.sayHello5(beans);
+
+        Assert.assertEquals("Hello Fred", response[0].getS());
+*/
+        
+        try {
+	        JSONObject jsonRequest = new JSONObject("{\"params\":[{\"b\":true, \"s\":\"fred\", \"x\":2, \"y\":5}],\"method\":\"sayHello3\",\"id\":1}");
+	        JSONObject jsonResp    = callService ("http://localhost:8085/HelloWorldComponent/HelloWorldService",
+	                                              jsonRequest);
+	        Assert.assertNotNull(jsonResp);
+	        Assert.assertEquals("{\"id\":1,\"result\":{\"s\":\"XYZ\",\"b\":true,\"y\":5,\"x\":2}}", jsonResp.toString());
+        
+        } catch(Exception ex){
+        	ex.printStackTrace();
+        	Assert.fail();
+        }        
+    }       
+    
+    /* HTTP Request for testMixedArray
+        GET /HelloWorldComponent/HelloWorldService/sayHello6?arg0=%5B%7B%22b%22%3Atrue%2C%22s%22%3A%22Fred%22%2C%22y%22%3Anull%2C%22x%22%3A5%7D%5D&arg1=%5B%22Fred%22%2C%22Bloggs%22%5D&arg2=%22Bloggs%22 HTTP/1.1
+        Host: localhost:8085
+        Connection: Keep-Alive
+        User-Agent: Apache-HttpClient/4.0 (java 1.5)
+     */
+    /* FYI Converted URL =
+        /HelloWorldComponent/HelloWorldService/sayHello6?arg0=[{"b":true,"s":"Fred","y":null,"x":5}]&arg1=["Fred":"Bloggs"]&arg2="Bloggs" HTTP/1.1
+     */
+    /* HTTP Response for testMixedArray
+        HTTP/1.1 200 OK
+        Content-Length: 35
+        ["Hello Fred Fred Bloggs Bloggs"]
+     */
+    @Test
+    @Ignore
+    public void testMixedArray() throws MalformedURLException, IOException {
+        HelloWorldService client = ((SCAClient)node).getService(HelloWorldService.class, "HelloWorldClient");
+
+        BeanA bean = new BeanA();
+        bean.setB(true);
+        bean.setS("Fred");
+        bean.setX(2);
+        bean.setX(5);
+        
+        BeanA[] beans = {bean};
+        String[] names = {"Fred", "Bloggs"};
+        
+        String[] response = client.sayHello6(beans, names, "Bloggs");
+
+        Assert.assertEquals("Hello Fred Fred Bloggs Bloggs", response[0]);
+    }  
+    
+    @Test
+    @Ignore
+    public void testVoid() throws MalformedURLException, IOException {
+        HelloWorldService client = ((SCAClient)node).getService(HelloWorldService.class, "HelloWorldClient");
+
+        client.sayHello7();
+    }     
+    
+    @Test
+    @Ignore
+    public void waitForInput(){
+        System.out.println("Press a key");
+        try {
+            System.in.read();
+        } catch (Exception ex){
+            // do nothing
+        }
+    }
+
+    @BeforeClass
+    public static void init() throws Exception {       
+        SCANodeFactory factory = SCANodeFactory.newInstance();
+        node = factory.createSCANodeFromClassLoader("helloworld.composite", BindingTestCase.class.getClassLoader());
+        node.start();        
+    }
+    
+    @AfterClass
+    public static void destroy() throws Exception {
+        if (node != null) {
+            node.stop();
+        }
+    }
+
+}

Added: tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/resources/helloworld.composite
URL: http://svn.apache.org/viewvc/tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/resources/helloworld.composite?rev=1003097&view=auto
==============================================================================
--- tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/resources/helloworld.composite (added)
+++ tuscany/sca-java-1.x/trunk/modules/binding-jsonrpc-runtime/src/test/resources/helloworld.composite Thu Sep 30 15:20:02 2010
@@ -0,0 +1,39 @@
+<?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/1.0"
+           targetNamespace="http://itest"
+           name="HelloWorldComposite">
+           
+    <component name="HelloWorldComponent">
+        <implementation.java class="helloworld.HelloWorldImpl"/>
+        <service name="HelloWorldService" >
+            <tuscany:binding.jsonrpc uri="http://localhost:8085/HelloWorldComponent/HelloWorldService"/>
+        </service>
+    </component>   
+  
+    <component name="HelloWorldClient">
+        <implementation.java class="helloworld.HelloWorldClient"/>
+        <reference name="ref" >
+            <tuscany:binding.jsonrpc uri="http://localhost:8085/HelloWorldComponent/HelloWorldService"/>
+        </reference>
+    </component>   
+
+</composite>