blob: df2f0a1de924a8086266f9a0949048ec4f3022aa [file] [log] [blame]
/**
* 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);
}
}
}