// Copyright 2012 Citrix Systems, Inc. Licensed under the
// Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License.  Citrix Systems, Inc.
// reserves all rights not expressly granted by 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.
// 
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.agent.manager;

import java.io.Serializable;
import java.lang.reflect.Field;

import junit.framework.TestCase;

import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;

import com.cloud.alert.AlertManagerImpl;
import com.cloud.alert.dao.AlertDaoImpl;
import com.cloud.api.BaseCmd;
import com.cloud.api.commands.CreatePodCmd;
import com.cloud.api.commands.CreateZoneCmd;
import com.cloud.async.AsyncJobExecutorContextImpl;
import com.cloud.async.AsyncJobManagerImpl;
import com.cloud.async.SyncQueueManagerImpl;
import com.cloud.async.dao.AsyncJobDaoImpl;
import com.cloud.async.dao.SyncQueueDaoImpl;
import com.cloud.async.dao.SyncQueueItemDaoImpl;
import com.cloud.capacity.CapacityManagerImpl;
import com.cloud.capacity.dao.CapacityDaoImpl;
import com.cloud.certificate.dao.CertificateDaoImpl;
import com.cloud.cluster.CheckPointManagerImpl;
import com.cloud.cluster.ClusterFenceManagerImpl;
import com.cloud.cluster.ClusterManagerImpl;
import com.cloud.cluster.agentlb.dao.HostTransferMapDaoImpl;
import com.cloud.cluster.dao.ManagementServerHostDaoImpl;
import com.cloud.cluster.dao.StackMaidDaoImpl;
import com.cloud.configuration.ConfigurationManagerImpl;
import com.cloud.configuration.ConfigurationService;
import com.cloud.configuration.dao.ConfigurationDaoImpl;
import com.cloud.configuration.dao.ResourceCountDaoImpl;
import com.cloud.configuration.dao.ResourceLimitDaoImpl;
import com.cloud.consoleproxy.ConsoleProxyManagerImpl;
import com.cloud.dao.EntityManagerImpl;
import com.cloud.dc.ClusterDetailsDaoImpl;
import com.cloud.dc.dao.AccountVlanMapDaoImpl;
import com.cloud.dc.dao.ClusterDaoImpl;
import com.cloud.dc.dao.DataCenterDaoImpl;
import com.cloud.dc.dao.DataCenterIpAddressDaoImpl;
import com.cloud.dc.dao.DcDetailsDaoImpl;
import com.cloud.dc.dao.HostPodDaoImpl;
import com.cloud.dc.dao.PodVlanMapDaoImpl;
import com.cloud.dc.dao.VlanDaoImpl;
import com.cloud.domain.dao.DomainDaoImpl;
import com.cloud.event.dao.EventDaoImpl;
import com.cloud.event.dao.UsageEventDaoImpl;
import com.cloud.ha.HighAvailabilityManagerImpl;
import com.cloud.ha.dao.HighAvailabilityDaoImpl;
import com.cloud.host.dao.HostDaoImpl;
import com.cloud.host.dao.HostDetailsDaoImpl;
import com.cloud.host.dao.HostTagsDaoImpl;
import com.cloud.hypervisor.HypervisorGuruManagerImpl;
import com.cloud.hypervisor.dao.HypervisorCapabilitiesDaoImpl;
import com.cloud.keystore.KeystoreDaoImpl;
import com.cloud.keystore.KeystoreManagerImpl;
import com.cloud.maint.UpgradeManagerImpl;
import com.cloud.maint.dao.AgentUpgradeDaoImpl;
import com.cloud.network.NetworkManagerImpl;
import com.cloud.network.dao.FirewallRulesCidrsDaoImpl;
import com.cloud.network.dao.FirewallRulesDaoImpl;
import com.cloud.network.dao.IPAddressDaoImpl;
import com.cloud.network.dao.InlineLoadBalancerNicMapDaoImpl;
import com.cloud.network.dao.LoadBalancerDaoImpl;
import com.cloud.network.dao.LoadBalancerVMMapDaoImpl;
import com.cloud.network.dao.NetworkDaoImpl;
import com.cloud.network.dao.NetworkDomainDaoImpl;
import com.cloud.network.dao.NetworkRuleConfigDaoImpl;
import com.cloud.network.dao.RemoteAccessVpnDaoImpl;
import com.cloud.network.dao.VpnUserDaoImpl;
import com.cloud.network.firewall.FirewallManagerImpl;
import com.cloud.network.lb.ElasticLoadBalancerManagerImpl;
import com.cloud.network.lb.LoadBalancingRulesManagerImpl;
import com.cloud.network.lb.dao.ElasticLbVmMapDaoImpl;
import com.cloud.network.ovs.OvsTunnelManagerImpl;
import com.cloud.network.router.VirtualNetworkApplianceManagerImpl;
import com.cloud.network.rules.RulesManagerImpl;
import com.cloud.network.rules.dao.PortForwardingRulesDaoImpl;
import com.cloud.network.security.SecurityGroupManagerImpl2;
import com.cloud.network.security.dao.SecurityGroupDaoImpl;
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.network.vpn.RemoteAccessVpnManagerImpl;
import com.cloud.offerings.dao.NetworkOfferingDaoImpl;
import com.cloud.projects.ProjectManagerImpl;
import com.cloud.projects.dao.ProjectAccountDaoImpl;
import com.cloud.projects.dao.ProjectDaoImpl;
import com.cloud.resource.ResourceManagerImpl;
import com.cloud.resourcelimit.ResourceLimitManagerImpl;
import com.cloud.service.dao.ServiceOfferingDaoImpl;
import com.cloud.storage.OCFS2ManagerImpl;
import com.cloud.storage.StorageManagerImpl;
import com.cloud.storage.dao.DiskOfferingDaoImpl;
import com.cloud.storage.dao.GuestOSCategoryDaoImpl;
import com.cloud.storage.dao.GuestOSDaoImpl;
import com.cloud.storage.dao.LaunchPermissionDaoImpl;
import com.cloud.storage.dao.SnapshotDaoImpl;
import com.cloud.storage.dao.SnapshotPolicyDaoImpl;
import com.cloud.storage.dao.SnapshotScheduleDaoImpl;
import com.cloud.storage.dao.StoragePoolDaoImpl;
import com.cloud.storage.dao.StoragePoolHostDaoImpl;
import com.cloud.storage.dao.StoragePoolWorkDaoImpl;
import com.cloud.storage.dao.SwiftDaoImpl;
import com.cloud.storage.dao.UploadDaoImpl;
import com.cloud.storage.dao.VMTemplateDaoImpl;
import com.cloud.storage.dao.VMTemplateHostDaoImpl;
import com.cloud.storage.dao.VMTemplatePoolDaoImpl;
import com.cloud.storage.dao.VMTemplateZoneDaoImpl;
import com.cloud.storage.dao.VolumeDaoImpl;
import com.cloud.storage.download.DownloadMonitorImpl;
import com.cloud.storage.secondary.SecondaryStorageManagerImpl;
import com.cloud.storage.snapshot.SnapshotManagerImpl;
import com.cloud.storage.snapshot.SnapshotSchedulerImpl;
import com.cloud.storage.upload.UploadMonitorImpl;
import com.cloud.template.TemplateManagerImpl;
import com.cloud.user.AccountManagerImpl;
import com.cloud.user.DomainManagerImpl;
import com.cloud.user.dao.AccountDaoImpl;
import com.cloud.user.dao.SSHKeyPairDaoImpl;
import com.cloud.user.dao.UserAccountDaoImpl;
import com.cloud.user.dao.UserDaoImpl;
import com.cloud.user.dao.UserStatisticsDaoImpl;
import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.component.ComponentLocator.ComponentInfo;
import com.cloud.utils.component.Manager;
import com.cloud.utils.component.MockComponentLocator;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.ClusteredVirtualMachineManagerImpl;
import com.cloud.vm.ItWorkDaoImpl;
import com.cloud.vm.UserVmManagerImpl;
import com.cloud.vm.dao.ConsoleProxyDaoImpl;
import com.cloud.vm.dao.DomainRouterDaoImpl;
import com.cloud.vm.dao.InstanceGroupDaoImpl;
import com.cloud.vm.dao.InstanceGroupVMMapDaoImpl;
import com.cloud.vm.dao.NicDaoImpl;
import com.cloud.vm.dao.SecondaryStorageVmDaoImpl;
import com.cloud.vm.dao.UserVmDaoImpl;
import com.cloud.vm.dao.UserVmDetailsDaoImpl;
import com.cloud.vm.dao.VMInstanceDaoImpl;

public class ResourceManagerTest extends TestCase {
	MockComponentLocator _locator;
	private static final Logger s_logger = Logger.getLogger(ResourceManagerTest.class);
	ConfigurationService _configService;

	@Override
	@Before
	public void setUp() throws Exception {
		_locator = new MockComponentLocator("management-server");
		_locator.addDao("StackMaidDao", StackMaidDaoImpl.class);
		_locator.addDao("VMTemplateZoneDao", VMTemplateZoneDaoImpl.class);
		_locator.addDao("DomainRouterDao", DomainRouterDaoImpl.class);
		_locator.addDao("HostDao", HostDaoImpl.class);
		_locator.addDao("VMInstanceDao", VMInstanceDaoImpl.class);
		_locator.addDao("UserVmDao", UserVmDaoImpl.class);
		ComponentInfo<? extends GenericDao<?, ? extends Serializable>> info = _locator.addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
		info.addParameter("cache.size", "50");
		info.addParameter("cache.time.to.live", "600");
		info = _locator.addDao("DiskOfferingDao", DiskOfferingDaoImpl.class);
		info.addParameter("cache.size", "50");
		info.addParameter("cache.time.to.live", "600");
		info = _locator.addDao("DataCenterDao", DataCenterDaoImpl.class);
		info.addParameter("cache.size", "50");
		info.addParameter("cache.time.to.live", "600");
		info = _locator.addDao("HostPodDao", HostPodDaoImpl.class);
		info.addParameter("cache.size", "50");
		info.addParameter("cache.time.to.live", "600");
		_locator.addDao("IPAddressDao", IPAddressDaoImpl.class);
		info = _locator.addDao("VlanDao", VlanDaoImpl.class);
		info.addParameter("cache.size", "30");
		info.addParameter("cache.time.to.live", "3600");
		_locator.addDao("PodVlanMapDao", PodVlanMapDaoImpl.class);
		_locator.addDao("AccountVlanMapDao", AccountVlanMapDaoImpl.class);
		_locator.addDao("VolumeDao", VolumeDaoImpl.class);
		_locator.addDao("EventDao", EventDaoImpl.class);
		info = _locator.addDao("UserDao", UserDaoImpl.class);
		info.addParameter("cache.size", "5000");
		info.addParameter("cache.time.to.live", "300");
		_locator.addDao("UserStatisticsDao", UserStatisticsDaoImpl.class);
		_locator.addDao("FirewallRulesDao", FirewallRulesDaoImpl.class);
		_locator.addDao("LoadBalancerDao", LoadBalancerDaoImpl.class);
		_locator.addDao("NetworkRuleConfigDao", NetworkRuleConfigDaoImpl.class);
		_locator.addDao("LoadBalancerVMMapDao", LoadBalancerVMMapDaoImpl.class);
		_locator.addDao("DataCenterIpAddressDao", DataCenterIpAddressDaoImpl.class);
		_locator.addDao("SecurityGroupDao", SecurityGroupDaoImpl.class);
		//_locator.addDao("IngressRuleDao", IngressRuleDaoImpl.class);
		_locator.addDao("SecurityGroupVMMapDao", SecurityGroupVMMapDaoImpl.class);
		_locator.addDao("SecurityGroupRulesDao", SecurityGroupRulesDaoImpl.class);
		_locator.addDao("SecurityGroupWorkDao", SecurityGroupWorkDaoImpl.class);
		_locator.addDao("VmRulesetLogDao", VmRulesetLogDaoImpl.class);
		_locator.addDao("AlertDao", AlertDaoImpl.class);
		_locator.addDao("CapacityDao", CapacityDaoImpl.class);
		_locator.addDao("DomainDao", DomainDaoImpl.class);
		_locator.addDao("AccountDao", AccountDaoImpl.class);
		_locator.addDao("ResourceLimitDao", ResourceLimitDaoImpl.class);
		_locator.addDao("ResourceCountDao", ResourceCountDaoImpl.class);
		_locator.addDao("UserAccountDao", UserAccountDaoImpl.class);
		_locator.addDao("VMTemplateHostDao", VMTemplateHostDaoImpl.class);
		_locator.addDao("UploadDao", UploadDaoImpl.class);
		_locator.addDao("VMTemplatePoolDao", VMTemplatePoolDaoImpl.class);
		_locator.addDao("LaunchPermissionDao", LaunchPermissionDaoImpl.class);
		_locator.addDao("ConfigurationDao", ConfigurationDaoImpl.class);
		info = _locator.addDao("VMTemplateDao", VMTemplateDaoImpl.class);
		info.addParameter("cache.size", "100");
		info.addParameter("cache.time.to.live", "600");
		info.addParameter("routing.uniquename", "routing");
		_locator.addDao("HighAvailabilityDao", HighAvailabilityDaoImpl.class);
		_locator.addDao("ConsoleProxyDao", ConsoleProxyDaoImpl.class);
		_locator.addDao("SecondaryStorageVmDao", SecondaryStorageVmDaoImpl.class);
		_locator.addDao("ManagementServerHostDao", ManagementServerHostDaoImpl.class);
		_locator.addDao("AgentUpgradeDao", AgentUpgradeDaoImpl.class);
		_locator.addDao("SnapshotDao", SnapshotDaoImpl.class);
		_locator.addDao("AsyncJobDao", AsyncJobDaoImpl.class);
		_locator.addDao("SyncQueueDao", SyncQueueDaoImpl.class);
		_locator.addDao("SyncQueueItemDao", SyncQueueItemDaoImpl.class);
		_locator.addDao("GuestOSDao", GuestOSDaoImpl.class);
		_locator.addDao("GuestOSCategoryDao", GuestOSCategoryDaoImpl.class);
		_locator.addDao("StoragePoolDao", StoragePoolDaoImpl.class);
		_locator.addDao("StoragePoolHostDao", StoragePoolHostDaoImpl.class);
		_locator.addDao("DetailsDao", HostDetailsDaoImpl.class);
		_locator.addDao("SnapshotPolicyDao", SnapshotPolicyDaoImpl.class);
		_locator.addDao("SnapshotScheduleDao", SnapshotScheduleDaoImpl.class);
		_locator.addDao("ClusterDao", ClusterDaoImpl.class);
		_locator.addDao("CertificateDao", CertificateDaoImpl.class);
		_locator.addDao("NetworkConfigurationDao", NetworkDaoImpl.class);
		_locator.addDao("NetworkOfferingDao", NetworkOfferingDaoImpl.class);
		_locator.addDao("NicDao", NicDaoImpl.class);
		_locator.addDao("InstanceGroupDao", InstanceGroupDaoImpl.class);
		_locator.addDao("InstanceGroupVMMapDao", InstanceGroupVMMapDaoImpl.class);
		_locator.addDao("RemoteAccessVpnDao", RemoteAccessVpnDaoImpl.class);
		_locator.addDao("VpnUserDao", VpnUserDaoImpl.class);
		_locator.addDao("ItWorkDao", ItWorkDaoImpl.class);
		_locator.addDao("FirewallRulesDao", FirewallRulesDaoImpl.class);
		_locator.addDao("PortForwardingRulesDao", PortForwardingRulesDaoImpl.class);
		_locator.addDao("FirewallRulesCidrsDao", FirewallRulesCidrsDaoImpl.class);
		_locator.addDao("SSHKeyPairDao", SSHKeyPairDaoImpl.class);
		_locator.addDao("UsageEventDao", UsageEventDaoImpl.class);
		_locator.addDao("ClusterDetailsDao", ClusterDetailsDaoImpl.class);
		_locator.addDao("UserVmDetailsDao", UserVmDetailsDaoImpl.class);
		_locator.addDao("StoragePoolWorkDao", StoragePoolWorkDaoImpl.class);
		_locator.addDao("HostTagsDao", HostTagsDaoImpl.class);
		_locator.addDao("NetworkDomainDao", NetworkDomainDaoImpl.class);
		_locator.addDao("KeystoreDao", KeystoreDaoImpl.class);
		_locator.addDao("DcDetailsDao", DcDetailsDaoImpl.class);
		_locator.addDao("SwiftDao", SwiftDaoImpl.class);
		_locator.addDao("AgentTransferMapDao", HostTransferMapDaoImpl.class);
		_locator.addDao("ProjectDao", ProjectDaoImpl.class);
		_locator.addDao("InlineLoadBalancerNicMapDao", InlineLoadBalancerNicMapDaoImpl.class);
		_locator.addDao("ElasticLbVmMap", ElasticLbVmMapDaoImpl.class);
		_locator.addDao("ProjectsAccountDao", ProjectAccountDaoImpl.class);
		info = _locator.addDao("HypervisorCapabilitiesDao", HypervisorCapabilitiesDaoImpl.class);
		info.addParameter("cache.size", "100");
		info.addParameter("cache.time.to.live", "600");

		_locator.addManager("StackMaidManager", CheckPointManagerImpl.class);
		_locator.addManager("account manager", AccountManagerImpl.class);
		_locator.addManager("domain manager", DomainManagerImpl.class);
		_locator.addManager("resource limit manager", ResourceLimitManagerImpl.class);
		_locator.addManager("configuration manager", ConfigurationManagerImpl.class);
		_locator.addManager("network manager", NetworkManagerImpl.class);
		_locator.addManager("download manager", DownloadMonitorImpl.class);
		_locator.addManager("upload manager", UploadMonitorImpl.class);
		_locator.addManager("keystore manager", KeystoreManagerImpl.class);
		_locator.addManager("secondary storage vm manager", SecondaryStorageManagerImpl.class);
		_locator.addManager("vm manager", UserVmManagerImpl.class);
		_locator.addManager("upgrade manager", UpgradeManagerImpl.class);
		_locator.addManager("StorageManager", StorageManagerImpl.class);
		_locator.addManager("SyncQueueManager", SyncQueueManagerImpl.class);
		_locator.addManager("AsyncJobManager", AsyncJobManagerImpl.class);
		_locator.addManager("AsyncJobExecutorContext", AsyncJobExecutorContextImpl.class);
		_locator.addManager("HA Manager", HighAvailabilityManagerImpl.class);
		_locator.addManager("Alert Manager", AlertManagerImpl.class);
		_locator.addManager("Template Manager", TemplateManagerImpl.class);
		_locator.addManager("Snapshot Manager", SnapshotManagerImpl.class);
		_locator.addManager("SnapshotScheduler", SnapshotSchedulerImpl.class);
		_locator.addManager("SecurityGroupManager", SecurityGroupManagerImpl2.class);
		_locator.addManager("DomainRouterManager", VirtualNetworkApplianceManagerImpl.class);
		_locator.addManager("EntityManager", EntityManagerImpl.class);
		_locator.addManager("LoadBalancingRulesManager", LoadBalancingRulesManagerImpl.class);
		_locator.addManager("RulesManager", RulesManagerImpl.class);
		_locator.addManager("RemoteAccessVpnManager", RemoteAccessVpnManagerImpl.class);
		_locator.addManager("OvsTunnelManager", OvsTunnelManagerImpl.class);
		_locator.addManager("Capacity Manager", CapacityManagerImpl.class);
		_locator.addManager("Cluster Manager", ClusterManagerImpl.class);
		_locator.addManager("VirtualMachineManager", ClusteredVirtualMachineManagerImpl.class);
		_locator.addManager("HypervisorGuruManager", HypervisorGuruManagerImpl.class);
		_locator.addManager("ClusterFenceManager", ClusterFenceManagerImpl.class);
		_locator.addManager("ResourceManager", ResourceManagerImpl.class);

		_locator.addManager("OCFS2Manager", OCFS2ManagerImpl.class);
		_locator.addManager("FirewallManager", FirewallManagerImpl.class);
		ComponentInfo<? extends Manager> info1 = _locator.addManager("ConsoleProxyManager", ConsoleProxyManagerImpl.class);
		info1.addParameter("consoleproxy.sslEnabled", "true");
		_locator.addManager("ClusteredAgentManager", ClusteredAgentManagerImpl.class);
		_locator.addManager("ProjectManager", ProjectManagerImpl.class);
		_locator.addManager("ElasticLoadBalancerManager", ElasticLoadBalancerManagerImpl.class);
		
		_locator.makeActive(null);
		_configService = ComponentLocator.inject(ConfigurationManagerImpl.class);
	}

	private <T extends BaseCmd> void evaluateCmd(T cmd, String name, Object value) {
		try {
			Field f = cmd.getClass().getDeclaredField(name);
			f.set(cmd, value);
		} catch (Exception e) {
			s_logger.debug("Unable to evaluate " + cmd.getClass().getName() + "." + name, e);
			TestCase.fail();
		}
	}

	private void createZone(String zoneName) {
		CreateZoneCmd cZone = new CreateZoneCmd();
		evaluateCmd(cZone, "dns1", "10.223.110.254");
		evaluateCmd(cZone, "internalDns1", "10.223.110.254");
		evaluateCmd(cZone, "zoneName", zoneName);
		evaluateCmd(cZone, "networkType", "Basic");
		evaluateCmd(cZone, "securitygroupenabled", false);
		s_logger.info("Create zone:" + cZone.getZoneName());

		_configService.createZone(cZone);
	}

	private void createPod(String name) {
		CreatePodCmd cPod = new CreatePodCmd();
		evaluateCmd(cPod, "netmask", "255.255.255.0");

	}

	private void deploy100Hosts() {
		createZone("test1");
	}

	public void testDeploy100Hosts() {
		deploy100Hosts();
	}

	@Override
	@After
	public void tearDown() throws Exception {
	}

}
