package com.epam.wilma.service.client; /*========================================================================== Copyright 2013-2017 EPAM Systems This file is part of Wilma. Wilma is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Wilma 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Wilma. If not, see <http://www.gnu.org/licenses/>. ===========================================================================*/ import com.epam.wilma.service.application.WilmaApplication; import com.epam.wilma.service.configuration.LocalhostBlockingConfiguration; import com.epam.wilma.service.configuration.MessageLoggingConfiguration; import com.epam.wilma.service.configuration.OperationConfiguration; import com.epam.wilma.service.configuration.StubConfiguration; import com.epam.wilma.service.configuration.stub.WilmaStub; import com.epam.wilma.service.domain.LocalhostControlStatus; import com.epam.wilma.service.domain.MessageLoggingControlStatus; import com.epam.wilma.service.domain.OperationMode; import com.epam.wilma.service.domain.StubConfigOrder; import com.epam.wilma.service.domain.StubConfigStatus; import com.epam.wilma.service.resource.Upload; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import java.io.File; import java.util.Properties; import static com.epam.wilma.service.client.WilmaService.WILMA_HOST_KEY; import static com.epam.wilma.service.client.WilmaService.WILMA_INTERNAL_PORT_KEY; import static com.epam.wilma.service.domain.MessageLoggingControlStatus.OFF; import static com.epam.wilma.service.domain.MessageLoggingControlStatus.ON; import static com.epam.wilma.service.domain.OperationMode.PROXY; import static com.epam.wilma.service.domain.OperationMode.STUB; import static com.epam.wilma.service.domain.OperationMode.WILMA; import static com.epam.wilma.service.domain.StubConfigOrder.DOWN; import static com.epam.wilma.service.domain.StubConfigOrder.UP; import static com.epam.wilma.service.domain.StubConfigStatus.DISABLED; import static com.epam.wilma.service.domain.StubConfigStatus.ENABLED; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; /** * Unit test for {@link WilmaService}. * * @author Tamas_Pinter * */ public class WilmaServiceTest { private static final String HOST = "host"; private static final String PORT = "1"; private static final String GROUP_NAME = "testGroup"; private static final String FILE_NAME = "testFile"; private static final File MOCK_FILE = mock(File.class); @Mock private WilmaApplication wilmaApplication; @Mock private MessageLoggingConfiguration messageLoggingConfiguration; @Mock private OperationConfiguration operationConfiguration; @Mock private LocalhostBlockingConfiguration localhostBlockingConfiguration; @Mock private StubConfiguration stubConfiguration; @Mock private WilmaStub wilmaStub; @Mock private Upload fileUpload; @Spy private Properties properties = createWilmaProperties(); @InjectMocks private WilmaService wilmaService; @BeforeMethod public void init() { MockitoAnnotations.initMocks(this); } @Test(expectedExceptions = IllegalArgumentException.class) public void shouldThrowExceptionWhenConfigIsMissing() { new WilmaService(null); } @Test(expectedExceptions = IllegalArgumentException.class) public void shouldThrowExceptionWhenConfigIsInvalid() { Properties properties = new Properties(); properties.put(WILMA_HOST_KEY, HOST); properties.put(WILMA_INTERNAL_PORT_KEY, Long.valueOf("1")); new WilmaService(properties); } @Test public void testGetActualLoadInformation() { wilmaService.getActualLoadInformation(); verify(wilmaApplication).getActualLoadInformation(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testShutdownApplication() { wilmaService.shutdownApplication(); verify(wilmaApplication).shutdownApplication(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testGetMessageLoggingStatus() { wilmaService.getMessageLoggingStatus(); verify(messageLoggingConfiguration).getMessageLoggingStatus(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @DataProvider(name = "messageLoggingControls") public static Object[][] messageLoggingControls() { return new Object[][] {{ON}, {OFF}}; } @Test(dataProvider = "messageLoggingControls") public void testSetMessageLoggingStatus(MessageLoggingControlStatus control) { wilmaService.setMessageLoggingStatus(control); verify(messageLoggingConfiguration).setMessageLoggingStatus(control); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testGetOperationMode() { wilmaService.getOperationMode(); verify(operationConfiguration).getOperationMode(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @DataProvider(name = "operationModes") public static Object[][] operationModes() { return new Object[][] {{WILMA}, {STUB}, {PROXY}}; } @Test(dataProvider = "operationModes") public void testSetOperationMode(OperationMode mode) { wilmaService.setOperationMode(mode); verify(operationConfiguration).setOperationMode(mode); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testGetLocalhostBlockingStatus() { wilmaService.getLocalhostBlockingStatus(); verify(localhostBlockingConfiguration).getLocalhostBlockingStatus(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @DataProvider(name = "localhostControls") public static Object[][] localhostControls() { return new Object[][] {{LocalhostControlStatus.ON}, {LocalhostControlStatus.OFF}}; } @Test(dataProvider = "localhostControls") public void testSetOperationMode(LocalhostControlStatus control) { wilmaService.setLocalhostBlockingStatus(control); verify(localhostBlockingConfiguration).setLocalhostBlockingStatus(control); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testGetStubConfigInformation() { wilmaService.getStubConfigInformation(); verify(stubConfiguration).getStubConfigInformation(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @DataProvider(name = "stubConfigStatus") public static Object[][] stubConfigStatus() { return new Object[][] {{ENABLED}, {DISABLED}}; } @Test(dataProvider = "stubConfigStatus") public void testChangeStubConfigStatus(StubConfigStatus status) { wilmaService.changeStubConfigStatus(GROUP_NAME, status); verify(stubConfiguration).setStubConfigStatus(GROUP_NAME, status); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @DataProvider(name = "stubConfigOrders") public static Object[][] stubConfigOrders() { return new Object[][] {{UP}, {DOWN}}; } @Test(dataProvider = "stubConfigOrders") public void testChangeStubConfigStatus(StubConfigOrder order) { wilmaService.changeStubConfigOrder(GROUP_NAME, order); verify(stubConfiguration).setStubConfigOrder(GROUP_NAME, order); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testDropStubConfig() { wilmaService.dropStubConfig(GROUP_NAME); verify(stubConfiguration).dropStubConfig(GROUP_NAME); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testPersistActualStubConfig() { wilmaService.persistActualStubConfig(); verify(stubConfiguration).persistActualStubConfig(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testGetVersionInformation() { wilmaService.getVersionInformation(); verify(wilmaApplication).getVersionInformation(); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testCallGetService() { wilmaService.callGetService("blah"); verify(wilmaApplication).callGetService("blah"); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testUploadConditionChecker() { wilmaService.uploadConditionChecker(FILE_NAME, MOCK_FILE); verify(fileUpload).uploadConditionChecker(FILE_NAME, MOCK_FILE); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testUploadTemplate() { wilmaService.uploadTemplate(FILE_NAME, MOCK_FILE); verify(fileUpload).uploadTemplate(FILE_NAME, MOCK_FILE); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testUploadTemplateFormatter() { wilmaService.uploadTemplateFormatter(FILE_NAME, MOCK_FILE); verify(fileUpload).uploadTemplateFormatter(FILE_NAME, MOCK_FILE); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testUploadStubConfigurationFile() { wilmaService.uploadStubConfiguration(FILE_NAME, MOCK_FILE); verify(fileUpload).uploadStubConfiguration(FILE_NAME, MOCK_FILE); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } @Test public void testUploadStubConfigurationString() { given(wilmaStub.toString()).willReturn(FILE_NAME); wilmaService.uploadStubConfiguration(wilmaStub); verify(fileUpload).uploadStubConfiguration(wilmaStub); verifyNoMoreInteractions(wilmaApplication, messageLoggingConfiguration, operationConfiguration, localhostBlockingConfiguration, stubConfiguration, fileUpload); } private Properties createWilmaProperties() { Properties properties = new Properties(); properties.put(WILMA_HOST_KEY, HOST); properties.put(WILMA_INTERNAL_PORT_KEY, PORT); return properties; } }