Package com.alibaba.citrus.service.uribroker.impl

Source Code of com.alibaba.citrus.service.uribroker.impl.URIBrokerServiceTests

/*
* 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.impl;

import static com.alibaba.citrus.test.TestUtil.*;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;

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

import com.alibaba.citrus.service.uribroker.AbstractURIBrokerServiceTests;
import com.alibaba.citrus.service.uribroker.impl.URIBrokerServiceImpl.URIBrokerInfo;
import com.alibaba.citrus.service.uribroker.uri.ContentURIBroker;
import com.alibaba.citrus.service.uribroker.uri.GenericURIBroker;
import com.alibaba.citrus.service.uribroker.uri.URIBroker;
import com.alibaba.citrus.springext.util.ProxyTargetFactory;
import org.junit.Test;

public class URIBrokerServiceTests extends AbstractURIBrokerServiceTests {
    @Test
    public void requestProxy() {
        // 可以接受:no request
        new URIBrokerServiceImpl(null);

        // 不可以接受:非proxy的request
        HttpServletRequest mockRequest = createMock(HttpServletRequest.class);

        try {
            new URIBrokerServiceImpl(mockRequest);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("expects a proxy delegating to a real object, but got an object of type "
                                    + mockRequest.getClass().getName()));
        }

        // 正常request proxy
        assertTrue(getFieldValue(service, "request", HttpServletRequest.class) instanceof ProxyTargetFactory);
    }

    @Test
    public void isRequestAware() throws Exception {
        service = new URIBrokerServiceImpl(null);

        // default
        assertFalse(service.isRequestAware());
        assertNull(getFieldValue(service, "requestAware", Boolean.class));

        // 用default值初始化uribroker,uribroker.isRequestAware == false
        assertBrokerRequestAware(service, false);

        // set value
        service = new URIBrokerServiceImpl(null);

        service.setRequestAware(true);
        assertTrue(service.isRequestAware());

        service.setRequestAware(false);
        assertFalse(service.isRequestAware());

        assertBrokerRequestAware(service, false);
    }

    private void assertBrokerRequestAware(URIBrokerServiceImpl service, boolean expectedRequestAware) throws Exception {
        service.setBrokers(new URIBrokerInfo[] { new URIBrokerInfo("test", null, true, new GenericURIBroker()) });
        service.afterPropertiesSet();

        assertEquals(expectedRequestAware, service.getURIBrokerInternal("test").isRequestAware());
    }

    @Test
    public void getNames() {
        List<String> names = service.getNames();
        assertArrayEquals(new String[] { "link", "link2", "link3", "link4", "linkCharset", "linkWithInterceptor",
                                         "linkWithPathInterceptor", "clink", "clink2", "clink3", "clink4", "servletLink", "servletLink2",
                                         "servletLink3", "scontentLink", "scontentLink2", "scontentLink3", "classicLink", "classicLink2",
                                         "classicLink3", "mylink", "randomized" }, names.toArray(new String[0]));

        try {
            names.add(null); // unmodifiable
            fail();
        } catch (UnsupportedOperationException e) {
        }
    }

    @Test
    public void getExposedNames() {
        List<String> names = service.getExposedNames();
        assertArrayEquals(new String[] { "link2", "linkCharset", "linkWithInterceptor" }, names.toArray(new String[0]));

        try {
            names.add(null); // unmodifiable
            fail();
        } catch (UnsupportedOperationException e) {
        }
    }

    @Test
    public void getURIBroker() {
        URIBroker broker = service.getURIBroker("link2");
        URIBroker parent = service.getURIBrokerInternal("link2");

        assertNotSame(parent, broker);
        assertSame(parent, broker.getParent());
        assertEquals(parent.toString(), broker.toString());

        assertNull(service.getURIBroker("notExist"));
    }

    @Test
    public void init_noBrokers() throws Exception {
        try {
            new URIBrokerServiceImpl(null).afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("brokers"));
        }
    }

    @Test
    public void init_noBroker() throws Exception {
        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { null });

        try {
            service.afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("broker"));
        }

        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { new URIBrokerInfo("name", null, true, null) });

        try {
            service.afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("broker"));
        }
    }

    @Test
    public void init_noBrokerName() throws Exception {
        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { new URIBrokerInfo(null, null, true, new GenericURIBroker()) });

        try {
            service.afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("broker ID"));
        }
    }

    @Test
    public void init_duplicatedBrokerName() throws Exception {
        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { new URIBrokerInfo("name1", null, true, new GenericURIBroker()),
                                                 new URIBrokerInfo("name1", null, true, new ContentURIBroker()) });

        try {
            service.afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("duplicated broker ID: name1"));
        }
    }

    @Test
    public void init_cyclicDepends() throws Exception {
        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { //
                                                 new URIBrokerInfo("b4", "b1", true, new GenericURIBroker()), //
                                                 new URIBrokerInfo("b1", "b2", true, new GenericURIBroker()), //
                                                 new URIBrokerInfo("b2", "b3", true, new GenericURIBroker()), //
                                                 new URIBrokerInfo("b3", "b1", true, new GenericURIBroker()), //
        });

        try {
            service.afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("Cyclic detected: b4->b1->b2->b3->b1"));
        }
    }

    @Test
    public void init_parentNotExists() throws Exception {
        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { //
                                                 new URIBrokerInfo("b4", "b1", true, new GenericURIBroker()), //
        });

        try {
            service.afterPropertiesSet();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("parent \"b1\" not found for broker \"b4\""));
        }
    }

    @Test
    public void init_parentNotSuperclass() throws Exception {
        service = new URIBrokerServiceImpl(null);
        service.setBrokers(new URIBrokerInfo[] { //
                                                 new URIBrokerInfo("b4", "b1", true, new GenericURIBroker()), //
                                                 new URIBrokerInfo("b1", null, true, new ContentURIBroker()), //
        });

        // 可继承非super class
        service.afterPropertiesSet();
    }

    @Test
    public void init_prerendered_initialized() throws Exception {
        for (String name : service.getNames()) {
            URIBroker broker = service.getURIBrokerInternal(name);
            assertTrue(getFieldValue(broker, "initialized", Boolean.class));

            Object renderer = getFieldValue(broker, "renderer", null);
            assertTrue(invokeMethod(renderer, "isServerRendered", null, null, Boolean.class));
        }
    }

    @Test
    public void init_request() {
        for (String name : service.getNames()) {
            URIBroker broker = service.getURIBrokerInternal(name);
            HttpServletRequest requestProxy = getFieldValue(broker, "request", HttpServletRequest.class);

            assertNotNull(requestProxy);
            assertTrue(requestProxy instanceof ProxyTargetFactory);
            assertSame(request, ((ProxyTargetFactory) requestProxy).getObject());
        }
    }

    @Test
    public void dump() throws IOException {
        String s = service.dump();
        assertThat(s, containsRegex("^  \\(GenericURIBroker\\)\\s+link\\s+= http://localhost/"));
        assertThat(s,
                   containsRegex("\\* \\(GenericURIBroker\\)\\s+link2\\s+= http://myuser2:mypass2@myservername2:1234"
                                 + "/aaa/a1/bbb/ccc/ddd\\?aaa=1111&bbb=2222&ccc=3333#myreference2"));
    }
}
TOP

Related Classes of com.alibaba.citrus.service.uribroker.impl.URIBrokerServiceTests

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.