/***************************************************************************
* Copyright (c) 2012-2014 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.service.resmgmt.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mockit.Mock;
import mockit.MockUp;
import mockit.Tested;
import org.apache.log4j.Logger;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.vmware.bdd.apitypes.Datastore.DatastoreType;
import com.vmware.bdd.dal.IDatastoreDAO;
import com.vmware.bdd.dal.INetworkDAO;
import com.vmware.bdd.dal.IResourcePoolDAO;
import com.vmware.bdd.dal.IServerInfoDAO;
import com.vmware.bdd.entity.NetworkEntity;
import com.vmware.bdd.entity.ServerInfoEntity;
import com.vmware.bdd.entity.VcDatastoreEntity;
import com.vmware.bdd.entity.VcResourcePoolEntity;
import com.vmware.bdd.service.resmgmt.IDatastoreService;
import com.vmware.bdd.service.resmgmt.INetworkService;
import com.vmware.bdd.service.resmgmt.IResourceInitializerService;
import com.vmware.bdd.service.resmgmt.IResourcePoolService;
/**
* @author Jarred Li
* @since 0.8
* @version 0.8
*
*/
public class ResourceInitializerServiceTest extends BaseResourceTest{
private static final Logger logger = Logger
.getLogger(ResourceInitializerServiceTest.class);
@Tested
private ResourceInitializerService service;
private IServerInfoDAO serverInfoDao;
private IResourcePoolService rpSvc;
private IDatastoreService dsSvc;
private INetworkService networkSvc;
@BeforeClass
public void beforeClass() {
service = new ResourceInitializerService();
}
@Test(groups = { "res-mgmt"})
public void isResoruceInitialized() {
serverInfoDao = new MockUp<IServerInfoDAO>() {
@Mock
List<ServerInfoEntity> findAll() {
List<ServerInfoEntity> serverInfos =
new ArrayList<ServerInfoEntity>();
ServerInfoEntity serverInfo = new ServerInfoEntity();
serverInfo.setResourceInitialized(true);
serverInfos.add(serverInfo);
return serverInfos;
}
}.getMockInstance();
service.setServerInfoDao(serverInfoDao);
boolean result = service.isResourceInitialized();
Assert.assertEquals(result, true);
}
@Test(groups = { "res-mgmt"})
public void isResoruceInitialized_WithoutInitialization() {
serverInfoDao = new MockUp<IServerInfoDAO>() {
@Mock
List<ServerInfoEntity> findAll() {
List<ServerInfoEntity> serverInfos =
new ArrayList<ServerInfoEntity>();
ServerInfoEntity serverInfo = new ServerInfoEntity();
serverInfo.setResourceInitialized(false);
serverInfos.add(serverInfo);
return serverInfos;
}
}.getMockInstance();
service.setServerInfoDao(serverInfoDao);
boolean result = service.isResourceInitialized();
Assert.assertEquals(result, false);
}
@Test(groups = { "res-mgmt"})
public void isResoruceInitialized_WithoutInitializationEntity() {
serverInfoDao = new MockUp<IServerInfoDAO>() {
@Mock
List<ServerInfoEntity> findAll() {
List<ServerInfoEntity> serverInfos =
new ArrayList<ServerInfoEntity>();
return serverInfos;
}
}.getMockInstance();
service.setServerInfoDao(serverInfoDao);
boolean result = service.isResourceInitialized();
Assert.assertEquals(result, false);
}
@Test(groups = { "res-mgmt"})
public void updateServerInfo() {
serverInfoDao = new MockUp<IServerInfoDAO>() {
@Mock
List<ServerInfoEntity> findAll() {
List<ServerInfoEntity> serverInfos =
new ArrayList<ServerInfoEntity>();
ServerInfoEntity serverInfo = new ServerInfoEntity();
serverInfo.setResourceInitialized(false);
serverInfos.add(serverInfo);
return serverInfos;
}
@Mock(invocations = 1)
void update(ServerInfoEntity serverInfo) {
logger.info("mock update server info");
}
}.getMockInstance();
service.setServerInfoDao(serverInfoDao);
service.updateOrInsertServerInfo();
}
@Test(groups = { "res-mgmt"})
public void insertServerInfo() {
serverInfoDao = new MockUp<IServerInfoDAO>() {
@Mock
List<ServerInfoEntity> findAll() {
List<ServerInfoEntity> serverInfos =
new ArrayList<ServerInfoEntity>();
return serverInfos;
}
@Mock(invocations = 1)
void insert(ServerInfoEntity serverInfo) {
logger.info("mock insert server info");
}
}.getMockInstance();
service.setServerInfoDao(serverInfoDao);
service.updateOrInsertServerInfo();
}
@Test(groups = { "res-mgmt"})
public void noOperationForServerInfo() {
serverInfoDao = new MockUp<IServerInfoDAO>() {
@Mock
List<ServerInfoEntity> findAll() {
List<ServerInfoEntity> serverInfos =
new ArrayList<ServerInfoEntity>();
ServerInfoEntity serverInfo = new ServerInfoEntity();
serverInfo.setResourceInitialized(true);
serverInfos.add(serverInfo);
return serverInfos;
}
@Mock(invocations = 0)
void insert(ServerInfoEntity serverInfo) {
logger.info("mock insert server info");
}
}.getMockInstance();
service.setServerInfoDao(serverInfoDao);
service.updateOrInsertServerInfo();
}
@Test(groups = { "res-mgmt"})
public void addResourceIntoDB() {
rpSvc = new MockUp<IResourcePoolService>() {
@Mock
void addResourcePool(String rpName, String vcClusterName,
String vcResourcePool) {
logger.info("mock rp service to add rp");
Assert.assertEquals(rpName, "defaultRP");
Assert.assertEquals(vcClusterName, "testCluster");
Assert.assertEquals(vcResourcePool, "serengetiRP");
}
}.getMockInstance();
dsSvc = new MockUp<IDatastoreService>() {
@Mock
void addDatastores(String name, DatastoreType type, List<String> spec, boolean regex) {
logger.info("mock datastore service to add ds");
Assert.assertEquals(name, "defaultDSShared");
Assert.assertEquals(type, DatastoreType.SHARED);
Assert.assertEquals(spec.size(), 1);
Assert.assertEquals(regex, false);
}
}.getMockInstance();
networkSvc = new MockUp<INetworkService>() {
@Mock
NetworkEntity addDhcpNetwork(final String name, final String portGroup) {
Assert.assertEquals(name, "defaultNetwork");
Assert.assertEquals(portGroup, "serengetiNet");
return new NetworkEntity();
}
}.getMockInstance();
service.setRpSvc(rpSvc);
service.setDsSvc(dsSvc);
service.setNetworkSvc(networkSvc);
Map<DatastoreType, List<String>> dsMaps = new HashMap<DatastoreType, List<String>>();
List<String> dsNames = new ArrayList<String>();
dsNames.add("datastore1");
dsMaps.put(DatastoreType.SHARED, dsNames);
service.addResourceIntoDB("testCluster", "serengetiRP", "serengetiNet",
dsMaps);
}
@Test(groups={"res-mgmt","dependsOnVC","dependsOnDB"})
public void initResource(){
super.init();
IResourceInitializerService svc = ctx.getBean(IResourceInitializerService.class);
IResourcePoolDAO rpDao = ctx.getBean(IResourcePoolDAO.class);
IDatastoreDAO dsDao = ctx.getBean(IDatastoreDAO.class);
INetworkDAO networkDao = ctx.getBean(INetworkDAO.class);
VcResourcePoolEntity rpEntity = rpDao.findByName(ResourceInitializerService.DEFAULT_RP);
if(rpEntity != null){
rpDao.delete(rpEntity);
}
List<VcDatastoreEntity> dss = dsDao.findByName(ResourceInitializerService.DEFAULT_DS_SHARED);
if(dss != null && dss.size() > 0){
for(VcDatastoreEntity ds : dss){
dsDao.delete(ds);
}
}
dss = dsDao.findByName(ResourceInitializerService.DEFAULT_DS_LOCAL);
if(dss != null && dss.size() > 0){
for(VcDatastoreEntity ds : dss){
dsDao.delete(ds);
}
}
NetworkEntity network = networkDao.findNetworkByName(ResourceInitializerService.DEFAULT_NETWORK);
if(network != null){
networkDao.delete(network);
}
svc.initResource();
}
}