/******************************************************************************
* Copyright (c) 2012-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.web;
import com.vmware.aurora.global.Configuration;
import com.vmware.aurora.vc.vcservice.VcContext;
import com.vmware.bdd.service.IClusteringService;
import com.vmware.bdd.service.collection.ICollectionInitializerService;
import com.vmware.bdd.service.resmgmt.IResourceInitializerService;
import mockit.MockClass;
import mockit.Mockit;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import static org.testng.Assert.assertTrue;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import java.util.Date;
import static org.mockito.Mockito.*;
public class TestResourceInitializer {
private static boolean booleanFlag = true;
private static boolean endSessionFlag = false;
@Mock
private static WebApplicationContext webApplicationContext;
@Mock
private static IClusteringService clusteringService;
@Mock
private static ICollectionInitializerService collectionInitializerService;
@Mock
private static IResourceInitializerService resourceInitializerService;
@MockClass(realClass = WebApplicationContextUtils.class)
public static class MockWebApplicationContextUtils {
@mockit.Mock
public static WebApplicationContext getWebApplicationContext(ServletContext sc) {
when(webApplicationContext.getBean("clusteringService", IClusteringService.class))
.thenReturn(clusteringService);
when(webApplicationContext.getBean("collectionInitializerService", ICollectionInitializerService.class))
.thenReturn(collectionInitializerService);
when(webApplicationContext.getBean(IResourceInitializerService.class))
.thenReturn(resourceInitializerService);
return webApplicationContext;
}
}
@MockClass(realClass = Configuration.class)
public static class MockConfiguration {
@mockit.Mock
public static Boolean getBoolean(String key) {
return booleanFlag;
}
}
@MockClass(realClass = VcContext.class)
public static class MockVcContext {
@mockit.Mock
public static void endSession() {
endSessionFlag = true;
}
}
@Mock
private ServletContextEvent sce;
@InjectMocks
private ResourceInitializer resourceInitializer;
@BeforeMethod
public void init() {
MockitoAnnotations.initMocks(this);
Mockit.setUpMock(MockWebApplicationContextUtils.class);
Mockit.setUpMock(MockConfiguration.class);
Mockit.setUpMock(MockVcContext.class);
}
@AfterMethod
public void resetFlag() {
booleanFlag = true;
endSessionFlag = false;
}
@Test
public void testContextInitialized() {
resourceInitializer.contextInitialized(sce);
verify(sce, times(1)).getServletContext();
verify(clusteringService, times(1)).init();
verify(collectionInitializerService, times(1)).setDeployTime(Mockito.any(Date.class));
verify(collectionInitializerService, times(1)).generateInstanceId();
verify(resourceInitializerService, times(1)).isResourceInitialized();
verify(resourceInitializerService, times(1)).initResource();
verify(resourceInitializerService, times(1)).updateOrInsertServerInfo();
when(resourceInitializerService.isResourceInitialized()).thenReturn(true);
resourceInitializer.contextInitialized(sce);
verify(sce, times(2)).getServletContext();
verify(clusteringService, times(2)).init();
verify(collectionInitializerService, times(2)).setDeployTime(Mockito.any(Date.class));
verify(collectionInitializerService, times(2)).generateInstanceId();
verify(resourceInitializerService, times(2)).isResourceInitialized();
verify(resourceInitializerService, times(1)).initResource();
verify(resourceInitializerService, times(1)).updateOrInsertServerInfo();
booleanFlag = false;
when(resourceInitializerService.isResourceInitialized()).thenReturn(false);
resourceInitializer.contextInitialized(sce);
verify(sce, times(3)).getServletContext();
verify(clusteringService, times(3)).init();
verify(collectionInitializerService, times(3)).setDeployTime(Mockito.any(Date.class));
verify(collectionInitializerService, times(3)).generateInstanceId();
verify(resourceInitializerService, times(3)).isResourceInitialized();
verify(resourceInitializerService, times(1)).initResource();
verify(resourceInitializerService, times(2)).updateOrInsertServerInfo();
}
@Test
public void testContextDestroyed() {
resourceInitializer.contextDestroyed(sce);
verify(clusteringService).destroy();
assertTrue(endSessionFlag);
}
}