You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/01/22 20:19:08 UTC
git commit: Making unit tests work
Updated Branches:
refs/heads/javelin 4fbecf15e -> ee39ec82d
Making unit tests work
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ee39ec82
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ee39ec82
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ee39ec82
Branch: refs/heads/javelin
Commit: ee39ec82d33452cadff718b62941986957ca2c9f
Parents: 4fbecf1
Author: Alex Huang <al...@citrix.com>
Authored: Tue Jan 22 10:29:11 2013 -0800
Committer: Alex Huang <al...@citrix.com>
Committed: Tue Jan 22 11:18:51 2013 -0800
----------------------------------------------------------------------
.../com/cloud/ha/dao/HighAvailabilityDaoImpl.java | 75 ++--
.../network/security/SecurityGroupManagerImpl.java | 59 ++--
.../test/com/cloud/agent/MockAgentManagerImpl.java | 3 +
.../com/cloud/network/MockNetworkManagerImpl.java | 70 ++--
.../test/com/cloud/network/NetworkModelTest.java | 5 -
.../security/SecurityGroupManagerImpl2Test.java | 9 +-
.../SecurityGroupManagerTestConfiguration.java | 112 +++++-
.../com/cloud/user/MockAccountManagerImpl.java | 49 ++--
.../test/com/cloud/user/MockDomainManagerImpl.java | 5 +-
.../test/com/cloud/vm/MockUserVmManagerImpl.java | 73 ++--
.../cloud/vm/MockVirtualMachineManagerImpl.java | 27 +-
.../resources/SecurityGroupManagerTestContext.xml | 42 +++
.../cloud/utils/component/ComponentContext.java | 273 ++++++++++-----
.../utils/component/SpringComponentScanUtils.java | 42 +++
14 files changed, 548 insertions(+), 296 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java b/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
index 587c63a..83a71b8 100644
--- a/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
+++ b/server/src/com/cloud/ha/dao/HighAvailabilityDaoImpl.java
@@ -25,7 +25,6 @@ import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.cloud.ha.HaWorkVO;
-import com.cloud.ha.HighAvailabilityManager;
import com.cloud.ha.HighAvailabilityManager.Step;
import com.cloud.ha.HighAvailabilityManager.WorkType;
import com.cloud.utils.db.Filter;
@@ -40,7 +39,7 @@ import com.cloud.utils.exception.CloudRuntimeException;
@Local(value={HighAvailabilityDao.class})
public class HighAvailabilityDaoImpl extends GenericDaoBase<HaWorkVO, Long> implements HighAvailabilityDao {
private static final Logger s_logger = Logger.getLogger(HighAvailabilityDaoImpl.class);
-
+
private final SearchBuilder<HaWorkVO> TBASearch;
private final SearchBuilder<HaWorkVO> PreviousInstanceSearch;
private final SearchBuilder<HaWorkVO> UntakenMigrationSearch;
@@ -53,54 +52,54 @@ public class HighAvailabilityDaoImpl extends GenericDaoBase<HaWorkVO, Long> impl
protected HighAvailabilityDaoImpl() {
super();
-
+
CleanupSearch = createSearchBuilder();
CleanupSearch.and("time", CleanupSearch.entity().getTimeToTry(), Op.LTEQ);
CleanupSearch.and("step", CleanupSearch.entity().getStep(), Op.IN);
CleanupSearch.done();
-
+
TBASearch = createSearchBuilder();
TBASearch.and("server", TBASearch.entity().getServerId(), Op.NULL);
TBASearch.and("taken", TBASearch.entity().getDateTaken(), Op.NULL);
TBASearch.and("time", TBASearch.entity().getTimeToTry(), Op.LTEQ);
TBASearch.done();
-
+
PreviousInstanceSearch = createSearchBuilder();
PreviousInstanceSearch.and("instance", PreviousInstanceSearch.entity().getInstanceId(), Op.EQ);
PreviousInstanceSearch.done();
-
+
UntakenMigrationSearch = createSearchBuilder();
UntakenMigrationSearch.and("host", UntakenMigrationSearch.entity().getHostId(), Op.EQ);
UntakenMigrationSearch.and("type", UntakenMigrationSearch.entity().getWorkType(), Op.EQ);
UntakenMigrationSearch.and("server", UntakenMigrationSearch.entity().getServerId(), Op.NULL);
UntakenMigrationSearch.and("taken", UntakenMigrationSearch.entity().getDateTaken(), Op.NULL);
UntakenMigrationSearch.done();
-
+
TakenWorkSearch = createSearchBuilder();
TakenWorkSearch.and("type", TakenWorkSearch.entity().getWorkType(), Op.EQ);
TakenWorkSearch.and("server", TakenWorkSearch.entity().getServerId(), Op.NNULL);
TakenWorkSearch.and("taken", TakenWorkSearch.entity().getDateTaken(), Op.NNULL);
TakenWorkSearch.and("step", TakenWorkSearch.entity().getStep(), Op.NIN);
TakenWorkSearch.done();
-
+
PreviousWorkSearch = createSearchBuilder();
PreviousWorkSearch.and("instance", PreviousWorkSearch.entity().getInstanceId(), Op.EQ);
PreviousWorkSearch.and("type", PreviousWorkSearch.entity().getWorkType(), Op.EQ);
PreviousWorkSearch.and("taken", PreviousWorkSearch.entity().getDateTaken(), Op.NULL);
PreviousWorkSearch.done();
-
+
ReleaseSearch = createSearchBuilder();
ReleaseSearch.and("server", ReleaseSearch.entity().getServerId(), Op.EQ);
ReleaseSearch.and("step", ReleaseSearch.entity().getStep(), Op.NIN);
ReleaseSearch.and("taken", ReleaseSearch.entity().getDateTaken(), Op.NNULL);
ReleaseSearch.done();
-
+
FutureHaWorkSearch = createSearchBuilder();
FutureHaWorkSearch.and("instance", FutureHaWorkSearch.entity().getInstanceId(), Op.EQ);
FutureHaWorkSearch.and("type", FutureHaWorkSearch.entity().getType(), Op.EQ);
FutureHaWorkSearch.and("id", FutureHaWorkSearch.entity().getId(), Op.GT);
FutureHaWorkSearch.done();
-
+
RunningHaWorkSearch = createSearchBuilder();
RunningHaWorkSearch.and("instance", RunningHaWorkSearch.entity().getInstanceId(), Op.EQ);
RunningHaWorkSearch.and("type", RunningHaWorkSearch.entity().getType(), Op.EQ);
@@ -108,24 +107,24 @@ public class HighAvailabilityDaoImpl extends GenericDaoBase<HaWorkVO, Long> impl
RunningHaWorkSearch.and("step", RunningHaWorkSearch.entity().getStep(), Op.NIN);
RunningHaWorkSearch.done();
}
-
+
@Override
public List<HaWorkVO> listRunningHaWorkForVm(long vmId) {
SearchCriteria<HaWorkVO> sc = RunningHaWorkSearch.create();
sc.setParameters("instance", vmId);
sc.setParameters("type", WorkType.HA);
sc.setParameters("step", Step.Done, Step.Error, Step.Cancelled);
-
+
return search(sc, null);
}
-
+
@Override
public List<HaWorkVO> listFutureHaWorkForVm(long vmId, long workId) {
SearchCriteria<HaWorkVO> sc = FutureHaWorkSearch.create();
sc.setParameters("instance", vmId);
- sc.setParameters("type", HighAvailabilityManager.WorkType.HA);
+ sc.setParameters("type", WorkType.HA);
sc.setParameters("id", workId);
-
+
return search(sc, null);
}
@@ -171,7 +170,7 @@ public class HighAvailabilityDaoImpl extends GenericDaoBase<HaWorkVO, Long> impl
public void cleanup(final long time) {
final SearchCriteria<HaWorkVO> sc = CleanupSearch.create();
sc.setParameters("time", time);
- sc.setParameters("step", HighAvailabilityManager.Step.Done, HighAvailabilityManager.Step.Cancelled);
+ sc.setParameters("step", Step.Done, Step.Cancelled);
expunge(sc);
}
@@ -185,47 +184,47 @@ public class HighAvailabilityDaoImpl extends GenericDaoBase<HaWorkVO, Long> impl
Date date = new Date();
work.setDateTaken(date);
work.setServerId(serverId);
- work.setStep(HighAvailabilityManager.Step.Cancelled);
-
+ work.setStep(Step.Cancelled);
+
update(work, sc);
}
@Override
public List<HaWorkVO> findTakenWorkItems(WorkType type) {
- SearchCriteria<HaWorkVO> sc = TakenWorkSearch.create();
- sc.setParameters("type", type);
- sc.setParameters("step", Step.Done, Step.Cancelled, Step.Error);
-
- return listBy(sc);
+ SearchCriteria<HaWorkVO> sc = TakenWorkSearch.create();
+ sc.setParameters("type", type);
+ sc.setParameters("step", Step.Done, Step.Cancelled, Step.Error);
+
+ return listBy(sc);
}
-
-
+
+
@Override
public boolean delete(long instanceId, WorkType type) {
- SearchCriteria<HaWorkVO> sc = PreviousWorkSearch.create();
- sc.setParameters("instance", instanceId);
- sc.setParameters("type", type);
- return expunge(sc) > 0;
+ SearchCriteria<HaWorkVO> sc = PreviousWorkSearch.create();
+ sc.setParameters("instance", instanceId);
+ sc.setParameters("type", type);
+ return expunge(sc) > 0;
}
-
+
@Override
public boolean hasBeenScheduled(long instanceId, WorkType type) {
- SearchCriteria<HaWorkVO> sc = PreviousWorkSearch.create();
- sc.setParameters("instance", instanceId);
- sc.setParameters("type", type);
- return listBy(sc, null).size() > 0;
+ SearchCriteria<HaWorkVO> sc = PreviousWorkSearch.create();
+ sc.setParameters("instance", instanceId);
+ sc.setParameters("type", type);
+ return listBy(sc, null).size() > 0;
}
-
+
@Override
public int releaseWorkItems(long nodeId) {
SearchCriteria<HaWorkVO> sc = ReleaseSearch.create();
sc.setParameters("server", nodeId);
sc.setParameters("step", Step.Done, Step.Cancelled, Step.Error);
-
+
HaWorkVO vo = createForUpdate();
vo.setDateTaken(null);
vo.setServerId(null);
-
+
return update(vo, sc);
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
index 58505ee..bfb6f1f 100755
--- a/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
+++ b/server/src/com/cloud/network/security/SecurityGroupManagerImpl.java
@@ -37,10 +37,14 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.cloudstack.api.command.user.securitygroup.*;
+import org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupEgressCmd;
+import org.apache.cloudstack.api.command.user.securitygroup.AuthorizeSecurityGroupIngressCmd;
+import org.apache.cloudstack.api.command.user.securitygroup.CreateSecurityGroupCmd;
+import org.apache.cloudstack.api.command.user.securitygroup.DeleteSecurityGroupCmd;
+import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd;
+import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupIngressCmd;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
import com.cloud.agent.AgentManager;
import com.cloud.agent.api.NetworkRulesSystemVmCommand;
@@ -49,8 +53,7 @@ import com.cloud.agent.api.SecurityGroupRulesCmd.IpPortAndProto;
import com.cloud.agent.manager.Commands;
import com.cloud.api.query.dao.SecurityGroupJoinDao;
import com.cloud.api.query.vo.SecurityGroupJoinVO;
-
-import org.apache.cloudstack.api.command.user.securitygroup.RevokeSecurityGroupEgressCmd;
+import com.cloud.cluster.ManagementServerNode;
import com.cloud.configuration.Config;
import com.cloud.configuration.dao.ConfigurationDao;
import com.cloud.domain.dao.DomainDao;
@@ -75,9 +78,7 @@ import com.cloud.network.security.dao.SecurityGroupRulesDao;
import com.cloud.network.security.dao.SecurityGroupVMMapDao;
import com.cloud.network.security.dao.SecurityGroupWorkDao;
import com.cloud.network.security.dao.VmRulesetLogDao;
-import com.cloud.projects.Project.ListProjectResourcesCriteria;
import com.cloud.projects.ProjectManager;
-import com.cloud.server.ManagementServer;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
@@ -87,17 +88,12 @@ import com.cloud.user.dao.AccountDao;
import com.cloud.uservm.UserVm;
import com.cloud.utils.NumbersUtil;
import com.cloud.utils.Pair;
-import com.cloud.utils.Ternary;
-
import com.cloud.utils.component.Manager;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GlobalLock;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
-import com.cloud.utils.db.SearchCriteria.Func;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.fsm.StateListener;
import com.cloud.utils.net.NetUtils;
@@ -163,10 +159,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
UsageEventDao _usageEventDao;
@Inject
ResourceTagDao _resourceTagDao;
-
- @Inject
- ManagementServer _msServer;
-
+
ScheduledExecutorService _executorPool;
ScheduledExecutorService _cleanupExecutor;
@@ -463,7 +456,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
List<SecurityGroupVMMapVO> groupsForVm = _securityGroupVMMapDao.listByInstanceId(vm.getId());
// For each group, find the security rules that allow the group
for (SecurityGroupVMMapVO mapVO : groupsForVm) {// FIXME: use custom sql in the dao
- //Add usage events for security group assign
+ //Add usage events for security group assign
UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_SECURITY_GROUP_ASSIGN, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), mapVO.getSecurityGroupId());
_usageEventDao.persist(usageEvent);
@@ -479,7 +472,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
List<SecurityGroupVMMapVO> groupsForVm = _securityGroupVMMapDao.listByInstanceId(vm.getId());
// For each group, find the security rules rules that allow the group
for (SecurityGroupVMMapVO mapVO : groupsForVm) {// FIXME: use custom sql in the dao
- //Add usage events for security group remove
+ //Add usage events for security group remove
UsageEventVO usageEvent = new UsageEventVO(EventTypes.EVENT_SECURITY_GROUP_REMOVE, vm.getAccountId(), vm.getDataCenterIdToDeployIn(), vm.getId(), mapVO.getSecurityGroupId());
_usageEventDao.persist(usageEvent);
@@ -583,11 +576,11 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
Map groupList = cmd.getUserSecurityGroupList();
return authorizeSecurityGroupRule(securityGroupId,protocol,startPort,endPort,icmpType,icmpCode,cidrList,groupList,SecurityRuleType.IngressRule);
}
-
+
private List<SecurityGroupRuleVO> authorizeSecurityGroupRule(Long securityGroupId,String protocol,Integer startPort,Integer endPort,Integer icmpType,Integer icmpCode,List<String> cidrList,Map groupList,SecurityRuleType ruleType) {
Integer startPortOrType = null;
Integer endPortOrCode = null;
-
+
// Validate parameters
SecurityGroup securityGroup = _securityGroupDao.findById(securityGroupId);
if (securityGroup == null) {
@@ -755,7 +748,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
}
}
}
-
+
@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_SECURITY_GROUP_REVOKE_EGRESS, eventDescription = "Revoking Egress Rule ", async = true)
@@ -763,7 +756,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
Long id = cmd.getId();
return revokeSecurityGroupRule(id, SecurityRuleType.EgressRule);
}
-
+
@Override
@DB
@ActionEvent(eventType = EventTypes.EVENT_SECURITY_GROUP_REVOKE_INGRESS, eventDescription = "Revoking Ingress Rule ", async = true)
@@ -772,11 +765,11 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
Long id = cmd.getId();
return revokeSecurityGroupRule(id, SecurityRuleType.IngressRule);
}
-
+
private boolean revokeSecurityGroupRule(Long id, SecurityRuleType type) {
// input validation
Account caller = UserContext.current().getCaller();
-
+
SecurityGroupRuleVO rule = _securityGroupRuleDao.findById(id);
if (rule == null) {
s_logger.debug("Unable to find security rule with id " + id);
@@ -788,7 +781,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
s_logger.debug("Mismatch in rule type for security rule with id " + id );
throw new InvalidParameterValueException("Mismatch in rule type for security rule with id " + id);
}
-
+
// Check permissions
SecurityGroup securityGroup = _securityGroupDao.findById(rule.getSecurityGroupId());
_accountMgr.checkAccess(caller, null, true, securityGroup);
@@ -866,15 +859,15 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
_answerListener = new SecurityGroupListener(this, _agentMgr, _workDao);
_agentMgr.registerForHostEvents(_answerListener, true, true, true);
- _serverId = _msServer.getId();
+ _serverId = ManagementServerNode.getManagementServerId();
s_logger.info("SecurityGroupManager: num worker threads=" + _numWorkerThreads +
- ", time between cleanups=" + _timeBetweenCleanups + " global lock timeout=" + _globalWorkLockTimeout);
+ ", time between cleanups=" + _timeBetweenCleanups + " global lock timeout=" + _globalWorkLockTimeout);
createThreadPools();
return true;
}
-
+
protected void createThreadPools() {
_executorPool = Executors.newScheduledThreadPool(_numWorkerThreads, new NamedThreadFactory("NWGRP"));
_cleanupExecutor = Executors.newScheduledThreadPool(1, new NamedThreadFactory("NWGRP-Cleanup"));
@@ -971,7 +964,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
s_logger.debug("Unable to send ingress rules updates for vm: " + userVmId + "(agentid=" + agentId + ")");
_workDao.updateStep(work.getInstanceId(), seqnum, Step.Done);
}
-
+
}
}
} finally {
@@ -1034,10 +1027,10 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
@Override
@DB
public void removeInstanceFromGroups(long userVmId) {
- if (_securityGroupVMMapDao.countSGForVm(userVmId) < 1) {
- s_logger.trace("No security groups found for vm id=" + userVmId + ", returning");
- return;
- }
+ if (_securityGroupVMMapDao.countSGForVm(userVmId) < 1) {
+ s_logger.trace("No security groups found for vm id=" + userVmId + ", returning");
+ return;
+ }
final Transaction txn = Transaction.currentTxn();
txn.start();
UserVm userVm = _userVMDao.acquireInLockTable(userVmId); // ensures that duplicate entries are not created in
@@ -1104,7 +1097,7 @@ public class SecurityGroupManagerImpl implements SecurityGroupManager, SecurityG
if (count.intValue() == 0) {
// handle empty result cases
return new Pair<List<SecurityGroupJoinVO>, Integer>(new ArrayList<SecurityGroupJoinVO>(), count);
- }
+ }
List<SecurityGroupVMMapVO> sgVmMappings = sgVmMappingPair.first();
Long[] sgIds = new Long[sgVmMappings.size()];
int i = 0;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/agent/MockAgentManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/agent/MockAgentManagerImpl.java b/server/test/com/cloud/agent/MockAgentManagerImpl.java
index 9b3b5eb..f16f50b 100755
--- a/server/test/com/cloud/agent/MockAgentManagerImpl.java
+++ b/server/test/com/cloud/agent/MockAgentManagerImpl.java
@@ -21,6 +21,8 @@ import java.util.Map;
import javax.ejb.Local;
import javax.naming.ConfigurationException;
+import org.springframework.stereotype.Component;
+
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
@@ -34,6 +36,7 @@ import com.cloud.host.Status.Event;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.resource.ServerResource;
+@Component
@Local(value = { AgentManager.class })
public class MockAgentManagerImpl implements AgentManager {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/network/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java b/server/test/com/cloud/network/MockNetworkManagerImpl.java
index 08c94f4..c24493a 100755
--- a/server/test/com/cloud/network/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java
@@ -28,6 +28,7 @@ import org.apache.cloudstack.api.command.admin.usage.ListTrafficTypeImplementors
import org.apache.cloudstack.api.command.user.network.CreateNetworkCmd;
import org.apache.cloudstack.api.command.user.network.ListNetworksCmd;
import org.apache.cloudstack.api.command.user.network.RestartNetworkCmd;
+import org.springframework.stereotype.Component;
import com.cloud.dc.DataCenter;
import com.cloud.dc.Vlan.VlanType;
@@ -68,6 +69,7 @@ import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachineProfile;
import com.cloud.vm.VirtualMachineProfileImpl;
+@Component
@Local(value = { NetworkManager.class, NetworkService.class })
public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkService {
@@ -167,7 +169,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return false;
}
-
+
@Override
public List<NetworkVO> setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault)
@@ -183,7 +185,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return null;
}
-
+
@Override
public void allocate(VirtualMachineProfile<? extends VMInstanceVO> vm, List<Pair<NetworkVO, NicProfile>> networks) throws InsufficientCapacityException, ConcurrentOperationException {
@@ -216,17 +218,17 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
}
-
+
@Override
public List<NicProfile> getNicProfiles(VirtualMachine vm) {
// TODO Auto-generated method stub
return null;
}
-
-
-
+
+
+
@Override
public Pair<NetworkGuru, NetworkVO> implementNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException,
InsufficientCapacityException {
@@ -261,9 +263,9 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return false;
}
-
-
+
+
@Override
public boolean applyIpAssociations(Network network, boolean continueOnError) throws ResourceUnavailableException {
@@ -271,7 +273,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return false;
}
-
+
@Override
public boolean startNetwork(long networkId, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException {
@@ -279,7 +281,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return false;
}
-
+
@Override
public IPAddressVO markIpAsUnavailable(long addrId) {
// TODO Auto-generated method stub
@@ -292,22 +294,22 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return null;
}
-
+
@Override
public boolean applyStaticNats(List<? extends StaticNat> staticNats, boolean continueOnError) throws ResourceUnavailableException {
// TODO Auto-generated method stub
return false;
}
-
+
public Map<Service, Set<Provider>> getNetworkOfferingServiceProvidersMap(long networkOfferingId) {
return null;
}
-
-
+
+
@Override
public PhysicalNetwork createPhysicalNetwork(Long zoneId, String vnetRange, String networkSpeed, List<String> isolationMethods, String broadcastDomainRange, Long domainId, List<String> tags, String name) {
@@ -412,16 +414,16 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return null;
}
-
+
@Override
public Network getExclusiveGuestNetwork(long zoneId) {
// TODO Auto-generated method stub
return null;
}
-
-
+
+
@Override
public UserDataServiceProvider getPasswordResetProvider(Network network) {
@@ -429,7 +431,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return null;
}
-
+
@Override
public PhysicalNetworkServiceProvider updateNetworkServiceProvider(Long id, String state, List<String> enabledServices) {
// TODO Auto-generated method stub
@@ -442,7 +444,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
return null;
}
-
+
/* (non-Javadoc)
* @see com.cloud.network.NetworkManager#applyRules(java.util.List, com.cloud.network.rules.FirewallRule.Purpose, com.cloud.network.NetworkRuleApplier, boolean)
*/
@@ -499,7 +501,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
NetworkVO network, NetworkOfferingVO findById) throws ConcurrentOperationException,
InsufficientAddressCapacityException, ResourceUnavailableException, InsufficientCapacityException {
// TODO Auto-generated method stub
-
+
}
/* (non-Javadoc)
@@ -555,7 +557,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
*/
@Override
public boolean restartNetwork(RestartNetworkCmd cmd, boolean cleanup) throws ConcurrentOperationException,
- ResourceUnavailableException, InsufficientCapacityException {
+ ResourceUnavailableException, InsufficientCapacityException {
// TODO Auto-generated method stub
return false;
}
@@ -593,7 +595,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
*/
@Override
public IpAddress associateIPToNetwork(long ipId, long networkId) throws InsufficientAddressCapacityException,
- ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException {
+ ResourceAllocationException, ResourceUnavailableException, ConcurrentOperationException {
// TODO Auto-generated method stub
return null;
}
@@ -604,7 +606,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
@Override
public Network createPrivateNetwork(String networkName, String displayText, long physicalNetworkId, String vlan,
String startIp, String endIP, String gateway, String netmask, long networkOwnerId, Long vpcId)
- throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException {
+ throws ResourceAllocationException, ConcurrentOperationException, InsufficientCapacityException {
// TODO Auto-generated method stub
return null;
}
@@ -665,7 +667,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
Network network, String requestedIp) throws InsufficientVirtualNetworkCapcityException,
InsufficientAddressCapacityException {
// TODO Auto-generated method stub
-
+
}
/* (non-Javadoc)
@@ -684,8 +686,8 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
@Override
public Pair<NicProfile, Integer> allocateNic(NicProfile requested, Network network, Boolean isDefaultNic,
int deviceId, VirtualMachineProfile<? extends VMInstanceVO> vm)
- throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException,
- ConcurrentOperationException {
+ throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException,
+ ConcurrentOperationException {
// TODO Auto-generated method stub
return null;
}
@@ -696,8 +698,8 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
@Override
public NicProfile prepareNic(VirtualMachineProfile<? extends VMInstanceVO> vmProfile, DeployDestination dest,
ReservationContext context, long nicId, NetworkVO network)
- throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException,
- ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
+ throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException,
+ ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
// TODO Auto-generated method stub
return null;
}
@@ -708,7 +710,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
@Override
public void removeNic(VirtualMachineProfile<? extends VMInstanceVO> vm, Nic nic) {
// TODO Auto-generated method stub
-
+
}
/* (non-Javadoc)
@@ -727,7 +729,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
public void releaseNic(VirtualMachineProfile<? extends VMInstanceVO> vmProfile, Nic nic)
throws ConcurrentOperationException, ResourceUnavailableException {
// TODO Auto-generated method stub
-
+
}
/* (non-Javadoc)
@@ -736,8 +738,8 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
@Override
public NicProfile createNicForVm(Network network, NicProfile requested, ReservationContext context,
VirtualMachineProfileImpl<VMInstanceVO> vmProfile, boolean prepare)
- throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException,
- ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
+ throws InsufficientVirtualNetworkCapcityException, InsufficientAddressCapacityException,
+ ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
// TODO Auto-generated method stub
return null;
}
@@ -758,7 +760,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
@Override
public void markPublicIpAsAllocated(IPAddressVO addr) {
// TODO Auto-generated method stub
-
+
}
/* (non-Javadoc)
@@ -816,7 +818,7 @@ public class MockNetworkManagerImpl implements NetworkManager, Manager, NetworkS
*/
@Override
public IpAddress allocateIP(Account ipOwner, boolean isSystem, long zoneId) throws ResourceAllocationException,
- InsufficientAddressCapacityException, ConcurrentOperationException {
+ InsufficientAddressCapacityException, ConcurrentOperationException {
// TODO Auto-generated method stub
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/network/NetworkModelTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/NetworkModelTest.java b/server/test/com/cloud/network/NetworkModelTest.java
index 8e8fb99..282fbc1 100644
--- a/server/test/com/cloud/network/NetworkModelTest.java
+++ b/server/test/com/cloud/network/NetworkModelTest.java
@@ -29,9 +29,6 @@ import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.cloud.dc.VlanVO;
import com.cloud.dc.dao.VlanDao;
@@ -43,8 +40,6 @@ import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.net.Ip;
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations="classpath:/testContext.xml")
public class NetworkModelTest {
@Before
public void setUp() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
index f0576eb..2704083a 100644
--- a/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
+++ b/server/test/com/cloud/network/security/SecurityGroupManagerImpl2Test.java
@@ -25,22 +25,18 @@ import javax.naming.ConfigurationException;
import junit.framework.TestCase;
import org.junit.After;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.cloud.utils.Profiler;
-import com.cloud.vm.dao.UserVmDaoImpl;
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(locations = "classpath:/testContext.xml")
+@ContextConfiguration(locations = "classpath:/SecurityGroupManagerTestContext.xml")
public class SecurityGroupManagerImpl2Test extends TestCase {
@Inject
SecurityGroupManagerImpl2 _sgMgr = null;
- @Inject
- UserVmDaoImpl _vmDao = null;
@Override
@After
@@ -62,7 +58,7 @@ public class SecurityGroupManagerImpl2Test extends TestCase {
+ " ms");
}
- @Ignore
+ @Test
public void testSchedule() throws ConfigurationException {
_schedule(1000);
}
@@ -71,6 +67,5 @@ public class SecurityGroupManagerImpl2Test extends TestCase {
public void testWork() throws ConfigurationException {
_schedule(1000);
_sgMgr.work();
-
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java b/server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
index ecf3ad1..5969948 100644
--- a/server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
+++ b/server/test/com/cloud/network/security/SecurityGroupManagerTestConfiguration.java
@@ -17,60 +17,142 @@
package com.cloud.network.security;
+import java.io.IOException;
+
+import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.FilterType;
+import org.springframework.core.type.classreading.MetadataReader;
+import org.springframework.core.type.classreading.MetadataReaderFactory;
+import org.springframework.core.type.filter.TypeFilter;
import com.cloud.agent.AgentManager;
-import com.cloud.agent.MockAgentManagerImpl;
+import com.cloud.api.query.dao.SecurityGroupJoinDaoImpl;
+import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
+import com.cloud.configuration.dao.ConfigurationDaoImpl;
+import com.cloud.dc.dao.ClusterDaoImpl;
+import com.cloud.dc.dao.DataCenterDaoImpl;
+import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
+import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDaoImpl;
+import com.cloud.dc.dao.DataCenterVnetDaoImpl;
+import com.cloud.dc.dao.DcDetailsDaoImpl;
+import com.cloud.dc.dao.HostPodDaoImpl;
+import com.cloud.dc.dao.PodVlanDaoImpl;
+import com.cloud.domain.dao.DomainDaoImpl;
+import com.cloud.event.dao.UsageEventDaoImpl;
+import com.cloud.host.dao.HostDaoImpl;
+import com.cloud.host.dao.HostDetailsDaoImpl;
+import com.cloud.host.dao.HostTagsDaoImpl;
import com.cloud.network.NetworkManager;
-import com.cloud.projects.MockProjectManagerImpl;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.security.SecurityGroupManagerTestConfiguration.Library;
+import com.cloud.network.security.dao.SecurityGroupDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupRuleDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupRulesDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupVMMapDaoImpl;
+import com.cloud.network.security.dao.SecurityGroupWorkDaoImpl;
+import com.cloud.network.security.dao.VmRulesetLogDaoImpl;
import com.cloud.projects.ProjectManager;
+import com.cloud.tags.dao.ResourceTagsDaoImpl;
import com.cloud.user.AccountManager;
import com.cloud.user.DomainManager;
-import com.cloud.user.MockAccountManagerImpl;
-import com.cloud.user.MockDomainManagerImpl;
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.vm.MockUserVmManagerImpl;
-import com.cloud.vm.MockVirtualMachineManagerImpl;
+import com.cloud.user.dao.AccountDaoImpl;
+import com.cloud.utils.component.SpringComponentScanUtils;
import com.cloud.vm.UserVmManager;
import com.cloud.vm.VirtualMachineManager;
-import com.cloud.vpc.MockNetworkManagerImpl;
+import com.cloud.vm.dao.NicDaoImpl;
+import com.cloud.vm.dao.UserVmDaoImpl;
+import com.cloud.vm.dao.UserVmDetailsDaoImpl;
+import com.cloud.vm.dao.VMInstanceDaoImpl;
@Configuration
+@ComponentScan(basePackageClasses={
+ SecurityGroupRulesDaoImpl.class,
+ UserVmDaoImpl.class,
+ AccountDaoImpl.class,
+ ConfigurationDaoImpl.class,
+ SecurityGroupWorkDaoImpl.class,
+ VmRulesetLogDaoImpl.class,
+ VMInstanceDaoImpl.class,
+ DomainDaoImpl.class,
+ UsageEventDaoImpl.class,
+ ResourceTagsDaoImpl.class,
+ HostDaoImpl.class,
+ HostDetailsDaoImpl.class,
+ HostTagsDaoImpl.class,
+ ClusterDaoImpl.class,
+ HostPodDaoImpl.class,
+ DataCenterDaoImpl.class,
+ DataCenterIpAddressDaoImpl.class,
+ HostTransferMapDaoImpl.class,
+ SecurityGroupManagerImpl2.class,
+ SecurityGroupDaoImpl.class,
+ SecurityGroupVMMapDaoImpl.class,
+ UserVmDetailsDaoImpl.class,
+ DataCenterIpAddressDaoImpl.class,
+ DataCenterLinkLocalIpAddressDaoImpl.class,
+ DataCenterVnetDaoImpl.class,
+ PodVlanDaoImpl.class,
+ DcDetailsDaoImpl.class,
+ SecurityGroupRuleDaoImpl.class,
+ NicDaoImpl.class,
+ SecurityGroupJoinDaoImpl.class},
+ includeFilters={@Filter(value=Library.class, type=FilterType.CUSTOM)},
+ useDefaultFilters=false
+ )
public class SecurityGroupManagerTestConfiguration {
+ @Bean
+ public NetworkModel networkModel() {
+ return Mockito.mock(NetworkModel.class);
+ }
+
@Bean
public AgentManager agentManager() {
- return ComponentContext.inject(MockAgentManagerImpl.class);
+ return Mockito.mock(AgentManager.class);
}
@Bean
public VirtualMachineManager virtualMachineManager(){
- return ComponentContext.inject(MockVirtualMachineManagerImpl.class);
+ return Mockito.mock(VirtualMachineManager.class);
}
@Bean
public UserVmManager userVmManager() {
- return ComponentContext.inject(MockUserVmManagerImpl.class);
+ return Mockito.mock(UserVmManager.class);
}
@Bean
public NetworkManager networkManager(){
- return ComponentContext.inject(MockNetworkManagerImpl.class);
+ return Mockito.mock(NetworkManager.class);
}
@Bean
public AccountManager accountManager() {
- return ComponentContext.inject(MockAccountManagerImpl.class);
+ return Mockito.mock(AccountManager.class);
}
@Bean
public DomainManager domainManager() {
- return ComponentContext.inject(MockDomainManagerImpl.class);
+ return Mockito.mock(DomainManager.class);
}
@Bean
public ProjectManager projectManager() {
- return ComponentContext.inject(MockProjectManagerImpl.class);
+ return Mockito.mock(ProjectManager.class);
+ }
+
+ public static class Library implements TypeFilter {
+
+ @Override
+ public boolean match(MetadataReader mdr, MetadataReaderFactory arg1) throws IOException {
+ mdr.getClassMetadata().getClassName();
+ ComponentScan cs = SecurityGroupManagerTestConfiguration.class.getAnnotation(ComponentScan.class);
+ return SpringComponentScanUtils.includedInBasePackageClasses(mdr.getClassMetadata().getClassName(), cs);
+ }
+
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/user/MockAccountManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/user/MockAccountManagerImpl.java b/server/test/com/cloud/user/MockAccountManagerImpl.java
index 550304a..bc81a6f 100644
--- a/server/test/com/cloud/user/MockAccountManagerImpl.java
+++ b/server/test/com/cloud/user/MockAccountManagerImpl.java
@@ -25,13 +25,13 @@ import javax.naming.ConfigurationException;
import org.apache.cloudstack.acl.ControlledEntity;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
-import com.cloud.api.query.vo.ControlledViewEntity;
-
+import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
import org.apache.cloudstack.api.command.admin.user.DeleteUserCmd;
import org.apache.cloudstack.api.command.admin.user.RegisterCmd;
-import org.apache.cloudstack.api.command.admin.account.UpdateAccountCmd;
import org.apache.cloudstack.api.command.admin.user.UpdateUserCmd;
+import org.springframework.stereotype.Component;
+import com.cloud.api.query.vo.ControlledViewEntity;
import com.cloud.domain.Domain;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.PermissionDeniedException;
@@ -44,6 +44,7 @@ import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
+@Component
@Local(value = { AccountManager.class, AccountService.class })
public class MockAccountManagerImpl implements Manager, AccountManager, AccountService {
@@ -283,27 +284,27 @@ public class MockAccountManagerImpl implements Manager, AccountManager, AccountS
}
- @Override
- public UserAccount createUserAccount(String userName, String password,
- String firstName, String lastName, String email, String timezone,
- String accountName, short accountType, Long domainId,
- String networkDomain, Map<String, String> details) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Account createAccount(String accountName, short accountType,
- Long domainId, String networkDomain, Map details) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public boolean enableAccount(long accountId) {
- // TODO Auto-generated method stub
- return false;
- }
+ @Override
+ public UserAccount createUserAccount(String userName, String password,
+ String firstName, String lastName, String email, String timezone,
+ String accountName, short accountType, Long domainId,
+ String networkDomain, Map<String, String> details) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Account createAccount(String accountName, short accountType,
+ Long domainId, String networkDomain, Map details) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean enableAccount(long accountId) {
+ // TODO Auto-generated method stub
+ return false;
+ }
@Override
public void buildACLSearchBuilder(SearchBuilder<? extends ControlledEntity> sb, Long domainId, boolean isRecursive, List<Long> permittedAccounts,
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/user/MockDomainManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/user/MockDomainManagerImpl.java b/server/test/com/cloud/user/MockDomainManagerImpl.java
index 0fe259d..0f572d8 100644
--- a/server/test/com/cloud/user/MockDomainManagerImpl.java
+++ b/server/test/com/cloud/user/MockDomainManagerImpl.java
@@ -25,12 +25,15 @@ import javax.naming.ConfigurationException;
import org.apache.cloudstack.api.command.admin.domain.ListDomainChildrenCmd;
import org.apache.cloudstack.api.command.admin.domain.ListDomainsCmd;
+import org.springframework.stereotype.Component;
+
import com.cloud.domain.Domain;
import com.cloud.domain.DomainVO;
import com.cloud.exception.PermissionDeniedException;
-import com.cloud.utils.component.Manager;
import com.cloud.utils.Pair;
+import com.cloud.utils.component.Manager;
+@Component
@Local(value = { DomainManager.class, DomainService.class })
public class MockDomainManagerImpl implements Manager, DomainManager, DomainService {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/vm/MockUserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/MockUserVmManagerImpl.java b/server/test/com/cloud/vm/MockUserVmManagerImpl.java
index 27508b1..c2d6825 100644
--- a/server/test/com/cloud/vm/MockUserVmManagerImpl.java
+++ b/server/test/com/cloud/vm/MockUserVmManagerImpl.java
@@ -23,29 +23,29 @@ import java.util.Map;
import javax.ejb.Local;
import javax.naming.ConfigurationException;
-import com.cloud.agent.api.StopAnswer;
-import com.cloud.agent.api.VmStatsEntry;
-import com.cloud.agent.api.to.NicTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.agent.manager.Commands;
-import com.cloud.api.query.vo.UserVmJoinVO;
-
import org.apache.cloudstack.api.command.admin.vm.AssignVMCmd;
import org.apache.cloudstack.api.command.admin.vm.RecoverVMCmd;
-import org.apache.cloudstack.api.command.user.vm.*;
-import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;
-import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;
-import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;
import org.apache.cloudstack.api.command.user.template.CreateTemplateCmd;
-import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
+import org.apache.cloudstack.api.command.user.vm.DeployVMCmd;
import org.apache.cloudstack.api.command.user.vm.DestroyVMCmd;
-import org.apache.cloudstack.api.command.user.vm.ListVMsCmd;
import org.apache.cloudstack.api.command.user.vm.RebootVMCmd;
import org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd;
import org.apache.cloudstack.api.command.user.vm.RestoreVMCmd;
import org.apache.cloudstack.api.command.user.vm.StartVMCmd;
import org.apache.cloudstack.api.command.user.vm.UpdateVMCmd;
import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
+import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
+import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;
+import org.apache.cloudstack.api.command.user.volume.AttachVolumeCmd;
+import org.apache.cloudstack.api.command.user.volume.DetachVolumeCmd;
+import org.springframework.stereotype.Component;
+
+import com.cloud.agent.api.StopAnswer;
+import com.cloud.agent.api.VmStatsEntry;
+import com.cloud.agent.api.to.NicTO;
+import com.cloud.agent.api.to.VirtualMachineTO;
+import com.cloud.agent.manager.Commands;
+import com.cloud.api.query.vo.UserVmJoinVO;
import com.cloud.dc.DataCenter;
import com.cloud.deploy.DeployDestination;
import com.cloud.exception.ConcurrentOperationException;
@@ -70,6 +70,7 @@ import com.cloud.utils.Pair;
import com.cloud.utils.component.Manager;
import com.cloud.utils.exception.ExecutionException;
+@Component
@Local(value = { UserVmManager.class, UserVmService.class })
public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Manager {
@@ -377,30 +378,30 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
@Override
public VirtualMachine migrateVirtualMachine(Long vmId, Host destinationHost) throws ResourceUnavailableException, ConcurrentOperationException, ManagementServerException,
- VirtualMachineMigrationException {
+ VirtualMachineMigrationException {
// TODO Auto-generated method stub
return null;
}
- @Override
- public UserVm moveVMToUser(AssignVMCmd moveUserVMCmd)
- throws ResourceAllocationException, ConcurrentOperationException,
- ResourceUnavailableException, InsufficientCapacityException {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public UserVm moveVMToUser(AssignVMCmd moveUserVMCmd)
+ throws ResourceAllocationException, ConcurrentOperationException,
+ ResourceUnavailableException, InsufficientCapacityException {
+ // TODO Auto-generated method stub
+ return null;
+ }
- @Override
- public VirtualMachine vmStorageMigration(Long vmId, StoragePool destPool) {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public VirtualMachine vmStorageMigration(Long vmId, StoragePool destPool) {
+ // TODO Auto-generated method stub
+ return null;
+ }
- @Override
- public UserVm restoreVM(RestoreVMCmd cmd) {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public UserVm restoreVM(RestoreVMCmd cmd) {
+ // TODO Auto-generated method stub
+ return null;
+ }
@@ -410,18 +411,18 @@ public class MockUserVmManagerImpl implements UserVmManager, UserVmService, Mana
return null;
}
- @Override
- public void prepareStop(VirtualMachineProfile<UserVmVO> profile) {
- // TODO Auto-generated method stub
+ @Override
+ public void prepareStop(VirtualMachineProfile<UserVmVO> profile) {
+ // TODO Auto-generated method stub
- }
+ }
/* (non-Javadoc)
* @see com.cloud.vm.VirtualMachineGuru#plugNic(com.cloud.network.Network, com.cloud.agent.api.to.NicTO, com.cloud.agent.api.to.VirtualMachineTO, com.cloud.vm.ReservationContext, com.cloud.deploy.DeployDestination)
*/
@Override
public boolean plugNic(Network network, NicTO nic, VirtualMachineTO vm, ReservationContext context, DeployDestination dest) throws ConcurrentOperationException, ResourceUnavailableException,
- InsufficientCapacityException {
+ InsufficientCapacityException {
// TODO Auto-generated method stub
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java b/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
index 559b6fa..71005c7 100755
--- a/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
+++ b/server/test/com/cloud/vm/MockVirtualMachineManagerImpl.java
@@ -23,6 +23,8 @@ import java.util.Map;
import javax.ejb.Local;
import javax.naming.ConfigurationException;
+import org.springframework.stereotype.Component;
+
import com.cloud.agent.api.to.NicTO;
import com.cloud.agent.api.to.VirtualMachineTO;
import com.cloud.deploy.DeployDestination;
@@ -51,6 +53,7 @@ import com.cloud.vm.VirtualMachine.Event;
import com.cloud.vm.VirtualMachine.Type;
import com.cloud.vm.VirtualMachineProfile.Param;
+@Component
@Local(value = VirtualMachineManager.class)
public class MockVirtualMachineManagerImpl implements VirtualMachineManager {
@@ -212,18 +215,18 @@ public class MockVirtualMachineManagerImpl implements VirtualMachineManager {
return null;
}
- @Override
- public <T extends VMInstanceVO> T storageMigration(T vm,
- StoragePool storagePoolId) {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public <T extends VMInstanceVO> T storageMigration(T vm,
+ StoragePool storagePoolId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
- @Override
- public VMInstanceVO findById(long vmId) {
- // TODO Auto-generated method stub
- return null;
- }
+ @Override
+ public VMInstanceVO findById(long vmId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
/* (non-Javadoc)
* @see com.cloud.vm.VirtualMachineManager#checkIfCanUpgrade(com.cloud.vm.VirtualMachine, long)
@@ -231,7 +234,7 @@ public class MockVirtualMachineManagerImpl implements VirtualMachineManager {
@Override
public void checkIfCanUpgrade(VirtualMachine vmInstance, long newServiceOfferingId) {
// TODO Auto-generated method stub
-
+
}
/* (non-Javadoc)
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/server/test/resources/SecurityGroupManagerTestContext.xml
----------------------------------------------------------------------
diff --git a/server/test/resources/SecurityGroupManagerTestContext.xml b/server/test/resources/SecurityGroupManagerTestContext.xml
new file mode 100644
index 0000000..b36599e
--- /dev/null
+++ b/server/test/resources/SecurityGroupManagerTestContext.xml
@@ -0,0 +1,42 @@
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+ license agreements. See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership. The ASF licenses this file to
+ you 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. -->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/tx
+ http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
+ http://www.springframework.org/schema/aop
+ http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+ http://www.springframework.org/schema/context
+ http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+
+ <context:annotation-config />
+
+ <!-- @DB support -->
+ <aop:config proxy-target-class="true">
+ <aop:aspect id="dbContextBuilder" ref="transactionContextBuilder">
+ <aop:pointcut id="captureAnyMethod" expression="execution(* *(..))" />
+
+ <aop:around pointcut-ref="captureAnyMethod" method="AroundAnyMethod" />
+ </aop:aspect>
+
+ </aop:config>
+
+ <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
+ <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
+ <bean id="TestConfiguration"
+ class="com.cloud.network.security.SecurityGroupManagerTestConfiguration" />
+ <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
+ <property name="requiredParameterValue" value="false" />
+ </bean>
+</beans>
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/utils/src/com/cloud/utils/component/ComponentContext.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/ComponentContext.java b/utils/src/com/cloud/utils/component/ComponentContext.java
index 7757c06..a70cca9 100644
--- a/utils/src/com/cloud/utils/component/ComponentContext.java
+++ b/utils/src/com/cloud/utils/component/ComponentContext.java
@@ -17,13 +17,19 @@
package com.cloud.utils.component;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import javax.annotation.PostConstruct;
+import javax.naming.ConfigurationException;
+
import org.apache.log4j.Logger;
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.Advised;
import org.springframework.aop.framework.ProxyFactory;
-import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@@ -32,7 +38,7 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
-import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.db.GenericDao;
import com.cloud.utils.db.TransactionContextBuilder;
/**
@@ -45,124 +51,209 @@ import com.cloud.utils.db.TransactionContextBuilder;
public class ComponentContext implements ApplicationContextAware {
private static final Logger s_logger = Logger.getLogger(ComponentContext.class);
- private static ApplicationContext s_appContext;
+ private static ApplicationContext s_appContext;
+ @Override
public void setApplicationContext(ApplicationContext applicationContext) {
s_appContext = applicationContext;
}
-
+
public static ApplicationContext getApplicationContext() {
return s_appContext;
}
-
+
+ @PostConstruct
+ public void initComponentsLifeCycle() {
+ @SuppressWarnings("rawtype")
+ Collection<GenericDao> daos = ComponentContext.getApplicationContext().getBeansOfType(GenericDao.class).values();
+ Collection<Manager> mgrs = ComponentContext.getApplicationContext().getBeansOfType(Manager.class).values();
+ Collection<Adapter> adapters = ComponentContext.getApplicationContext().getBeansOfType(Adapter.class).values();
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ for (GenericDao dao : daos) {
+ try {
+ s_logger.info("Configuring DAO: " + ComponentContext.getTargetClass(dao).getName());
+ dao.configure(dao.getClass().getSimpleName(), params);
+ } catch (ConfigurationException e) {
+ s_logger.error("Unable to configure DAO: " + dao.getClass().getSimpleName(), e);
+ System.exit(1);
+ }
+ }
+
+ List<String> avoidMap = new ArrayList<String>();
+ for (Manager manager : mgrs) {
+ if (avoidMap.contains(manager.getName())) {
+ s_logger.info("Skip manager: " + ComponentContext.getTargetClass(manager).getName() + " as it is already started");
+ continue;
+ }
+
+ try {
+ s_logger.info("Configuring manager: " + ComponentContext.getTargetClass(manager).getName() + "...");
+ manager.configure(manager.getClass().getSimpleName(), params);
+ avoidMap.add(manager.getName());
+ } catch (Exception e) {
+ s_logger.error("Problems to start manager:" + ComponentContext.getTargetClass(manager).getName(), e);
+ System.exit(1);
+ }
+ }
+
+ for (Adapter adapter : adapters) {
+ if (avoidMap.contains(adapter.getName())) {
+ s_logger.info("Skip adapter: " + ComponentContext.getTargetClass(adapter).getName() + " as it is already started");
+ continue;
+ }
+
+ try {
+ s_logger.info("Configuring adapter: " + ComponentContext.getTargetClass(adapter).getName() + "...");
+ adapter.configure(adapter.getName(), params);
+ avoidMap.add(adapter.getName());
+ } catch (Exception e) {
+ s_logger.error("Problems to start adapter:" + ComponentContext.getTargetClass(adapter).getName(), e);
+ System.exit(1);
+ }
+ }
+
+ avoidMap.clear();
+
+ for (Manager manager : mgrs) {
+ if (avoidMap.contains(manager.getName())) {
+ s_logger.info("Skip start on manager: " + ComponentContext.getTargetClass(manager).getName() + " as it is already started");
+ continue;
+ }
+
+ try {
+ s_logger.info("Starting manager: " + ComponentContext.getTargetClass(manager).getName() + "...");
+ manager.start();
+ avoidMap.add(manager.getName());
+ } catch (Exception e) {
+ s_logger.error("Problems to start manager:" + ComponentContext.getTargetClass(manager).getName(), e);
+ System.exit(1);
+ }
+ }
+
+ for (Adapter adapter : adapters) {
+ if (avoidMap.contains(adapter.getName())) {
+ s_logger.info("Skip start on adapter: " + ComponentContext.getTargetClass(adapter).getName() + " as it is already started");
+ continue;
+ }
+
+ try {
+ s_logger.info("Startinging adapter: " + ComponentContext.getTargetClass(adapter).getName() + "...");
+ adapter.start();
+ avoidMap.add(adapter.getName());
+ } catch (Exception e) {
+ s_logger.error("Problems to start adapter:" + ComponentContext.getTargetClass(adapter).getName(), e);
+ System.exit(1);
+ }
+ }
+ }
+
public static <T> T getComponent(String name) {
- assert(s_appContext != null);
- return (T)s_appContext.getBean(name);
+ assert(s_appContext != null);
+ return (T)s_appContext.getBean(name);
}
-
+
public static <T> T getComponent(Class<T> beanType) {
- assert(s_appContext != null);
- try {
- return (T)s_appContext.getBean(beanType);
- } catch(NoSuchBeanDefinitionException e) {
- Map<String, T> matchedTypes = getComponentsOfType(beanType);
- if(matchedTypes.size() > 0) {
- for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
- Primary primary = getTargetClass(entry.getValue()).getAnnotation(Primary.class);
- if(primary != null)
- return entry.getValue();
- }
-
- if(matchedTypes.size() > 1) {
- s_logger.warn("Unable to uniquely locate bean type " + beanType.getName());
- for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
- s_logger.warn("Candidate " + getTargetClass(entry.getValue()).getName());
- }
- }
-
- return (T)matchedTypes.values().toArray()[0];
- }
- }
- throw new NoSuchBeanDefinitionException(beanType.getName());
+ assert(s_appContext != null);
+ try {
+ return s_appContext.getBean(beanType);
+ } catch(NoSuchBeanDefinitionException e) {
+ Map<String, T> matchedTypes = getComponentsOfType(beanType);
+ if(matchedTypes.size() > 0) {
+ for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
+ Primary primary = getTargetClass(entry.getValue()).getAnnotation(Primary.class);
+ if(primary != null)
+ return entry.getValue();
+ }
+
+ if(matchedTypes.size() > 1) {
+ s_logger.warn("Unable to uniquely locate bean type " + beanType.getName());
+ for(Map.Entry<String, T> entry : matchedTypes.entrySet()) {
+ s_logger.warn("Candidate " + getTargetClass(entry.getValue()).getName());
+ }
+ }
+
+ return (T)matchedTypes.values().toArray()[0];
+ }
+ }
+ throw new NoSuchBeanDefinitionException(beanType.getName());
}
-
+
public static <T> Map<String, T> getComponentsOfType(Class<T> beanType) {
- return s_appContext.getBeansOfType(beanType);
+ return s_appContext.getBeansOfType(beanType);
}
-
+
public static <T> boolean isPrimary(Object instance, Class<T> beanType) {
- // we assume single line of interface inheritance of beanType
- Class<?> componentType = beanType;
- Class<?> targetClass = getTargetClass(instance);
-
- Class<?> interfaces[] = targetClass.getInterfaces();
- for(Class<?> intf : interfaces) {
- if(beanType.isAssignableFrom(intf) && intf != beanType) {
- componentType = intf;
- break;
- }
- }
-
- Map<String, T> matchedTypes = (Map<String, T>)ComponentContext.getComponentsOfType(componentType);
- if(matchedTypes.size() > 1) {
- Primary primary = targetClass.getAnnotation(Primary.class);
- if(primary != null) {
- s_logger.info(targetClass.getName() + " is the primary component of " + componentType.getName());
- return true;
- }
-
- s_logger.warn(targetClass.getName() + " is not the primary component of " + componentType.getName() + ", there are other candidates");
- for(T candidate : matchedTypes.values()) {
- s_logger.warn("Candidate " + getTargetClass(candidate).getName());
- }
- return false;
- }
-
- return true;
+ // we assume single line of interface inheritance of beanType
+ Class<?> componentType = beanType;
+ Class<?> targetClass = getTargetClass(instance);
+
+ Class<?> interfaces[] = targetClass.getInterfaces();
+ for(Class<?> intf : interfaces) {
+ if(beanType.isAssignableFrom(intf) && intf != beanType) {
+ componentType = intf;
+ break;
+ }
+ }
+
+ Map<String, T> matchedTypes = (Map<String, T>)ComponentContext.getComponentsOfType(componentType);
+ if(matchedTypes.size() > 1) {
+ Primary primary = targetClass.getAnnotation(Primary.class);
+ if(primary != null) {
+ s_logger.info(targetClass.getName() + " is the primary component of " + componentType.getName());
+ return true;
+ }
+
+ s_logger.warn(targetClass.getName() + " is not the primary component of " + componentType.getName() + ", there are other candidates");
+ for(T candidate : matchedTypes.values()) {
+ s_logger.warn("Candidate " + getTargetClass(candidate).getName());
+ }
+ return false;
+ }
+
+ return true;
}
-
+
public static Class<?> getTargetClass(Object instance) {
- while(instance instanceof Advised) {
- try {
- instance = ((Advised)instance).getTargetSource().getTarget();
- } catch(Exception e) {
- return instance.getClass();
- }
- }
- return instance.getClass();
+ while(instance instanceof Advised) {
+ try {
+ instance = ((Advised)instance).getTargetSource().getTarget();
+ } catch(Exception e) {
+ return instance.getClass();
+ }
+ }
+ return instance.getClass();
}
-
+
public static <T> T getTargetObject(Object instance) {
while(instance instanceof Advised) {
- try {
- instance = ((Advised)instance).getTargetSource().getTarget();
- } catch (Exception e) {
- return (T)instance;
- }
+ try {
+ instance = ((Advised)instance).getTargetSource().getTarget();
+ } catch (Exception e) {
+ return (T)instance;
+ }
}
-
+
return (T)instance;
}
-
+
public static <T> T inject(Class<T> clz) {
- T instance = s_appContext.getAutowireCapableBeanFactory().createBean(clz);
- return inject(instance);
+ T instance = s_appContext.getAutowireCapableBeanFactory().createBean(clz);
+ return inject(instance);
}
-
+
public static <T> T inject(Object instance) {
- // autowire dynamically loaded object
- AutowireCapableBeanFactory beanFactory = s_appContext.getAutowireCapableBeanFactory();
+ // autowire dynamically loaded object
+ AutowireCapableBeanFactory beanFactory = s_appContext.getAutowireCapableBeanFactory();
+ beanFactory.autowireBean(instance);
- beanFactory.autowireBean(instance);
- beanFactory.initializeBean(instance, null);
+ Advisor advisor = new DefaultPointcutAdvisor(new MatchAnyMethodPointcut(),
+ new TransactionContextBuilder());
- Advisor advisor = new DefaultPointcutAdvisor(new MatchAnyMethodPointcut(),
- new TransactionContextBuilder());
-
- ProxyFactory pf = new ProxyFactory();
+ ProxyFactory pf = new ProxyFactory();
pf.setTarget(instance);
pf.addAdvisor(advisor);
-
+
return (T)pf.getProxy();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee39ec82/utils/src/com/cloud/utils/component/SpringComponentScanUtils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/component/SpringComponentScanUtils.java b/utils/src/com/cloud/utils/component/SpringComponentScanUtils.java
new file mode 100644
index 0000000..fda11b7
--- /dev/null
+++ b/utils/src/com/cloud/utils/component/SpringComponentScanUtils.java
@@ -0,0 +1,42 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// 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.cloud.utils.component;
+
+import org.springframework.context.annotation.ComponentScan;
+
+import com.cloud.utils.exception.CloudRuntimeException;
+
+public class SpringComponentScanUtils {
+
+ public static boolean includedInBasePackageClasses(String clazzName, ComponentScan cs) {
+ Class<?> clazzToCheck;
+ try {
+ clazzToCheck = Class.forName(clazzName);
+ } catch (ClassNotFoundException e) {
+ throw new CloudRuntimeException("Unable to find " + clazzName);
+ }
+ Class<?>[] clazzes = cs.basePackageClasses();
+ for (Class<?> clazz : clazzes) {
+ if (clazzToCheck.isAssignableFrom(clazz)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+}