Package org.talend.esb.servicelocator.client

Source Code of org.talend.esb.servicelocator.client.SimpleEndpointTest$SetNodeMatcher

/*
* #%L
* Service Locator Client for CXF
* %%
* Copyright (C) 2011 - 2012 Talend Inc.
* %%
* Licensed 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.
* #L%
*/
package org.talend.esb.servicelocator.client;

import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.xml.HasXPath.hasXPath;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.talend.esb.DomMother.newDocument;
import static org.talend.esb.servicelocator.NamespaceContextImpl.WSA_SL_NS_CONTEXT;
import static org.talend.esb.servicelocator.TestContent.createContent;
import static org.talend.esb.servicelocator.TestContent.createContentInvalidEPR;
import static org.talend.esb.servicelocator.TestValues.ENDPOINT_1;
import static org.talend.esb.servicelocator.TestValues.LAST_TIME_STARTED;
import static org.talend.esb.servicelocator.TestValues.LAST_TIME_STOPPED;
import static org.talend.esb.servicelocator.TestValues.NAME_1;
import static org.talend.esb.servicelocator.TestValues.PROPERTIES;
import static org.talend.esb.servicelocator.TestValues.SERVICE_QNAME_1;
import static org.talend.esb.servicelocator.TestValues.VALUE_1;
import static org.talend.esb.servicelocator.TestValues.VALUE_2;

import javax.xml.transform.dom.DOMResult;

import org.easymock.EasyMock;
import org.easymock.IArgumentMatcher;
import org.junit.Before;
import org.junit.Test;
import org.talend.esb.servicelocator.client.Endpoint.PropertiesTransformer;
import org.talend.esb.servicelocator.client.internal.EndpointTransformerImpl;
import org.talend.esb.servicelocator.client.internal.endpoint.BindingType;
import org.talend.esb.servicelocator.client.internal.endpoint.TransportType;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class SimpleEndpointTest {

    private  byte[] content;

    private SLPropertiesImpl props;

    private SimpleEndpoint slEndpoint;

    @Before
    public void setUp() throws Exception {
        props = new SLPropertiesImpl();
        props.addProperty(NAME_1, VALUE_1, VALUE_2);

        content = createContent(
                ENDPOINT_1,
                LAST_TIME_STARTED,
                LAST_TIME_STOPPED,
                BindingType.JAXRS,
                TransportType.HTTPS,
                props);
       
        slEndpoint = new EndpointTransformerImpl().toSLEndpoint(SERVICE_QNAME_1, content, false);
    }
   
    @Test
    public void forService() {
        assertEquals(SERVICE_QNAME_1, slEndpoint.forService());
    }

    @Test
    public void getAddress() {
        assertEquals(ENDPOINT_1, slEndpoint.getAddress());
    }

    @Test
    public void getBinding() {
        assertEquals(org.talend.esb.servicelocator.client.BindingType.JAXRS, slEndpoint.getBinding());
    }
   
    @Test
    public void getBindingNoneExplicitlyDefined() {
        slEndpoint = new SimpleEndpoint(SERVICE_QNAME_1, ENDPOINT_1);
        assertEquals(org.talend.esb.servicelocator.client.BindingType.SOAP11, slEndpoint.getBinding());
    }

    @Test
    public void getTransport() {
        assertEquals(org.talend.esb.servicelocator.client.TransportType.HTTPS, slEndpoint.getTransport());
    }

    @Test
    public void getTransportNoneExplicitlyDefined() {
        slEndpoint = new SimpleEndpoint(SERVICE_QNAME_1, ENDPOINT_1);
        assertEquals(org.talend.esb.servicelocator.client.TransportType.HTTP, slEndpoint.getTransport());
    }

//    @Test
//    public void getLastTimeStarted() {
//        assertEquals(LAST_TIME_STARTED, slEndpoint.getLastTimeStarted());
//    }

//    @Test
//    public void getLastTimeStopped() {
//        assertEquals(LAST_TIME_STOPPED, slEndpoint.getLastTimeStopped());
//    }

    @Test
    public void getProperties() {
        SLProperties props = slEndpoint.getProperties();
        assertTrue(props.hasProperty(NAME_1));
        assertThat(props.getValues(NAME_1), containsInAnyOrder(VALUE_1, VALUE_2));
    }
   
    @Test
    public void getAddressInvalidContent() {
        slEndpoint = new EndpointTransformerImpl().toSLEndpoint(SERVICE_QNAME_1, createContentInvalidEPR(), true);
       
        assertNull(slEndpoint.getAddress());
    }

    @Test
    public void getPropertiesNotDefinedInContent() {
        content = createContent(ENDPOINT_1, LAST_TIME_STARTED, LAST_TIME_STOPPED, null);
        slEndpoint = new EndpointTransformerImpl().toSLEndpoint(SERVICE_QNAME_1, content, true);
       
        SLProperties properties = slEndpoint.getProperties();
        assertThat(properties.getPropertyNames(), hasSize(0));
    }

    @Test
    public void writeEndpointReferenceTo() throws Exception {
        PropertiesTransformer transformer = createNiceMock(PropertiesTransformer.class);
        replay(transformer);
        SimpleEndpoint epp = new SimpleEndpoint(SERVICE_QNAME_1, ENDPOINT_1);

        DOMResult domResult = new DOMResult();
        epp.writeEndpointReferenceTo(domResult, transformer);
        Document doc = (Document) domResult.getNode();
        Element root = doc.getDocumentElement();

        assertThat(root,
            hasXPath("/wsa:EndpointReference/wsa:Address/text()", WSA_SL_NS_CONTEXT,
                equalTo(ENDPOINT_1)));
        assertThat(root,
                not(hasXPath("/wsa:EndpointReference/wsa:Metadata/sl:ServiceLocatorProperties",
                    WSA_SL_NS_CONTEXT)));
    }

    @Test
    public void writeEndpointReferenceToWithPropertiesSpecified() throws Exception {
        PropertiesTransformer transformer = createMock(PropertiesTransformer.class);
        transformer.writePropertiesTo(eq(PROPERTIES), anyDOMResult());
        replay(transformer);

        SimpleEndpoint epp = new SimpleEndpoint(SERVICE_QNAME_1, ENDPOINT_1, PROPERTIES);

        DOMResult domResult = new DOMResult();
        epp.writeEndpointReferenceTo(domResult, transformer);
        Document doc = (Document) domResult.getNode();
        Element root = doc.getDocumentElement();

        assertThat(root,
                hasXPath("/wsa:EndpointReference/wsa:Metadata/sl:ServiceLocatorProperties",
                    WSA_SL_NS_CONTEXT));
       
        verify (transformer);
    }

    public static DOMResult anyDOMResult() {
        EasyMock.reportMatcher(new SetNodeMatcher());
        return null;
    }

    public static class SetNodeMatcher implements IArgumentMatcher {

        @Override
        public boolean matches(Object argument) {
            if (argument != null && argument instanceof DOMResult) {
                DOMResult result = (DOMResult) argument;
                Element epr = newDocument("http://talend.org/schemas/esb/locator/content/20011/11",
                        "ServiceLocatorProperties");

                result.setNode(epr.getParentNode());
                return true;
            }
            return false;
        }

        @Override
        public void appendTo(StringBuffer buffer) {
        }
    }

}
TOP

Related Classes of org.talend.esb.servicelocator.client.SimpleEndpointTest$SetNodeMatcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.