/* * 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.vtest.assembly.component; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import junit.framework.Assert; import org.apache.tuscany.sca.vtest.assembly.component.callback.MyClient; import org.apache.tuscany.sca.vtest.utilities.ServiceFinder; import org.junit.Test; import org.junit.Ignore; import org.osoa.sca.ServiceRuntimeException; /** * Test the basic functionalities of the component * */ public class ComponentBasicTestCase { private void initDomain(String compositePath) { System.out.println("Setting up"); ServiceFinder.init(compositePath); } private void cleanupDomain() { System.out.println("Cleaning up"); ServiceFinder.cleanup(); } /** * Lines 92-96: *
* Components are configured instances of implementations. Components * provide and consume services. More than one component can use and * configure the same implementation, where each component configures the * implementation differently. */ @Test public void components1() throws Exception { initDomain("component.composite"); AService service = ServiceFinder.getService(AService.class, "AComponent/AService"); Assert.assertEquals("some b component value", service.getBProperty()); Assert.assertEquals("some b2 component value", service.getB2Property()); cleanupDomain(); } /** * Lines 96-97: *
* There can be zero or more component elements within a composite. */ @Test public void components2() throws Exception { initDomain("zerocomponents.composite"); cleanupDomain(); } /** * Lines 142-143: *
* name (required) ?the name of the component. The name must be unique * across all the components in the composite. */ @Test(expected = ServiceRuntimeException.class) //@Ignore("TUSCANY-2455") public void components3() throws Exception { initDomain("nonuniquename.composite"); cleanupDomain(); } /** * Lines 154-158: *
* A component element has zero or one implementation element as its child, * which points to the implementation used by the component. A component * with no implementation element is not runnable, but components of this * kind may be useful during a "top-down" development process as a means of * defining the characteristics required of the implementation before the * implementation is written. */ @Test public void components4() throws Exception { initDomain("zeroimplelements.composite"); cleanupDomain(); } /** * Lines 159-160: *
* The component element can have zero or more service elements as children * which are used to configure the services of the component. */ @Test public void components5() throws Exception { initDomain("serviceelement.composite"); cleanupDomain(); } /** * Lines 174-179: *
* A service has zero or one interface, which describes the operations * provided by the service. The interface is described by an interface * element which is a child element of the service element. If no interface * is specified, then the interface specified for the service by the * implementation is in effect. If an interface is specified it must provide * a compatible subset of the interface provided by the implementation, i.e. * provide a subset of the operations defined by the implementation for the * service. */ @Test public void components6() throws Exception { initDomain("servicewithinterface.composite"); CService service = ServiceFinder.getService(CService.class, "CComponent"); Assert.assertEquals("Some State", service.getState()); cleanupDomain(); } /** * Lines 180-182: *
* A service element has one or more binding elements as children. If no * bindings are specified, then the bindings specified for the service by * the implementation are in effect. If bindings are specified, then those * bindings override the bindings specified by the implementation. */ @Test public void components7() throws Exception { initDomain("servicewithbinding.composite"); CService service = ServiceFinder.getService(CService.class, "CComponent"); Assert.assertEquals("Some State", service.getState()); cleanupDomain(); } /** * Lines 142-143: *
* OSOA: * the name of the component. The name must be unique across all the * components in the composite. *
* ASM50001 *
* OASIS: * the name of the component. The name must be unique across all * the components in the composite. * */ @Test(expected=ServiceRuntimeException.class) public void testComponentnameUnique() throws Exception { initDomain("nonuniquename.composite"); cleanupDomain(); } /** * Lines 1498-1499: *
* OSOA: * the name of the service, the name MUST BE unique across all the * composite services in the composite *
* ASM50002 *
* OASIS:
* The @name attribute of a service element of a
* Not mentioned in OSOA *
* ASM50003 *
* OASIS
* The @name attribute of a service element of a
* For the service name, OSOA says(1598-1500): * name (required) - the name of the service, the name MUST BE unique across all the * composite services in the composite. The name of the composite service can be different * from the name of the promoted component service. */ @Test(expected=ServiceRuntimeException.class) public void testServicenameNotmatch() throws Exception { initDomain("notmatchofservicename.composite"); DService service = ServiceFinder.getService(DService.class, "DComponent1/DService1"); Assert.assertEquals("hello", service.sayHello()); cleanupDomain(); } /** *
* Not mentioned in OSOA *
* ASM50003 *
* OASIS
* The @name attribute of a service element of a
* OSOA: * If an interface is specified it must provide a compatible subset of the * interface provided by the implementation *
* ASM50004 *
* OASIS:
* If a
* No matched OSOA statements found *
* ASM50005 *
* OASIS:
* If no binding elements are specified for the service, then the bindings specified for
* the equivalent service in the componentType of the implementation MUST be used,
* but if the componentType also has no bindings specified, then
* OSOA: * A service element has an optional callback element used if the interface * has a callback defined, which has one or more binding elements as children. * The callback and its binding child elements are specified if there is a need * to have binding details used to handle callbacks. If the callback element is not present, * the behaviour is runtime implementation dependent. *
* ASM50006 *
* If the callback element is present and contains one or more binding * child elements,then those bindings MUST be used for the callback. * */ @Test public void testCallbackBindings() throws Exception{ initDomain("callback_bindings.composite"); MyClient client = ServiceFinder.getService(MyClient.class, "MyServiceClientComponent/MyClient"); client.callService() ; cleanupDomain(); } }