/* * 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 junit.framework.Assert; import org.apache.tuscany.sca.vtest.utilities.ServiceFinder; import org.junit.Ignore; import org.junit.Test; import org.osoa.sca.ServiceRuntimeException; /** * */ public class ComponentTestCase { 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 599-601: *

* ASM50001 *

* The @name attribute of a child element of a MUST * be unique amongst the service elements of that * */ @Test(expected=ServiceRuntimeException.class) @Ignore("TUSCANY-2675") public void ASM50001() throws Exception { initDomain("nonuniqueservicenameincomponenttype.composite"); AService service = ServiceFinder.getService(AService.class, "ABComponent/AService"); Assert.assertEquals("OK", service.getState()); cleanupDomain(); } /** * Lines 695-697: *

* ASM50002 *

* The @name attribute of a service element of a MUST be unique amongst * the service elements of that * */ @Test(expected=ServiceRuntimeException.class) public void ASM50002() throws Exception { initDomain("nonuniqueservicenameincomposite.composite"); DService service = ServiceFinder.getService(DService.class, "CDComponent/CServiceImpl"); Assert.assertEquals("hello", service.sayHello()); cleanupDomain(); } /** * Lines 697-699: *

* ASM50003 *

* OSOA * The @name attribute of a service element of a MUST match the * @name attribute of a service element of the componentType of the child element of the component. *

* OASIS * the name of the service has to match a name of a service defined by the implementation * */ @Test(expected=ServiceRuntimeException.class) public void ASM50003() throws Exception { initDomain("notmatchofservicename.composite"); DService service = ServiceFinder.getService(DService.class, "DComponent1/DService1"); Assert.assertEquals("hello", service.sayHello()); cleanupDomain(); } /** * Lines 709-715: *

* ASM50004 *

* If a element has an interface subelement specified, the interface MUST * provide a compatible subset of the interface declared on the componentType of the * implementation. */ @Test(expected=ServiceRuntimeException.class) public void ASM50004() throws Exception { //for this case, if you remove the method3() in the EEService //the EEService will be a compatible subset of EService. initDomain("notcompatibleinterface.composite"); EEService service = ServiceFinder.getService(EEService.class, "EEComponent/EEService"); Assert.assertEquals("method1", service.method1()); cleanupDomain(); } }