/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.tck.internal.client; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.core.Is.is; import static org.junit.Assert.assertThat; import static org.mockito.Answers.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.mule.runtime.core.api.MessageExchangePattern.ONE_WAY; import static org.mule.runtime.core.api.MessageExchangePattern.REQUEST_RESPONSE; import static org.mule.runtime.core.api.client.SimpleOptionsBuilder.newOptions; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.core.api.client.SimpleOptionsBuilder; import org.mule.runtime.core.api.processor.Processor; import org.mule.functional.client.TestConnectorConfig; import org.mule.functional.client.TestConnectorMessageProcessorProvider; import org.mule.tck.junit4.AbstractMuleTestCase; import org.junit.Before; import org.junit.Test; public class TestConnectorMessageProcessorProviderTestCase extends AbstractMuleTestCase { private static final String PATH_URL = "test://path"; private static final String ANOTHER_PATH = "test://another"; private final MuleContext muleContext = mock(MuleContext.class, RETURNS_DEEP_STUBS.get()); private final TestConnectorMessageProcessorProvider messageProcessorProvider = new TestConnectorMessageProcessorProvider(); private final TestConnectorConfig connectorConfig = new TestConnectorConfig(); @Before public void setUp() throws Exception { when(muleContext.getRegistry().get(TestConnectorConfig.DEFAULT_CONFIG_ID)).thenReturn(connectorConfig); messageProcessorProvider.setMuleContext(muleContext); } @Test public void sameConfigReturnsSameInstanceUsingGenericOptions() throws Exception { final Processor messageProcessor = messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), REQUEST_RESPONSE); assertThat(messageProcessor, is(not(nullValue()))); assertThat(messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), REQUEST_RESPONSE), is(messageProcessor)); } @Test public void sameConfigReturnsDifferentInstanceUsingDifferentGenericOptions() throws Exception { final Processor messageProcessor1 = messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), REQUEST_RESPONSE); final Processor messageProcessor2 = messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().responseTimeout(1000).build(), REQUEST_RESPONSE); assertThat(messageProcessor2, not(is(messageProcessor1))); } @Test public void differentPathReturnsDifferentOperations() throws Exception { final Processor messageProcessor1 = messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), ONE_WAY); final Processor messageProcessor2 = messageProcessorProvider.getMessageProcessor(ANOTHER_PATH, newOptions().build(), ONE_WAY); assertThat(messageProcessor2, not(is(messageProcessor1))); } @Test public void differentExchangePatternsReturnsDifferentOperations() throws Exception { final Processor messageProcessor1 = messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), ONE_WAY); final Processor messageProcessor2 = messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), REQUEST_RESPONSE); assertThat(messageProcessor2, not(is(messageProcessor1))); } @Test public void disposeInvalidatesCache() throws Exception { final Processor messageProcessor1 = messageProcessorProvider.getMessageProcessor(PATH_URL, SimpleOptionsBuilder.newOptions().build(), REQUEST_RESPONSE); messageProcessorProvider.dispose(); final Processor messageProcessor2 = messageProcessorProvider.getMessageProcessor(PATH_URL, SimpleOptionsBuilder.newOptions().build(), REQUEST_RESPONSE); assertThat(messageProcessor2, not(is(messageProcessor1))); } @Test(expected = IllegalArgumentException.class) public void doNotAllowNullUrl() throws Exception { messageProcessorProvider.getMessageProcessor(null, newOptions().build(), ONE_WAY); } @Test(expected = IllegalArgumentException.class) public void doNotAllowNullOptions() throws Exception { messageProcessorProvider.getMessageProcessor(PATH_URL, null, ONE_WAY); } @Test(expected = IllegalArgumentException.class) public void doNotAllowNullExchangePattern() throws Exception { messageProcessorProvider.getMessageProcessor(PATH_URL, newOptions().build(), null); } }