/*************************************************************************** * Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved. * 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 com.vmware.bdd.aop.collection; import com.vmware.bdd.manager.collection.*; import com.vmware.bdd.service.collection.ICollectionInitializerService; import com.vmware.bdd.service.collection.impl.FakeCollectionInitializerService; import com.vmware.bdd.utils.PropertiesUtil; import mockit.Mock; import mockit.MockClass; import mockit.Mockit; import org.aspectj.lang.JoinPoint; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.JobExecution; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import org.aspectj.lang.Signature; import java.util.Map; import java.util.Properties; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class TestJobListenerAdvice { private CollectionDriverManager collectionDriverManager; private static CollectionDriver collectionDriver; private ICollectionInitializerService collectionInitializerService; private CollectOperationManager collectOperationManager; private DataContainer dataContainer; private JobListenerAdvice jobListenerAdvice; private JoinPoint joinPoint; private JobExecution jobExecution; private ExitStatus exitStatus; private static File file; private static String FILE_PATH = "/tmp/test.properties"; @MockClass(realClass = PropertiesUtil.class) public static class MockPropertiesUtil { PropertiesUtil propertiesUtil = new PropertiesUtil(file); @Mock public String getProperty(String key) { return "true"; } @Mock public PropertiesUtil setProperty(String key, String value) { Properties prop = new Properties(); prop.setProperty(key, value); propertiesUtil.setProperties(prop); return propertiesUtil; } } private static void setUp() { file = new File(FILE_PATH); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } @BeforeMethod(groups = { "TestJobListenerAdvice" }) public void setupMock() { setUp(); Mockit.setUpMock(MockPropertiesUtil.class); collectionDriver = mock(FakeCollectionDriver.class); collectionInitializerService = mock(FakeCollectionInitializerService.class); collectOperationManager = mock(CollectOperationManager.class); dataContainer = new DataContainer(); collectionDriverManager = new FakeCollectionDriverManager(); collectionDriverManager.setDriverClass("com.vmware.bdd.manager.ph.PhoneHomeCollectionDriver"); collectionDriverManager.setCollectionInitializerService(collectionInitializerService); collectionDriverManager.setDriver(collectionDriver); collectionDriverManager.setCollectOperationManager(collectOperationManager); collectionDriverManager.setDataContainer(dataContainer); collectionDriverManager.setFile(file); when(collectionDriver.getCollectionSwitchName()).thenReturn("serengeti.ph.enable"); jobListenerAdvice = new JobListenerAdvice(); jobListenerAdvice.setCollectionDriverManager(collectionDriverManager); jobListenerAdvice.setDataContainer(dataContainer); joinPoint = mock(JoinPoint.class); jobExecution = mock(JobExecution.class); when(jobExecution.getId()).thenReturn(1000L); exitStatus = mock(ExitStatus.class); when(exitStatus.getExitCode()).thenReturn(ExitStatus.COMPLETED.getExitCode()); when(jobExecution.getExitStatus()).thenReturn(exitStatus); Object[] args = new Object[] {jobExecution}; when(joinPoint.getArgs()).thenReturn(args); Signature signature = mock(Signature.class); when(signature.getName()).thenReturn("signatureName"); when(joinPoint.getSignature()).thenReturn(signature); } @AfterMethod public void tearDown() { Mockit.tearDownMocks(); cleanUpData(); } private void cleanUpData() { if (file.exists()) { file.delete(); } } @Test(groups = { "TestJobListenerAdvice" }) public void testJobAfter() { dataContainer.setMaxLength(1); jobListenerAdvice.jobAfter(joinPoint); Map<String, Map<String, Object>> data = dataContainer.pop(); assertEquals(data.get("asynchronization_1000").size(), 2); assertNotNull(data.get("asynchronization_1000").get("end_time")); assertEquals(data.get("asynchronization_1000").get("operation_status"), "COMPLETED"); } }