Package hivemind.test.services

Source Code of hivemind.test.services.TestBuilderFactory

//  Copyright 2004 The Apache Software Foundation
//
// 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 hivemind.test.services;

import hivemind.test.services.impl.StringHolderImpl;

import java.util.Collections;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.ClassResolver;
import org.apache.hivemind.ErrorHandler;
import org.apache.hivemind.Messages;
import org.apache.hivemind.Registry;
import org.apache.hivemind.impl.DefaultClassResolver;
import org.apache.hivemind.impl.DefaultErrorHandler;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.service.impl.BuilderClassResolverFacet;
import org.apache.hivemind.service.impl.BuilderErrorHandlerFacet;
import org.apache.hivemind.service.impl.BuilderFacet;
import org.apache.hivemind.service.impl.BuilderFactory;
import org.apache.hivemind.service.impl.BuilderFactoryLogic;
import org.apache.hivemind.service.impl.BuilderLogFacet;
import org.apache.hivemind.service.impl.BuilderMessagesFacet;
import org.apache.hivemind.service.impl.BuilderParameter;
import org.apache.hivemind.service.impl.BuilderServiceIdFacet;
import org.apache.hivemind.test.ExceptionAwareArgumentsMatcher;
import org.apache.hivemind.test.HiveMindTestCase;
import org.easymock.MockControl;

/**
* Tests for the standard {@link org.apache.hivemind.service.impl.BuilderFactory} service
* and various implementations of {@link org.apache.hivemind.service.impl.BuilderFacet}.
*
* @author Howard Lewis Ship
*/
public class TestBuilderFactory extends HiveMindTestCase
{
    public void testSmartFacet() throws Exception
    {
        Registry r = buildFrameworkRegistry("SmartFacet.xml");

        SimpleService s =
            (SimpleService) r.getService("hivemind.test.services.Simple", SimpleService.class);

        assertEquals(99, s.add(1, 1));
    }

    public void testInitializeMethodFailure() throws Exception
    {
        Registry r = buildFrameworkRegistry("InitializeMethodFailure.xml");

        Runnable s = (Runnable) r.getService("hivemind.test.services.Runnable", Runnable.class);

        interceptLogging("hivemind.test.services.Runnable");

        s.run();

        assertLoggedMessagePattern(
            "Error at .*?: Unable to initialize service hivemind\\.test\\.services\\.Runnable "
                + "\\(by invoking method doesNotExist on "
                + "hivemind\\.test\\.services\\.impl\\.MockRunnable\\):");
    }

    public void testBuilderErrorHandlerFacet()
    {
        MockControl c = newControl(Module.class);
        Module m = (Module) c.getMock();

        ErrorHandler eh = new DefaultErrorHandler();

        m.getErrorHandler();
        c.setReturnValue(eh);

        replayControls();

        BuilderFacet f = new BuilderErrorHandlerFacet();

        Object actual = f.getFacetValue(null, m, null);

        assertSame(eh, actual);

        verifyControls();
    }

    public void testSetErrorHandler() throws Exception
    {
        Registry r = buildFrameworkRegistry("SetErrorHandler.xml");

        ErrorHandlerHolder h =
            (ErrorHandlerHolder) r.getService(
                "hivemind.test.services.SetErrorHandler",
                ErrorHandlerHolder.class);

        assertNotNull(h.getErrorHandler());
    }

    public void testConstructErrorHandler() throws Exception
    {
        Registry r = buildFrameworkRegistry("ConstructErrorHandler.xml");

        ErrorHandlerHolder h =
            (ErrorHandlerHolder) r.getService(
                "hivemind.test.services.ConstructErrorHandler",
                ErrorHandlerHolder.class);

        assertNotNull(h.getErrorHandler());
    }

    public void testBuilderClassResolverFacet()
    {
        ClassResolver cr = new DefaultClassResolver();

        MockControl control = newControl(Module.class);
        Module module = (Module) control.getMock();

        module.getClassResolver();
        control.setReturnValue(cr);

        replayControls();

        BuilderClassResolverFacet fc = new BuilderClassResolverFacet();

        Object result = fc.getFacetValue(null, module, null);

        assertSame(cr, result);

        verifyControls();
    }

    public void testSetClassResolver() throws Exception
    {
        Registry r = buildFrameworkRegistry("SetClassResolver.xml");

        ClassResolverHolder h =
            (ClassResolverHolder) r.getService(
                "hivemind.test.services.SetClassResolver",
                ClassResolverHolder.class);

        assertNotNull(h.getClassResolver());
    }

    public void testConstructClassResolver() throws Exception
    {
        Registry r = buildFrameworkRegistry("ConstructClassResolver.xml");

        ClassResolverHolder h =
            (ClassResolverHolder) r.getService(
                "hivemind.test.services.ConstructClassResolver",
                ClassResolverHolder.class);

        assertNotNull(h.getClassResolver());
    }

    public void testAutowire()
    {
        BuilderFactory factory = new BuilderFactory();
        BuilderParameter p = new BuilderParameter();

        p.setClassName(AutowireTarget.class.getName());
        p.addProperty(new BuilderLogFacet());
        p.addProperty(new BuilderClassResolverFacet());
        p.addProperty(new BuilderMessagesFacet());
        p.addProperty(new BuilderErrorHandlerFacet());
        p.addProperty(new BuilderServiceIdFacet());

        MockControl c = newControl(Module.class);
        Module module = (Module) c.getMock();

        ErrorHandler eh = new DefaultErrorHandler();
        ClassResolver cr = new DefaultClassResolver();

        MockControl messagesControl = newControl(Messages.class);
        Messages messages = (Messages) messagesControl.getMock();

        module.getClassResolver();
        c.setReturnValue(cr);

        module.getClassResolver();
        c.setReturnValue(cr);

        module.getMessages();
        c.setReturnValue(messages);

        module.getErrorHandler();
        c.setReturnValue(eh);

        replayControls();

        AutowireTarget t =
            (AutowireTarget) factory.createCoreServiceImplementation(
                "foo.bar.Baz",
                Runnable.class,
                LogFactory.getLog("hivemind.BuilderFactory"),
                module, Collections.singletonList(p));

        assertSame(eh, t.getErrorHandler());
        assertSame(cr, t.getClassResolver());
        assertSame(messages, t.getMessages());
        assertSame(LogFactory.getLog("foo.bar.Baz"), t.getLog());
        assertEquals("foo.bar.Baz", t.getServiceId());

        verifyControls();
    }

    /**
     * Test that BuilderFactory will invoke the "initializeService" method by default.
     */
    public void testAutowireInitializer()
    {
        BuilderFactory factory = new BuilderFactory();
        BuilderParameter p = new BuilderParameter();

        p.setClassName(InitializeFixture.class.getName());

        MockControl c = newControl(Module.class);
        Module module = (Module) c.getMock();

        module.getClassResolver();
        c.setReturnValue(new DefaultClassResolver());

        replayControls();

        InitializeFixture f =
            (InitializeFixture) factory.createCoreServiceImplementation(
                "foo",
                Object.class,
                null,
                module, Collections.singletonList(p));

        assertEquals("initializeService", f.getMethod());

        verifyControls();
    }

    /**
     * Test that BuilderFactory will invoke the named initializer.
     */
    public void testInitializer()
    {
        BuilderFactory factory = new BuilderFactory();
        BuilderParameter p = new BuilderParameter();

        p.setClassName(InitializeFixture.class.getName());
        p.setInitializeMethod("initializeCustom");

        MockControl c = newControl(Module.class);
        Module module = (Module) c.getMock();

        module.getClassResolver();
        c.setReturnValue(new DefaultClassResolver());

        replayControls();

        InitializeFixture f =
            (InitializeFixture) factory.createCoreServiceImplementation(
                "foo",
                Object.class,
                null,
                module, Collections.singletonList(p));

        assertEquals("initializeCustom", f.getMethod());

        verifyControls();
    }

    public void testAutowireServices()
    {
        MockControl mc = newControl(Module.class);
        Module module = (Module) mc.getMock();

        MockControl lc = newControl(Log.class);
        Log log = (Log) lc.getMock();

        BuilderParameter parameter = new BuilderParameter();

        module.getClassResolver();
        mc.setReturnValue(new DefaultClassResolver());

        StringHolder h = new StringHolderImpl();

        module.getService(StringHolder.class);
        mc.setReturnValue(h);

        log.isDebugEnabled();
        lc.setReturnValue(false);

        replayControls();

        parameter.setClassName(ServiceAutowireTarget.class.getName());
        parameter.setAutowireServices(true);

        BuilderFactoryLogic logic = new BuilderFactoryLogic(module, log, "foo.bar", parameter);

        ServiceAutowireTarget service = (ServiceAutowireTarget) logic.createService();

        assertSame(h, service.getStringHolder());

        verifyControls();
    }

    public void testAutowireServicesFailure()
    {
        MockControl mc = newControl(Module.class);
        Module module = (Module) mc.getMock();

        MockControl ehc = newControl(ErrorHandler.class);
        ErrorHandler eh = (ErrorHandler) ehc.getMock();

        Log log = (Log) newMock(Log.class);

        BuilderParameter parameter = new BuilderParameter();

        module.getClassResolver();
        mc.setReturnValue(new DefaultClassResolver());

        module.getService(StringHolder.class);
        mc.setThrowable(new ApplicationRuntimeException("Simulated failure."));

        module.getErrorHandler();
        mc.setReturnValue(eh);

        eh.error(
            log,
            "Unable to autowire property stringHolder of service foo.bar: Simulated failure.",
            null,
            new ApplicationRuntimeException(""));
        ehc.setMatcher(new ExceptionAwareArgumentsMatcher());

        replayControls();

        parameter.setClassName(ServiceAutowireTarget.class.getName());
        parameter.setAutowireServices(true);

        BuilderFactoryLogic logic = new BuilderFactoryLogic(module, log, "foo.bar", parameter);

        ServiceAutowireTarget service = (ServiceAutowireTarget) logic.createService();

        assertNull(service.getStringHolder());

        verifyControls();
    }

    public void testSetObject() throws Exception
    {
        Registry r = buildFrameworkRegistry("SetObject.xml");

        SetObjectFixture f = (SetObjectFixture) r.getService(SetObjectFixture.class);

        assertNotNull(f.getClassFactory1());
        assertSame(f.getClassFactory1(), f.getClassFactory2());
    }
   
    public void testAutowireService() throws Exception
    {
    Registry r = buildFrameworkRegistry("AutowireService.xml");

    SetObjectFixture f = (SetObjectFixture) r.getService(SetObjectFixture.class);

    assertNotNull(f.getClassFactory1());
    assertSame(f.getClassFactory1(), f.getClassFactory2());
    }
   
   
}
TOP

Related Classes of hivemind.test.services.TestBuilderFactory

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.