/* * Copyright 2016-2017 the original author or authors. * * 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 org.springframework.amqp.rabbit.logback; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import org.junit.Test; import org.springframework.amqp.rabbit.connection.RabbitConnectionFactoryBean; import org.springframework.core.io.ClassPathResource; import org.springframework.test.util.ReflectionTestUtils; /** * * @author Stephen Oakey * * @since 2.0 */ public class AmqpAppenderTests { @Test public void testDefaultConfiguration() { AmqpAppender appender = new AmqpAppender(); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verifyDefaultHostProperties(bean); verify(bean, never()).setUseSSL(anyBoolean()); } @Test public void testCustomHostInformation() { AmqpAppender appender = new AmqpAppender(); String host = "rabbitmq.com"; int port = 5671; String username = "user"; String password = "password"; String virtualHost = "vhost"; appender.setHost(host); appender.setPassword(password); appender.setPort(port); appender.setUsername(username); appender.setVirtualHost(virtualHost); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verify(bean).setHost(host); verify(bean).setPort(port); verify(bean).setUsername(username); verify(bean).setPassword(password); verify(bean).setVirtualHost(virtualHost); } @Test public void testDefaultSslConfiguration() { AmqpAppender appender = new AmqpAppender(); appender.setUseSsl(true); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verifyDefaultHostProperties(bean); verify(bean).setUseSSL(eq(true)); verify(bean, never()).setSslAlgorithm(anyString()); } @Test public void testSslConfigurationWithAlgorithm() { AmqpAppender appender = new AmqpAppender(); appender.setUseSsl(true); String sslAlgorithm = "TLSv2"; appender.setSslAlgorithm(sslAlgorithm); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verifyDefaultHostProperties(bean); verify(bean).setUseSSL(eq(true)); verify(bean).setSslAlgorithm(eq(sslAlgorithm)); } @Test public void testSslConfigurationWithSslPropertiesResource() { AmqpAppender appender = new AmqpAppender(); appender.setUseSsl(true); String path = "ssl.properties"; appender.setSslPropertiesLocation("classpath:" + path); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verifyDefaultHostProperties(bean); verify(bean).setUseSSL(eq(true)); verify(bean).setSslPropertiesLocation(eq(new ClassPathResource(path))); verify(bean, never()).setKeyStore(anyString()); verify(bean, never()).setKeyStorePassphrase(anyString()); verify(bean, never()).setKeyStoreType(anyString()); verify(bean, never()).setTrustStore(anyString()); verify(bean, never()).setTrustStorePassphrase(anyString()); verify(bean, never()).setTrustStoreType(anyString()); } @Test public void testSslConfigurationWithKeyAndTrustStore() { AmqpAppender appender = new AmqpAppender(); appender.setUseSsl(true); String keyStore = "file:/path/to/client/keycert.p12"; String keyStorePassphrase = "secret"; String keyStoreType = "foo"; String trustStore = "file:/path/to/client/truststore"; String trustStorePassphrase = "secret2"; String trustStoreType = "bar"; appender.setKeyStore(keyStore); appender.setKeyStorePassphrase(keyStorePassphrase); appender.setKeyStoreType(keyStoreType); appender.setTrustStore(trustStore); appender.setTrustStorePassphrase(trustStorePassphrase); appender.setTrustStoreType(trustStoreType); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verifyDefaultHostProperties(bean); verify(bean).setUseSSL(eq(true)); verify(bean, never()).setSslPropertiesLocation(any()); verify(bean).setKeyStore(keyStore); verify(bean).setKeyStorePassphrase(keyStorePassphrase); verify(bean).setKeyStoreType(keyStoreType); verify(bean).setTrustStore(trustStore); verify(bean).setTrustStorePassphrase(trustStorePassphrase); verify(bean).setTrustStoreType(trustStoreType); } @Test public void testSslConfigurationWithKeyAndTrustStoreDefaultTypes() { AmqpAppender appender = new AmqpAppender(); appender.setUseSsl(true); RabbitConnectionFactoryBean bean = mock(RabbitConnectionFactoryBean.class); appender.configureRabbitConnectionFactory(bean); verifyDefaultHostProperties(bean); verify(bean).setUseSSL(eq(true)); verify(bean).setKeyStoreType("JKS"); verify(bean).setTrustStoreType("JKS"); } @Test public void testStartWithInvalidConnectionConfiguration() { AmqpAppender appender = new AmqpAppender(); appender.setUseSsl(true); appender.setKeyStore("foo"); appender.start(); assertFalse((boolean) ReflectionTestUtils.getField(appender, "started")); } private void verifyDefaultHostProperties(RabbitConnectionFactoryBean bean) { verify(bean).setHost("localhost"); verify(bean).setPort(5672); verify(bean).setUsername("guest"); verify(bean).setPassword("guest"); verify(bean).setVirtualHost("/"); } }