Package com.alibaba.citrus.service.uribroker

Source Code of com.alibaba.citrus.service.uribroker.URIBrokerConfigTests

/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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.
*/

package com.alibaba.citrus.service.uribroker;

import static com.alibaba.citrus.test.TestUtil.*;
import static com.alibaba.citrus.util.CollectionUtil.*;
import static java.util.Collections.*;
import static org.junit.Assert.*;

import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.alibaba.citrus.service.pull.PullService;
import com.alibaba.citrus.service.uribroker.impl.URIBrokerServiceImpl;
import com.alibaba.citrus.service.uribroker.interceptor.URIBrokerInterceptor;
import com.alibaba.citrus.service.uribroker.interceptor.URIBrokerPathInterceptor;
import com.alibaba.citrus.service.uribroker.uri.GenericURIBroker;
import com.alibaba.citrus.service.uribroker.uri.URIBroker;
import com.alibaba.citrus.service.uribroker.uri.URIBroker.URIType;
import com.alibaba.citrus.util.i18n.LocaleUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;

/**
* 测试uribroker的配置。
*
* @author Michael Zhou
*/
public class URIBrokerConfigTests extends AbstractURIBrokerServiceTests {
    private GenericURIBroker uri;

    @Before
    public void init() throws Exception {
        LocaleUtil.setContext(null, "UTF-8");
    }

    @After
    public void dispose() {
        LocaleUtil.resetContext();
    }

    @Test
    public void withoutRequest() {
        ApplicationContext factory = createContext("services.xml", null);
        service = (URIBrokerServiceImpl) factory.getBean("uriBrokerService");

        assertNotNull(service);
        assertNull(getFieldValue(service, "request", HttpServletRequest.class));
        assertSame(service, factory.getBean("uris"));

        uri = (GenericURIBroker) service.getURIBroker("link");
        assertEquals("http:///", uri.toString());
    }

    @Test
    public void link_URIBroker() {
        uri = (GenericURIBroker) service.getURIBroker("link");

        assertEquals(null, uri.getURIType());

        assertEquals("http://localhost/", uri.render());
        assertEquals("http://user:pass@www.alibaba.com/aa/bb",
                     uri.setServerURI("http://user:pass@www.alibaba.com/aa/bb").render());
        assertEquals("http://www.alibaba.com/", uri.setServerName("www.alibaba.com").render());
        assertEquals("http://localhost:8080/", uri.setServerPort(8080).render());
        assertEquals("http://localhost/", uri.setServerPort(80).render());
        assertEquals("https://localhost:80/", uri.setServerScheme("https").render());
        assertEquals("http://localhost/aa/bb", uri.addPath("aa").addPath("bb").render());

        // fork
        GenericURIBroker newUri = (GenericURIBroker) uri.setServerURI("http://www.taobao.com/aa/bb").fork();

        assertEquals("http://www.taobao.com/aa/bb/cc", newUri.addPath("cc").render());
        assertEquals("http://www.taobao.com/aa/bb/dd", newUri.addPath("dd").render());
    }

    @Test
    public void link2_URIBroker() {
        uri = (GenericURIBroker) service.getURIBroker("link2");

        assertEquals(URIType.relative, uri.getURIType());

        assertEquals("http://myuser2:mypass2@myservername2:1234/aaa/a1/bbb/ccc/ddd?"
                     + "aaa=1111&bbb=2222&ccc=3333#myreference2", uri.render());

        assertEquals("http://myuser2:mypass2@myservername2:1234/aaa/a1/bbb/ccc/ddd?"
                     + "aaa=1111&bbb=2222&ccc=3333#myreference2", uri.toString());
    }

    @Test
    public void link3_URIBroker_extendsLink2_overrideWithEmpty() {
        uri = (GenericURIBroker) service.getURIBroker("link3");
        assertEquals(URIType.relative, uri.getURIType());
        assertEquals("https:///aaa/a1/bbb/ccc/ddd?aaa=1111&bbb=2222&ccc=3333", uri.toString());
    }

    @Test
    public void link4_serverURI() {
        uri = (GenericURIBroker) service.getURIBroker("link4");
        assertEquals("http://user:pass@server:1234/a/b/c?a=1&b=+&c=#ref", uri.toString());
        assertEquals("http://user:pass@server:1234/a/b/c", uri.getServerURI());
    }

    @Test
    public void mylink_URIBoker_variableReplacement() {
        uri = (GenericURIBroker) service.getURIBroker("mylink");
        assertEquals("http://www.taobao.com/", uri.render());
    }

    @Test
    public void linkCharset_URLEncoding() {
        // 未指明charset的,使用context中指定的charset进行URL encoding。
        uri = (GenericURIBroker) service.getURIBroker("link");
        assertEquals("http://localhost/?str=%E4%B8%AD%E5%9B%BD", uri.addQueryData("str", "中国").render());

        // 指明charset的,使用指定的charset进行URL encoding。
        uri = (GenericURIBroker) service.getURIBroker("linkCharset");
        assertEquals("http://localhost/?str=%D6%D0%B9%FA", uri.addQueryData("str", "中国").render());
    }

    @Test
    public void linkWithInterceptor_URIBroker() {
        PullService pull = (PullService) factory.getBean("pullService");

        // 确保uri interceptor在render之前没有被执行过
        // 曾经的bug:pull service在logging为debug时,会提前执行uri.interceptors。
        uri = (GenericURIBroker) pull.getContext().pull("linkWithInterceptor");
        assertTrue(uri.addQueryData("path", "hello").render().startsWith("http://www.mydomain.com/hello?path=hello&r="));

        assertTrue(uri.toString().startsWith("http://localhost/"));
        assertTrue(uri.render().startsWith("http://www.mydomain.com/abc?r="));

        // 添加另一个interceptor
        uri.addInterceptor(new URIBrokerInterceptor() {
            public void perform(URIBroker broker) {
                broker.addQueryData("id", 1);
            }
        });

        assertTrue(uri.render().startsWith("http://www.mydomain.com/abc?id=1&r="));
    }

    @Test
    public void linkWithPathInterceptor_URIBroker() {
        uri = (GenericURIBroker) service.getURIBroker("linkWithPathInterceptor");

        assertEquals("http://www.mydomain.com/abc/def", uri.render());

        // 添加另一个interceptor
        uri.addInterceptor(new URIBrokerPathInterceptor() {
            public void perform(URIBroker broker) {
                broker.setServerName("www.mydomain1.com");
            }

            public String perform(URIBroker broker, String path) {
                broker.addQueryData("id", 1);
                return path;
            }
        });

        assertEquals("http://www.mydomain1.com/abc/def?id=1", uri.render());
    }

    @Test
    public void not_requestAware() {
        service = (URIBrokerServiceImpl) factory.getBean("not-requestAware");

        for (String name : service.getNames()) {
            URIBroker uri = service.getURIBroker(name);

            if ("link-request".equals(name)) {
                assertEquals("http://localhost/", uri.render());
            } else {
                assertEquals("http:///", uri.render());
                assertEquals("http://www.alibaba.com:9999/", uri.setServerName("www.alibaba.com").setServerPort(9999)
                                                                .render());
            }
        }
    }

    @Test
    public void standalone() {
        URIBroker broker = (URIBroker) factory.getBean("standalone_uri");
        assertEquals("http://www.taobao.com/hello", broker.toString());
    }

    @Test
    public void noCharset() {
        service = (URIBrokerServiceImpl) factory.getBean("noDefaultCharset");

        URIBroker link1 = service.getURIBroker("a");
        assertEquals(null, link1.getCharset());
        assertEquals("http://localhost/?name=%E4%B8%AD%E5%9B%BD", link1.addQueryData("name", "中国").render()); // from context

        URIBroker link2 = service.getURIBroker("b");
        assertEquals("GBK", link2.getCharset());
        assertEquals("http://localhost/?name=%D6%D0%B9%FA", link2.addQueryData("name", "中国").render());
    }

    @Test
    public void defaultCharset() {
        service = (URIBrokerServiceImpl) factory.getBean("withDefaultCharset");

        URIBroker link1 = service.getURIBroker("x");
        assertEquals("UTF-8", link1.getCharset());
        assertEquals("http://localhost/?name=%E4%B8%AD%E5%9B%BD", link1.addQueryData("name", "中国").render());

        URIBroker link2 = service.getURIBroker("y");
        assertEquals("GBK", link2.getCharset());
        assertEquals("http://localhost/?name=%D6%D0%B9%FA", link2.addQueryData("name", "中国").render());
    }

    @Test
    public void uriBean() {
        service = (URIBrokerServiceImpl) factory.getBean("uri_bean");

        URIBroker bean = service.getURIBroker("mybean");
        assertEquals("https://myserver/aa/bb/cc", bean.render());
    }

    @Test
    public void importAndOverride() {
        service = (URIBrokerServiceImpl) factory.getBean("import");
        URIBrokerServiceImpl imported = (URIBrokerServiceImpl) factory.getBean("uris");

        // check exposed names
        List<String> importedNames = createArrayList(imported.getExposedNames());
        List<String> names = createArrayList(service.getExposedNames());

        names.add("link2");

        sort(importedNames);
        sort(names);

        assertEquals(importedNames, names);

        // check all names
        importedNames = createArrayList(imported.getNames());
        names = createArrayList(service.getNames());

        importedNames.add("newlink");

        sort(importedNames);
        sort(names);

        assertEquals(importedNames, names);

        // check uris
        for (String name : names) {
            URIBroker uri = service.getURIBroker(name);
            URIBroker importedUri = imported.getURIBroker(name);

            if (uri != null) {
                uri = uri.getParent();
                assertFalse(uri.isAutoReset());
            }

            if (importedUri != null) {
                importedUri = importedUri.getParent();
                assertFalse(importedUri.isAutoReset());
            }

            if ("link2".equals(name)) {
                assertEquals("http:///", uri.toString());
                assertEquals(
                        "http://myuser2:mypass2@myservername2:1234/aaa/a1/bbb/ccc/ddd?aaa=1111&bbb=2222&ccc=3333#myreference2",
                        importedUri.toString());
            } else if ("newlink".equals(name)) {
                assertEquals("http://www.taobao.com/newlink", uri.toString());
                assertNull(importedUri);
            } else {
                assertNotNull(uri);
                assertSame(importedUri, uri);
            }
        }
    }
}
TOP

Related Classes of com.alibaba.citrus.service.uribroker.URIBrokerConfigTests

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.