Package org.milyn.smooks.camel.routing

Source Code of org.milyn.smooks.camel.routing.BeanRouterTest$MyBean

/*
* Milyn - Copyright (C) 2006 - 2010
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License (version 2.1) as published
* by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE.
*
* See the GNU Lesser General Public License for more details:
* http://www.gnu.org/licenses/lgpl.txt
*/
package org.milyn.smooks.camel.routing;

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import java.io.IOException;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Before;
import org.junit.Test;
import org.milyn.Smooks;
import org.milyn.SmooksException;
import org.milyn.cdr.SmooksResourceConfiguration;
import org.milyn.cdr.annotation.Configurator;
import org.milyn.container.ExecutionContext;
import org.milyn.container.MockApplicationContext;
import org.milyn.container.standalone.StandaloneExecutionContext;
import org.milyn.javabean.context.BeanContext;
import org.milyn.javabean.lifecycle.BeanContextLifecycleEvent;
import org.milyn.javabean.lifecycle.BeanLifecycle;

/**
* Unit test for {@link BeanRouter}.
*
* @author Daniel Bevenius
*
*/
public class BeanRouterTest extends CamelTestSupport
{
  private static final String END_POINT_URI = "mock://beanRouterUnitTest";
  private static final String BEAN_ID = "testBeanId";
  private static final String HEADER_ID = "testHeaderId";
 
  private StandaloneExecutionContext smooksExecutionContext;
  private MockEndpoint endpoint;
  private MyBean myBean = new MyBean("bajja");
  private BeanContext beanContext;
 
  @Test
    public void visitAfter() throws Exception
    {
      endpoint.setExpectedMessageCount(1);
      endpoint.expectedBodiesReceived(myBean);
      createBeanRouter(BEAN_ID, END_POINT_URI).visitAfter(null, smooksExecutionContext);
      endpoint.assertIsSatisfied();
    }

    @Test (expected = SmooksException.class)
    public void visitAfterWithMissingBeanInSmookBeanContext() throws SmooksException, IOException
    {
      when(beanContext.getBean(BEAN_ID)).thenReturn(null);
      createBeanRouter(BEAN_ID, END_POINT_URI).visitAfter(null, smooksExecutionContext);
    }

    @Test
    public void routeUsingOnlyBeanId() throws Exception
    {
      endpoint.setExpectedMessageCount(1);
      endpoint.expectedBodiesReceived(myBean);

      final Smooks smooks = new Smooks();
        final ExecutionContext execContext = smooks.createExecutionContext();
       
      BeanRouter beanRouter = createBeanRouter(null, BEAN_ID, END_POINT_URI);
      beanRouter.executeExecutionLifecycleInitialize(execContext);
        execContext.getBeanContext().addBean(BEAN_ID, myBean);

        // Force an END event
        execContext.getBeanContext().notifyObservers(new BeanContextLifecycleEvent(execContext,
                null, BeanLifecycle.END_FRAGMENT, execContext.getBeanContext().getBeanId(BEAN_ID), myBean));

      endpoint.assertIsSatisfied();
    }

    @Test
    public void routeBeanWithHeaders() throws Exception
    {
      endpoint.setExpectedMessageCount(1);
      endpoint.expectedHeaderReceived(HEADER_ID, myBean);

      final Smooks smooks = new Smooks();
        final ExecutionContext execContext = smooks.createExecutionContext();
       
      BeanRouter beanRouter = createBeanRouter(null, BEAN_ID, END_POINT_URI);
      beanRouter.executeExecutionLifecycleInitialize(execContext);
        execContext.getBeanContext().addBean(BEAN_ID, myBean);
        execContext.getBeanContext().addBean(HEADER_ID, myBean);

        // Force an END event
        execContext.getBeanContext().notifyObservers(new BeanContextLifecycleEvent(execContext,
                null, BeanLifecycle.END_FRAGMENT, execContext.getBeanContext().getBeanId(BEAN_ID), myBean));

      endpoint.assertIsSatisfied();
    }
   
    @Before
  public void setupSmooksExeceutionContext() throws Exception
  {
    endpoint = createAndConfigureMockEndpoint(END_POINT_URI);
    Exchange exchange = createExchangeAndSetFromEndpoint(endpoint);
    BeanContext beanContext = createBeanContextAndSetBeanInContext(BEAN_ID, myBean);
   
    smooksExecutionContext = createStandaloneExecutionContext();
    setExchangeAsAttributeInExecutionContext(exchange);
    makeExecutionContextReturnBeanContext(beanContext);
  }
 
  private MockEndpoint createAndConfigureMockEndpoint(String endpointUri) throws Exception
  {
    MockEndpoint mockEndpoint = new MockEndpoint(endpointUri);
    mockEndpoint.setCamelContext(context);
    context.addEndpoint(endpointUri, mockEndpoint);
    return mockEndpoint;
  }

  private Exchange createExchangeAndSetFromEndpoint(MockEndpoint endpoint)
  {
    Exchange exchange = endpoint.createExchange();
    exchange.setFromEndpoint(endpoint);
    return exchange;
  }

  private BeanContext createBeanContextAndSetBeanInContext(String beanId, Object bean)
  {
    beanContext = mock(BeanContext.class);
    when(beanContext.getBean(beanId)).thenReturn(bean);
    return beanContext;
  }

  private StandaloneExecutionContext createStandaloneExecutionContext()
  {
    return mock(StandaloneExecutionContext.class);
  }

  private void setExchangeAsAttributeInExecutionContext(Exchange exchange)
  {
    when(smooksExecutionContext.getAttribute(Exchange.class)).thenReturn(exchange);
  }
 
  private void makeExecutionContextReturnBeanContext(BeanContext beanContext)
  {
    when(smooksExecutionContext.getBeanContext()).thenReturn(beanContext);
  }
 
  private BeanRouter createBeanRouter(String beanId, String endpointUri)
  {
      return createBeanRouter("dummySelector", beanId, endpointUri);
  }
 
  private BeanRouter createBeanRouter(String selector, String beanId, String endpointUri)
  {
    BeanRouter beanRouter = new BeanRouter();
    SmooksResourceConfiguration resourceConfig = new SmooksResourceConfiguration();
    if (selector != null)
    {
      resourceConfig.setSelector(selector);
    }
    resourceConfig.setParameter("beanId", beanId);
    resourceConfig.setParameter("toEndpoint", endpointUri);
   
    MockApplicationContext appContext = new MockApplicationContext();
    appContext.setAttribute(CamelContext.class, context);
    Configurator.configure(beanRouter, resourceConfig, appContext);
   
    return beanRouter;
  }
 
  public static class MyBean
  {
    private final String name;

    public MyBean(String name)
    {
      this.name = name;
    }
   
    public String getName()
    {
      return name;
    }
  }
}
TOP

Related Classes of org.milyn.smooks.camel.routing.BeanRouterTest$MyBean

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.