BuilderTestCase.java :  » Web-Services » apache-tuscany-sca-2.0 » org » apache » tuscany » sca » itest » builder » Java Open Source

Java Open Source » Web Services » apache tuscany sca 2.0 
apache tuscany sca 2.0 » org » apache » tuscany » sca » itest » builder » BuilderTestCase.java
/*
 * 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.itest.builder;

import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.xml.namespace.QName;

import junit.framework.Assert;

import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Load and build some composites and inspect the results.
 * 
 * @version $Rev: 820125 $ $Date: 2009-09-29 23:41:25 +0000 (Tue, 29 Sep 2009) $
 */
public class BuilderTestCase {
    private CustomCompositeBuilder customBuilder;
    
    @Before
    public void setUp() throws Exception {
    }

    @After
    public void tearDown() throws Exception {
    }

 /* OASIS doesn't take notice of top level composite services
  * 
    // Scenario 1: <binding.ws> on outer composite service CompositeA/Service1
    @Ignore
    @Test
    public void testScenario1() throws Exception {
        System.out.println("====>Running testScenario1");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario1.composite", "TestContribution", "src/main/resources/scenario1/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario1Results(false);
    }

    @Ignore
    @Test
    public void testScenario1NonWiring() throws Exception {
        System.out.println("====>Running testScenario1NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario1.composite", "TestContribution", "src/main/resources/scenario1/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario1Results(true);
    }

    private void checkScenario1Results(boolean nonWiring) {
        Composite domainComposite = customBuilder.getDomainComposite();

        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        if (!nonWiring) {
            // Should create component service $promoted$Service1 on innermost component
            //  ComponentD, with <binding.ws> and uri="/Service1"
            // No other services on ComponentD should have <binding.ws>
            WebServiceBinding wsBinding = null;
            for (ComponentService service : componentD.getServices()) {
                WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
                if ("$promoted$Service1".equals(service.getName())) {
                    wsBinding = wsb;
                } else {
                    assert wsb == null;
                }
            }
            assert "/Service1".equals(wsBinding.getURI());

            // Should create WSDL document for ComponentD/$promoted$Service1 with endpoint uri="/Service1"
            Definition def = wsBinding.getWSDLDocument();
            javax.wsdl.Service svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
            Port port = svc.getPort("Service3Port");
            assert "/Service1".equals(TestUtils.getPortAddress(port));
        } else {
            // Should not create component service $promoted$Service1 on innermost component ComponentD
            // No component services on ComponentD should have <binding.ws>
            for (ComponentService service : componentD.getServices()) {
                assert !"$promoted$Service1".equals(service.getName());
                assert service.getBinding(WebServiceBinding.class) == null;
            }
        }

        // No services on ComponentB should have <binding.ws>
        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
        for (ComponentService service : componentB.getServices()) {
            assert service.getBinding(WebServiceBinding.class) == null;
        }

        // No services on CompositeC should have <binding.ws>
        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario1", "CompositeC"));
        for (Service service : compositeC.getServices()) {
            assert service.getBinding(WebServiceBinding.class) == null;
        }

        if (nonWiring) {
            // Should not add a WSDL document to domain composite service Service1
            WebServiceBinding wsBinding = null;
            for (Service service : domainComposite.getServices()) {
                if ("Service1".equals(service.getName())) {
                    wsBinding = service.getBinding(WebServiceBinding.class);
                }
            }
            assert wsBinding.getWSDLDocument() == null;
        }
        
        String expectedEndpoints =  "Component - ComponentB\n" + 
                                    "Service - Service2\n" + 
                                    "Endpoint - Service2\n" + 
                                    "Service - Service2a\n" + 
                                    "Endpoint - Service2a\n" + 
                                    "Reference - reference2\n" + 
                                    "Component - ComponentB has composite impl\n" + 
                                    "   Component - ComponentD\n" + 
                                    "   Service - Service3\n" + 
                                    "   Endpoint - Service3\n" + 
                                    "   Service - Service3a\n" + 
                                    "   Endpoint - Service3a\n" + 
                                    "   Reference - reference3";
        
        String actualEndpoints = TestUtils.printEndpoints(domainComposite);
        System.out.println(actualEndpoints);
        
        Assert.assertEquals(expectedEndpoints, actualEndpoints);
    }
*/

    // Scenario 2: <binding.ws> on outer component service ComponentB/Service2
    @Test
    public void testScenario2() throws Exception {
        System.out.println("====>Running testScenario2");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario2.composite", "TestContribution", "src/main/resources/scenario2/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario2and3Results("http://scenario2", false);
    }

    public void testScenario2NonWiring() throws Exception {
        System.out.println("====>Running testScenario2NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario2.composite", "TestContribution", "src/main/resources/scenario2/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario2and3Results("http://scenario2", true);
    }
    
    private void checkScenario2and3Results(String namespace, boolean nonWiring) {
        Composite domainComposite = customBuilder.getDomainComposite();
        
        // Test that endpoint structure matches expected
        String structure = TestUtils.printStructure(domainComposite, "");
        System.out.println(structure);
        
        String expectedStructure = "Component URI - ComponentB\n" +
        "  Component URI - ComponentB/ComponentD\n" +
        "  Endpoint:  URI = ComponentB/ComponentD#service-binding(Service3/Service3) org.apache.tuscany.sca.assembly.impl.SCABindingImpl\n" +
        "  Endpoint:  URI = ComponentB/ComponentD#service-binding(Service3a/Service3a) org.apache.tuscany.sca.assembly.impl.SCABindingImpl\n" +
        "Endpoint:  URI = ComponentB#service-binding(Service2/Service2) org.apache.tuscany.sca.binding.ws.impl.WebServiceBindingImpl\n" +
        "Endpoint:  URI = ComponentB#service-binding(Service2a/Service3a) org.apache.tuscany.sca.assembly.impl.SCABindingImpl\n";

        Assert.assertEquals(expectedStructure, structure);
        
        // Test that generated WSDL matches expected
        // Should create WSDL document for ComponentB/Service2 with endpoint uri="/ComponentB/Service2"
        // No other services on ComponentB should have <binding.ws>
        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
        WebServiceBinding wsBinding = null;
    
        for (ComponentService service : componentB.getServices()) {
            WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
            if ("Service2".equals(service.getName())) {
                wsBinding = wsb;
            } else {
                assert wsb == null;
            }
        }
       
        Definition def = wsBinding.getWSDLDocument();
        TestUtils.writeWSDL(def);
        
        javax.wsdl.Service svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
        Port port = svc.getPort("Service3Port");
        Assert.assertEquals("/ComponentB/Service2",TestUtils.getPortAddress(port));
     
    }
/*
    // Scenario 3: <binding.ws> on inner composite service CompositeC/Service2
    public void testScenario3() throws Exception {
        System.out.println("====>Running testScenario3");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario3.composite", "TestContribution", "src/main/resources/scenario3/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario2and3Results("http://scenario3", false);
    }

    public void testScenario3NonWiring() throws Exception {
        System.out.println("====>Running testScenario3NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario3.composite", "TestContribution", "src/main/resources/scenario3/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario2and3Results("http://scenario3", true);
    }

    // Scenario 4: <binding.ws> on inner component service ComponentD/Service3
    public void testScenario4() throws Exception {
        System.out.println("====>Running testScenario4");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario4.composite", "TestContribution", "src/main/resources/scenario4/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario4Results(false);
    }

    public void testScenario4NonWiring() throws Exception {
        System.out.println("====>Running testScenario4NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario4.composite", "TestContribution", "src/main/resources/scenario4/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario4Results(true);
    }

    private void checkScenario4Results(boolean nonWiring) {
        Composite domainComposite = customBuilder.getDomainComposite();

        // Should create WSDL document for ComponentD/Service3 with endpoint uri="/ComponentD/Service3"
        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        WebServiceBinding wsBinding = null;
        for (ComponentService service : componentD.getServices()) {
            if ("Service3".equals(service.getName())) {
                wsBinding = service.getBinding(WebServiceBinding.class);
            }
        }
        Definition def = wsBinding.getWSDLDocument();
        javax.wsdl.Service svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
        Port port = svc.getPort("Service3Port");
        assert "/ComponentB/ComponentD/Service3".equals(TestUtils.getPortAddress(port));

        // Should add <binding.ws> to inner composite service CompositeC/Service2 
        // No other services on CompositeC should have <binding.ws>
        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario4", "CompositeC"));
        wsBinding = null;
        for (Service service : compositeC.getServices()) {
            WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
            if ("Service2".equals(service.getName())) {
                wsBinding = wsb;
            } else {
                assert wsb == null;
            }
        }
        assert "/ComponentB/Service2".equals(wsBinding.getURI());

        // Should add <binding.ws> to outer component service ComponentB/Service2 
        // Should create WSDL document for ComponentB/Service2 with endpoint uri="/ComponentB/Service2"
        // No other services on ComponentB should have <binding.ws>
        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
        wsBinding = null;
        for (ComponentService service : componentB.getServices()) {
            WebServiceBinding wsb = service.getBinding(WebServiceBinding.class);
            if ("Service2".equals(service.getName())) {
                wsBinding = wsb;
            } else {
                assert wsb == null;
            }
        }
        assert "/ComponentB/Service2".equals(wsBinding.getURI());
        def = wsBinding.getWSDLDocument();
        svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
        port = svc.getPort("Service3Port");
        assert "/ComponentB/Service2".equals(TestUtils.getPortAddress(port));

        if (!nonWiring) {
            // Should create component service $promoted$ComponentB$slash$Service2 on innermost component
            //  ComponentD, with <binding.ws> and uri="/ComponentB/Service2"
            wsBinding = null;
            for (ComponentService service : componentD.getServices()) {
                if ("$promoted$ComponentB$slash$Service2".equals(service.getName())) {
                    wsBinding = service.getBinding(WebServiceBinding.class);
                }
            }
            assert "/ComponentB/Service2".equals(wsBinding.getURI());

            // Should create WSDL document for ComponentD/$promoted$ComponentB$slash$Service2 with endpoint uri="/ComponentB/Service2"
            def = wsBinding.getWSDLDocument();
            svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
            port = svc.getPort("Service3Port");
            assert "/ComponentB/Service2".equals(TestUtils.getPortAddress(port));
        } else {
            // Should not create component service $promoted$ComponentB$slash$Service2 on innermost component ComponentD
            for (ComponentService service : componentD.getServices()) {
                assert !"$promoted$ComponentB$slash$Service2".equals(service.getName());
            }
        }

        // Should add <binding.ws> to outer composite service CompositeA/Service1 
        wsBinding = null;
        for (Service service : domainComposite.getServices()) {
            if ("Service1".equals(service.getName())) {
                wsBinding = service.getBinding(WebServiceBinding.class);
            }
        }
        assert wsBinding != null;
        if (nonWiring) {
            // Should not add a WSDL document to domain composite service Service1
            assert wsBinding.getWSDLDocument() == null;
        }

        if (!nonWiring) {
            // Should create component service $promoted$Service1 on innermost component
            //  ComponentD, with <binding.ws> and uri="/Service1"
            wsBinding = null;
            for (ComponentService service : componentD.getServices()) {
                if ("$promoted$Service1".equals(service.getName())) {
                    wsBinding = service.getBinding(WebServiceBinding.class);
                }
            }
            assert "/Service1".equals(wsBinding.getURI());

            // Should create WSDL document for ComponentD/$promoted$Service1 with endpoint uri="/Service1"
            def = wsBinding.getWSDLDocument();
            svc = def.getService(new QName("http://builder.itest.sca.tuscany.apache.org/", "Service3Service")); 
            port = svc.getPort("Service3Port");
            assert "/Service1".equals(TestUtils.getPortAddress(port));
        } else {
            // Should not create component service $promoted$.Service1 on innermost component ComponentD
            for (ComponentService service : componentD.getServices()) {
                assert !"$promoted$Service1".equals(service.getName());
            }
        }

        // No services on ComponentD should have <binding.ws>, except for Service3,
        //  $promoted$.Service1 and $promoted$.ComponentB.Service2
        for (ComponentService service : componentD.getServices()) {
            if (!"Service3".equals(service.getName()) &&
                !"$promoted$Service1".equals(service.getName()) &&
                !"$promoted$ComponentB$slash$Service2".equals(service.getName())) {
                assert service.getBinding(WebServiceBinding.class) == null;
            }
        }
    }
    
    // Scenario 5: <binding.ws> and <interface.wsdl> on outer composite reference CompositeA/reference1
    @Test
    public void testScenario5() throws Exception {
        System.out.println("====>Running testScenario5");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario5.composite", "TestContribution", "src/main/resources/scenario5/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario5Results(false);
    }
    
    @Test
    public void testScenario5NonWiring() throws Exception {
        System.out.println("====>Running testScenario5NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario5.composite", "TestContribution", "src/main/resources/scenario5/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario5Results(true);
    }

    private void checkScenario5Results(boolean nonWiring) {
        Composite domainComposite = customBuilder.getDomainComposite();

        // Should not add <binding.ws> to any outer component references 
        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
        for (ComponentReference reference : componentB.getReferences()) {
            assert reference.getBinding(WebServiceBinding.class) == null;
        }

        Definition def;
        javax.wsdl.Service svc;
        Port port;
        WebServiceBinding wsBinding;
        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        if (!nonWiring) {
            // Should add <binding.ws> to inner component reference ComponentD/reference3 with uri="http://foo.com/bar" 
            // Should set <interface.wsdl> on inner component reference ComponentD/reference3 
            wsBinding = null;
            for (ComponentReference reference : componentD.getReferences()) {
                if ("reference3".equals(reference.getName())) {
                    wsBinding = reference.getBinding(WebServiceBinding.class);
                    assert reference.getInterfaceContract(wsBinding) instanceof WSDLInterfaceContract;
                }
            }
            assert "http://foo.com/bar".equals(wsBinding.getURI());

            // Should create WSDL document for ComponentD/reference3 with endpoint uri="http://foo.com/bar"
            def = wsBinding.getWSDLDocument();
            svc = def.getService(new QName("http://scenarios/ComponentD/reference3", "Service3aService")); 
            port = svc.getPort("Service3aPort");
            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
        } else {
            // Should not add <binding.ws> to any inner component references 
            for (ComponentReference reference : componentD.getReferences()) {
                assert reference.getBinding(WebServiceBinding.class) == null;
            }
        }

        // Should not add <binding.ws> or <interface.wsdl> to inner composite reference CompositeC/reference2 
        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario5", "CompositeC"));
        for (Reference reference : compositeC.getReferences()) {
            assert reference.getBinding(WebServiceBinding.class) == null;
            assert reference.getInterfaceContract() instanceof JavaInterfaceContract;
        }
        
        String expectedEndpoints =  "Component - ComponentB\n" + 
                                    "Service - Service2\n" + 
                                    "Endpoint - Service2\n" + 
                                    "Service - Service2a\n" + 
                                    "Endpoint - Service2a\n" + 
                                    "Reference - reference2\n" + 
                                    "Component - ComponentB has composite impl\n" + 
                                    "   Component - ComponentD\n" + 
                                    "   Service - Service3\n" + 
                                    "   Endpoint - Service3\n" + 
                                    "   Service - Service3a\n" + 
                                    "   Endpoint - Service3a\n" + 
                                    "   Reference - reference3";

        String actualEndpoints = TestUtils.printEndpoints(domainComposite);
        System.out.println(actualEndpoints);
        
        Assert.assertEquals(expectedEndpoints, actualEndpoints);        
    }

    
    // Scenario 6: <binding.ws> and <interface.wsdl> on outer component reference ComponentB/reference2
    @Ignore
    @Test
    public void testScenario6() throws Exception {
        System.out.println("====>Running testScenario6");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario6.composite", "TestContribution", "src/main/resources/scenario6/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario6and7Results("http://scenario6", false);
    }

    @Ignore
    @Test
    public void testScenario6NonWiring() throws Exception {
        System.out.println("====>Running testScenario6NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario6.composite", "TestContribution", "src/main/resources/scenario6/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario6and7Results("http://scenario6", true);
    }

    private void checkScenario6and7Results(String namespace, boolean nonWiring) {
        Composite domainComposite = customBuilder.getDomainComposite();

        // Should remove target= on ComponentB/reference2 (for Scenario 6) or
        //  CompositeC/reference2 (for Scenario 7), and add uri="http://foo.com/bar"
        //  to the <binding.ws> element on ComponentB/reference2
        // For nonWiring, ComponentB/reference2 should have target=
        //  and no uri= should be added
        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
        WebServiceBinding wsBinding = null;
        for (ComponentReference reference : componentB.getReferences()) {
            if ("reference2".equals(reference.getName())) {
                if (!nonWiring) {
                    assert reference.getTargets().size() == 0;
                } else {
                    assert reference.getTargets().size() == 1;
                }
                wsBinding = reference.getBinding(WebServiceBinding.class);
            }
        }
        if (!nonWiring) {
            assert "http://foo.com/bar".equals(wsBinding.getURI());
        } else {
            assert wsBinding.getURI() == null;
        }

        Definition def;
        javax.wsdl.Service svc;
        Port port;
        if (!nonWiring) {
            // Should create WSDL document for ComponentB/reference2 with endpoint uri="http://foo.com/bar"
            def = wsBinding.getWSDLDocument();
            svc = def.getService(new QName("http://scenarios/ComponentB/reference2", "Service3aService")); 
            port = svc.getPort("Service3aPort");
            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
        }

        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        if (!nonWiring) {
            // Should add <binding.ws> to inner component reference ComponentD/reference3 with uri="http://foo.com/bar" 
            // Should set <interface.wsdl> on inner component reference ComponentD/reference3 
            wsBinding = null;
            for (ComponentReference reference : componentD.getReferences()) {
                if ("reference3".equals(reference.getName())) {
                    wsBinding = reference.getBinding(WebServiceBinding.class);
                    assert reference.getBindings().size() == 1;
                    assert reference.getInterfaceContract(wsBinding) instanceof WSDLInterfaceContract;
                }
            }
            assert "http://foo.com/bar".equals(wsBinding.getURI());

            // Should create WSDL document for ComponentD/reference3 with endpoint uri="http://foo.com/bar"
            def = wsBinding.getWSDLDocument();
            svc = def.getService(new QName("http://scenarios/ComponentB/reference2", "Service3aService")); 
            port = svc.getPort("Service3aPort");
            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
        } else {
            // Should not add <binding.ws> to any inner component references 
            for (ComponentReference reference : componentD.getReferences()) {
                assert reference.getBinding(WebServiceBinding.class) == null;
            }
        }

        // No references on CompositeC should have <binding.ws> or <interface.wsdl>, except for
        //  reference2 in Scenario 7
        Composite compositeC = TestUtils.getComposite(domainComposite, new QName(namespace, "CompositeC"));
        for (Reference reference : compositeC.getReferences()) {
            if ("http://scenario7".equals(namespace) && "reference2".equals(reference.getName())) {
                assert reference.getBinding(WebServiceBinding.class)!= null;
                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
            } else {
                assert reference.getBinding(WebServiceBinding.class) == null;
                assert reference.getInterfaceContract() instanceof JavaInterfaceContract;
            }
        }

        // Should add <binding.ws> and <interface.wsdl> to outer composite reference CompositeA/reference1 
        wsBinding = null;
        for (Reference reference : domainComposite.getReferences()) {
            if ("reference1".equals(reference.getName())) {
                wsBinding = reference.getBinding(WebServiceBinding.class);
                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
            }
        }
        assert wsBinding.getURI() == null;

        // Should not add a WSDL document to domain composite reference reference1
        assert wsBinding.getWSDLDocument() == null;
        
        String expectedEndpoints =  "Component - ComponentB\n" + 
                                    "Service - Service2\n" + 
                                    "Endpoint - Service2\n" + 
                                    "Service - Service2a\n" + 
                                    "Endpoint - Service2a\n" + 
                                    "Reference - reference2\n" + 
                                    "Component - ComponentB has composite impl\n" + 
                                    "   Component - ComponentD\n" + 
                                    "   Service - Service3\n" + 
                                    "   Endpoint - Service3\n" + 
                                    "   Service - Service3a\n" + 
                                    "   Endpoint - Service3a\n" + 
                                    "   Reference - reference3";
        
        String actualEndpoints = TestUtils.printEndpoints(domainComposite);
        System.out.println(actualEndpoints);
        
        Assert.assertEquals(expectedEndpoints, actualEndpoints);        
    }

    // Scenario 7: <binding.ws> and <interface.wsdl> on inner composite reference CompositeC/reference2
    public void testScenario7() throws Exception {
        System.out.println("====>Running testScenario7");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario7.composite", "TestContribution", "src/main/resources/scenario7/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario6and7Results("http://scenario7", false);
    }

    public void testScenario7NonWiring() throws Exception {
        System.out.println("====>Running testScenario7NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario7.composite", "TestContribution", "src/main/resources/scenario7/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario6and7Results("http://scenario7", true);
    }

    // Scenario 8: <binding.ws> and <interface.wsdl> on inner component reference ComponentD/reference3
    public void testScenario8() throws Exception {
        System.out.println("====>Running testScenario8");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario8.composite", "TestContribution", "src/main/resources/scenario8/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario8Results(false);
    }

    public void testScenario8NonWiring() throws Exception {
        System.out.println("====>Running testScenario8NonWiring");
        customBuilder = new CustomCompositeBuilder(true);
        customBuilder.loadContribution("scenario8.composite", "TestContribution", "src/main/resources/scenario8/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario8Results(true);
    }

    private void checkScenario8Results(boolean nonWiring) {
        Composite domainComposite = customBuilder.getDomainComposite();

        // Should replace target= on ComponentD/reference3 by uri="http://foo.com/bar" on <binding.ws>
        // For nonWiring, the original target= is preserved and there is no uri=
        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        WebServiceBinding wsBinding = null;
        for (ComponentReference reference : componentD.getReferences()) {
            if ("reference3".equals(reference.getName())) {
                if (!nonWiring) {
                    assert reference.getTargets().size() == 0;
                } else {
                    assert reference.getTargets().size() == 1;
                }
                wsBinding = reference.getBinding(WebServiceBinding.class);
            }
        }
        if (!nonWiring) {
            assert "http://foo.com/bar".equals(wsBinding.getURI());
        } else {
            assert wsBinding.getURI() == null;
        }

        Definition def;
        javax.wsdl.Service svc;
        Port port;
        if (!nonWiring) {
            // Should create WSDL document for ComponentD/reference3 with endpoint uri="http://foo.com/bar"
            def = wsBinding.getWSDLDocument();
            svc = def.getService(new QName("http://scenarios/ComponentD/reference3", "Service3aService")); 
            port = svc.getPort("Service3aPort");
            assert "http://foo.com/bar".equals(TestUtils.getPortAddress(port));
        }

        // Should add <binding.ws> and <interface.wsdl> to inner composite reference CompositeC/reference2 
        Composite compositeC = TestUtils.getComposite(domainComposite, new QName("http://scenario8", "CompositeC"));
        wsBinding = null;
        for (Reference reference : compositeC.getReferences()) {
            if ("reference2".equals(reference.getName())) {
                wsBinding = reference.getBinding(WebServiceBinding.class);
                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
            }
        }
        assert wsBinding.getURI() == null;

        // Should add <binding.ws> and <interface.wsdl> to outer component reference ComponentB/reference2 
        Component componentB = TestUtils.getComponent(domainComposite, "ComponentB");
        wsBinding = null;
        for (ComponentReference reference : componentB.getReferences()) {
            if ("reference2".equals(reference.getName())) {
                wsBinding = reference.getBinding(WebServiceBinding.class);
                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
            }
        }
        assert wsBinding.getURI() == null;

        // Should add <binding.ws> and <interface.wsdl> to outer composite reference CompositeA/reference1 
        wsBinding = null;
        for (Reference reference : domainComposite.getReferences()) {
            if ("reference1".equals(reference.getName())) {
                wsBinding = reference.getBinding(WebServiceBinding.class);
                assert reference.getInterfaceContract() instanceof WSDLInterfaceContract;
            }
        }
        assert wsBinding.getURI() == null;

        // Should not add a WSDL document to domain composite reference reference1
        assert wsBinding.getWSDLDocument() == null;
    }

    // Scenario 9: target in reference CDR3A and binding.ws uri= at CAR1A
    public void testScenario9() throws Exception {
        System.out.println("====>Running testScenario9");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario9.composite", "TestContribution", "src/main/resources/scenario9/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario9Results();
    }    

    private void checkScenario9Results() {
        Composite domainComposite = customBuilder.getDomainComposite();

        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        ComponentReference componentRef = null;
        for (ComponentReference reference : componentD.getReferences()) {
            if ("reference3a".equals(reference.getName())) {
                componentRef = reference;
                assertTrue(reference.getBindings().size() == 2);
                assertTrue(reference.getBindings().get(0) instanceof SCABinding);
                assertTrue(reference.getBindings().get(1) instanceof WebServiceBinding);
            }
        }
        assertTrue(componentRef != null);
    }    
    
    // Scenario 10: targets in references CBR2A and CDR3A and binding.ws at CBR2A
    public void testScenario10() throws Exception {
        System.out.println("====>Running testScenario10");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario10.composite", "TestContribution", "src/main/resources/scenario10/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario10And11Results();
    }    
    
    // Scenario 11: targets in references CBR2A and CDR3A and binding.ws at CCR2A
    public void testScenario11() throws Exception {
        System.out.println("====>Running testScenario11");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario11.composite", "TestContribution", "src/main/resources/scenario11/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario10And11Results();
    }

    private void checkScenario10And11Results() {
        Composite domainComposite = customBuilder.getDomainComposite();

        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        ComponentReference componentRef = null;
        for (ComponentReference reference : componentD.getReferences()) {
            if ("reference3a".equals(reference.getName())) {
                componentRef = reference;
                assertTrue(reference.getBindings().size() == 2);
                Binding binding1 = reference.getBindings().get(0);
                assertTrue(binding1 instanceof SCABinding);
                assertTrue(reference.getInterfaceContract(binding1) instanceof JavaInterfaceContract);
                Binding binding2 = reference.getBindings().get(1);
                assertTrue(binding2 instanceof WebServiceBinding);
                assertTrue(reference.getInterfaceContract(binding2) instanceof WSDLInterfaceContract);
            }
        }
        assertTrue(componentRef != null);
    }  

    // Scenario 12: targets in references CBR2A and CDR3A and binding.ws at CDR3A
    public void testScenario12() throws Exception {
        System.out.println("====>Running testScenario12");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario12.composite", "TestContribution", "src/main/resources/scenario12/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario12Results();
    }

    private void checkScenario12Results() {
        Composite domainComposite = customBuilder.getDomainComposite();

        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        ComponentReference componentRef = null;
        for (ComponentReference reference : componentD.getReferences()) {
            if ("reference3a".equals(reference.getName())) {
                componentRef = reference;
                assertTrue(reference.getBindings().size() == 2);
                assertTrue(reference.getBindings().get(0) instanceof WebServiceBinding);
                assertTrue(reference.getBindings().get(1) instanceof WebServiceBinding);
            }
        }
        assertTrue(componentRef != null);
    }

    // Scenario 13: target in reference CDR3A
    public void testScenario13() throws Exception {
        System.out.println("====>Running testScenario13");
        customBuilder = new CustomCompositeBuilder(false);
        customBuilder.loadContribution("scenario13.composite", "TestContribution", "src/main/resources/scenario13/");
        //TestUtils.printResults(customBuilder);
        TestUtils.checkProblems(customBuilder);
        checkScenario13Results();
    }

    private void checkScenario13Results() {
        Composite domainComposite = customBuilder.getDomainComposite();

        Component componentD = TestUtils.getComponent(domainComposite, "ComponentD");
        ComponentReference componentRef = null;
        for (ComponentReference reference : componentD.getReferences()) {
            if ("reference3a".equals(reference.getName())) {
                componentRef = reference;
                assertTrue(reference.getBindings().size() == 1);
                assertTrue(reference.getBindings().get(0) instanceof WebServiceBinding);
            }
        }
        assertTrue(componentRef != null);
    }
*/
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.