| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 org.apache.activemq.maven; |
| |
| import org.apache.activemq.broker.BrokerService; |
| import org.apache.activemq.broker.TransportConnector; |
| import org.apache.maven.model.Build; |
| import org.apache.maven.plugin.logging.Log; |
| import org.apache.maven.project.MavenProject; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.mockito.Mockito; |
| |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Properties; |
| |
| import static org.junit.Assert.*; |
| |
| public class StartBrokerMojoTest { |
| /** |
| * Main object-under-test; configured with mocks and defaults. |
| */ |
| private StartBrokerMojo startBrokerMojo; |
| |
| /** |
| * Secondary object-under-test primarily for setter/getter testing; available for all tests without any |
| * configuration (i.e. raw). |
| */ |
| private StartBrokerMojo startBrokerMojoRaw; |
| |
| //// |
| // MOCKS |
| //// |
| private MavenProject mockMavenProject; |
| private Build mockBuild; |
| private Properties mockMavenProperties; |
| private MavenBrokerManager mockBrokerManager; |
| private XBeanFileResolver mockXbeanFileResolver; |
| private BrokerService mockBrokerService; |
| private Log mockMavenLog; |
| |
| //// |
| // Test Objects |
| //// |
| private Properties systemProperties; |
| private List<TransportConnector> transportConnectorList; |
| private Exception testException; |
| |
| @Before |
| public void setupTest () { |
| // |
| // Create the objects-under-test |
| // |
| this.startBrokerMojo = new StartBrokerMojo(); |
| this.startBrokerMojoRaw = new StartBrokerMojo(); |
| |
| // |
| // Create mocks |
| // |
| this.mockMavenProject = Mockito.mock(MavenProject.class); |
| this.mockBuild = Mockito.mock(Build.class); |
| this.mockMavenProperties = Mockito.mock(Properties.class); |
| this.mockBrokerManager = Mockito.mock(MavenBrokerManager.class); |
| this.mockXbeanFileResolver = Mockito.mock(XBeanFileResolver.class); |
| this.mockBrokerService = Mockito.mock(BrokerService.class); |
| this.mockMavenLog = Mockito.mock(Log.class); |
| |
| // |
| // Prepare other test objects and configure the object-under-test. |
| // |
| this.transportConnectorList = new LinkedList<TransportConnector>(); |
| this.systemProperties = new Properties(); |
| this.testException = new Exception("x-test-exc-x"); |
| |
| this.startBrokerMojo.setBrokerManager(this.mockBrokerManager); |
| this.startBrokerMojo.setxBeanFileResolver(this.mockXbeanFileResolver); |
| this.startBrokerMojo.setProject(this.mockMavenProject); |
| this.startBrokerMojo.setConnectorPropertyNameFormat("x-name-%s"); |
| this.startBrokerMojo.setConfigUri("x-config-uri-x"); |
| this.startBrokerMojo.setFork(false); |
| this.startBrokerMojo.setSystemProperties(this.systemProperties); |
| this.startBrokerMojo.setLog(this.mockMavenLog); |
| |
| // |
| // Define standard mock interactions. |
| // |
| Mockito.when(this.mockBrokerManager.getBroker()).thenReturn(this.mockBrokerService); |
| Mockito.when(this.mockMavenProject.getProperties()).thenReturn(this.mockMavenProperties); |
| Mockito.when(this.mockMavenProject.getBuild()).thenReturn(this.mockBuild); |
| Mockito.when(this.mockBuild.getDirectory()).thenReturn("x-proj-dir-x"); |
| Mockito.when(this.mockBrokerService.getTransportConnectors()).thenReturn(transportConnectorList); |
| } |
| |
| /** |
| * Test the setter and getter for propertyNameFormat. |
| */ |
| @Test |
| public void testSetGetConnectorPropertyNameFormat () { |
| assertEquals(StartBrokerMojo.DEFAULT_CONNECTOR_PROPERTY_NAME_FORMAT, |
| this.startBrokerMojoRaw.getConnectorPropertyNameFormat()); |
| |
| this.startBrokerMojoRaw.setConnectorPropertyNameFormat("x-name-format-x"); |
| assertEquals("x-name-format-x", this.startBrokerMojoRaw.getConnectorPropertyNameFormat()); |
| } |
| |
| /** |
| * Test the setter and getter for configUri. |
| */ |
| @Test |
| public void testSetGetConfigUri () { |
| assertNull(this.startBrokerMojoRaw.getConfigUri()); |
| |
| this.startBrokerMojoRaw.setConfigUri("x-config-uri-x"); |
| assertEquals("x-config-uri-x", this.startBrokerMojoRaw.getConfigUri()); |
| } |
| |
| /** |
| * Test the setter and getter for mavenProject. |
| */ |
| @Test |
| public void testSetGetMavenProject () { |
| assertNull(this.startBrokerMojoRaw.getProject()); |
| |
| this.startBrokerMojoRaw.setProject(this.mockMavenProject); |
| assertSame(this.mockMavenProject, this.startBrokerMojoRaw.getProject()); |
| } |
| |
| /** |
| * Test the setter and getter for fork. |
| */ |
| @Test |
| public void testSetGetFork () { |
| assertFalse(this.startBrokerMojoRaw.isFork()); |
| |
| this.startBrokerMojoRaw.setFork(true); |
| assertTrue(this.startBrokerMojoRaw.isFork()); |
| } |
| |
| /** |
| * Test the setter and getter for skip. |
| */ |
| @Test |
| public void testSetGetSkip () { |
| assertFalse(this.startBrokerMojoRaw.isSkip()); |
| |
| this.startBrokerMojoRaw.setSkip(true); |
| assertTrue(this.startBrokerMojoRaw.isSkip()); |
| } |
| |
| /** |
| * Test the setter and getter for systemProperties. |
| */ |
| @Test |
| public void testSetGetSystemProperties () { |
| assertNull(this.startBrokerMojoRaw.getSystemProperties()); |
| |
| this.startBrokerMojoRaw.setSystemProperties(this.systemProperties); |
| assertSame(this.systemProperties, this.startBrokerMojoRaw.getSystemProperties()); |
| } |
| |
| /** |
| * Test the setter and getter for brokerManager. |
| */ |
| @Test |
| public void testSetGetBrokerManager () { |
| assertNull(this.startBrokerMojoRaw.getBrokerManager()); |
| |
| this.startBrokerMojoRaw.setBrokerManager(this.mockBrokerManager); |
| assertSame(this.mockBrokerManager, this.startBrokerMojoRaw.getBrokerManager()); |
| } |
| |
| /** |
| * Test the setter and getter for xbeanFileResolver. |
| */ |
| @Test |
| public void testSetGetXbeanFileResolver () { |
| assertTrue(this.startBrokerMojoRaw.getxBeanFileResolver() instanceof XBeanFileResolver); |
| assertNotSame(this.mockXbeanFileResolver, this.startBrokerMojoRaw.getxBeanFileResolver()); |
| |
| this.startBrokerMojoRaw.setxBeanFileResolver(this.mockXbeanFileResolver); |
| assertSame(this.mockXbeanFileResolver, this.startBrokerMojoRaw.getxBeanFileResolver()); |
| } |
| |
| /** |
| * Test normal execution of the mojo leads to startup of the broker. |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testExecute () throws Exception { |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockBrokerManager).start(false, "x-config-uri-x"); |
| } |
| |
| /** |
| * Test the registration of a single transport connector URI when a broker with only one connector is started. |
| */ |
| @Test |
| public void testExecuteRegistersTransportConnectorOneUri () throws Exception { |
| this.startBrokerMojo.setProject(this.mockMavenProject); |
| |
| this.createTestTransportConnectors("openwire-client"); |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockMavenProperties).setProperty("x-name-openwire-client", "x-pub-addr-for-openwire-client"); |
| } |
| |
| /** |
| * Test the registration of multiple transport connector URIs when a broker with multiple connectors is started. |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testExecuteRegistersTransportConnectorMultiUri () throws Exception { |
| this.createTestTransportConnectors("connector1", "connector2", "connector3"); |
| |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockMavenProperties).setProperty("x-name-connector1", "x-pub-addr-for-connector1"); |
| Mockito.verify(this.mockMavenProperties).setProperty("x-name-connector2", "x-pub-addr-for-connector2"); |
| Mockito.verify(this.mockMavenProperties).setProperty("x-name-connector3", "x-pub-addr-for-connector3"); |
| } |
| |
| /** |
| * Test handling when TransportConnector.getPublishableConnectString() throws an exception. |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testExceptionOnGetPublishableConnectString () throws Exception { |
| TransportConnector mockTransportConnector = Mockito.mock(TransportConnector.class); |
| |
| Mockito.when(mockTransportConnector.toString()).thenReturn("x-conn-x"); |
| Mockito.when(mockTransportConnector.getPublishableConnectString()).thenThrow(testException); |
| |
| this.transportConnectorList.add(mockTransportConnector); |
| |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockMavenLog).warn("error on obtaining broker connector uri; connector=x-conn-x", |
| this.testException); |
| } |
| |
| /** |
| * Test that an xbean configuration file URI is transformed on use. |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testUseXbeanConfigFile () throws Exception { |
| Mockito.when(this.mockXbeanFileResolver.isXBeanFile("x-config-uri-x")).thenReturn(true); |
| Mockito.when(this.mockXbeanFileResolver.toUrlCompliantAbsolutePath("x-config-uri-x")) |
| .thenReturn("x-transformed-uri-x"); |
| |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockMavenLog).debug("configUri before transformation: x-config-uri-x"); |
| Mockito.verify(this.mockMavenLog).debug("configUri after transformation: x-transformed-uri-x"); |
| } |
| |
| /** |
| * Test that a URI that does not represent an xbean configuration file is not translated. |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testDoNotUseXbeanConfigFile () throws Exception { |
| Mockito.when(this.mockXbeanFileResolver.isXBeanFile("x-config-uri-x")).thenReturn(false); |
| |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockMavenLog, Mockito.times(0)).debug("configUri before transformation: x-config-uri-x"); |
| Mockito.verify(this.mockMavenLog, Mockito.times(0)) |
| .debug("configUri after transformation: x-transformed-uri-x"); |
| } |
| |
| /** |
| * Test that execution of the mojo is skipped if so configured. |
| * |
| * @throws Exception |
| */ |
| @Test |
| public void testSkip () throws Exception { |
| this.startBrokerMojo.setSkip(true); |
| this.startBrokerMojo.execute(); |
| |
| Mockito.verify(this.mockMavenLog).info("Skipped execution of ActiveMQ Broker"); |
| Mockito.verifyNoMoreInteractions(this.mockBrokerManager); |
| } |
| |
| /** |
| * Add mock, test transport connectors with the given names. |
| * |
| * @param connectorNames names of the mock connectors to add for the test. |
| * @throws Exception |
| */ |
| protected void createTestTransportConnectors(String... connectorNames) throws Exception { |
| for ( String oneConnectorName : connectorNames ) { |
| // |
| // Mock the connector |
| // |
| TransportConnector mockConnector = Mockito.mock(TransportConnector.class); |
| |
| // |
| // Return the connector name on getName() and a unique string on getPublishableConnectString(). |
| // |
| Mockito.when(mockConnector.getName()).thenReturn(oneConnectorName); |
| Mockito.when(mockConnector.getPublishableConnectString()).thenReturn("x-pub-addr-for-" + oneConnectorName); |
| |
| // |
| // Add to the test connector list. |
| // |
| this.transportConnectorList.add(mockConnector); |
| } |
| } |
| } |