/* * 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. */ package com.cloud.network.vpc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.NetworkModel; import com.cloud.network.element.NetworkElement; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; import com.cloud.network.vpc.dao.VpcOfferingServiceMapDao; import org.powermock.reflect.Whitebox; import static org.mockito.Mockito.mock; import static org.powermock.api.mockito.PowerMockito.when; public class VpcManagerImplTest { @Mock VpcOfferingServiceMapDao vpcOffSvcMapDao; VpcManagerImpl manager; @Before public void setup() { MockitoAnnotations.initMocks(this); manager = new VpcManagerImpl(); manager._vpcOffSvcMapDao = vpcOffSvcMapDao; } @Test public void getVpcOffSvcProvidersMapForEmptyServiceTest() { long vpcOffId = 1L; List<VpcOfferingServiceMapVO> list = new ArrayList<VpcOfferingServiceMapVO>(); list.add(mock(VpcOfferingServiceMapVO.class)); when(manager._vpcOffSvcMapDao.listByVpcOffId(vpcOffId)).thenReturn(list); Map<Service, Set<Provider>> map = manager.getVpcOffSvcProvidersMap(vpcOffId); assertNotNull(map); assertEquals(map.size(),1); } protected Map<String, String> createFakeCapabilityInputMap() { Map<String, String> map = new HashMap<String, String>(); map.put(VpcManagerImpl.CAPABILITYVALUE, VpcManagerImpl.TRUE_VALUE); map.put(VpcManagerImpl.CAPABILITYTYPE, Network.Capability.SupportedProtocols.getName()); map.put(VpcManagerImpl.SERVICE, ""); return map; } @Test public void testIsVpcOfferingForRegionLevelVpc() throws Exception { // Prepare Map<String, Map<String, String>> serviceCapabilitystList = new HashMap<>(); // First add some other capabilities to be ignored serviceCapabilitystList.put("", createFakeCapabilityInputMap()); Map<String, String> servicePair = new HashMap<>(); servicePair.put(VpcManagerImpl.SERVICE, Service.Connectivity.getName()); servicePair.put(VpcManagerImpl.CAPABILITYTYPE, Network.Capability.RegionLevelVpc.getName()); servicePair.put(VpcManagerImpl.CAPABILITYVALUE, VpcManagerImpl.TRUE_VALUE); serviceCapabilitystList.put("", servicePair); // Execute boolean result = Whitebox.invokeMethod(this.manager, "isVpcOfferingForRegionLevelVpc", serviceCapabilitystList); //, Network.Capability.RedundantRouter.getName(), Service.SourceNat); // Assert assertEquals("VpcOffering should be created for Region Level Vpc", true, result); } @Test public void testIsVpcOfferingForRegionLevelVpcFalse() throws Exception { // Prepare Map<String, Map<String, String>> serviceCapabilitystList = new HashMap<>(); // First add some other capabilities to be ignored serviceCapabilitystList.put("", createFakeCapabilityInputMap()); serviceCapabilitystList.put("", createFakeCapabilityInputMap()); // Execute boolean result = Whitebox.invokeMethod(this.manager, "isVpcOfferingForRegionLevelVpc", serviceCapabilitystList); // Assert assertEquals("VpcOffering should be created NOT for Region Level Vpc", false, result); } @Test(expected = InvalidParameterValueException.class) public void testCheckCapabilityPerServiceProviderFail() { // Prepare final Map<Capability, String> capabilities = new HashMap<>(); capabilities.put(Capability.RegionLevelVpc, ""); capabilities.put(Capability.DistributedRouter, ""); Set<Network.Provider> providers = this.prepareVpcManagerForCheckingCapabilityPerService(Service.Connectivity, capabilities); // Execute this.manager.checkCapabilityPerServiceProvider(providers, Capability.RedundantRouter, Service.SourceNat); } @Test public void testCheckCapabilityPerServiceProvider() { // Prepare final Map<Capability, String> capabilities = new HashMap<>(); capabilities.put(Capability.RegionLevelVpc, ""); capabilities.put(Capability.DistributedRouter, ""); Set<Network.Provider> providers = this.prepareVpcManagerForCheckingCapabilityPerService(Service.Connectivity, capabilities); // Execute this.manager.checkCapabilityPerServiceProvider(providers, Capability.DistributedRouter, Service.Connectivity); this.manager.checkCapabilityPerServiceProvider(providers, Capability.RegionLevelVpc, Service.Connectivity); } protected Set<Network.Provider> prepareVpcManagerForCheckingCapabilityPerService(Service service, Map<Capability, String> capabilities) { final Set<Network.Provider> providers = new HashSet<>(); providers.add(Provider.VPCVirtualRouter); final Network.Capability capability = Capability.DistributedRouter; final boolean regionLevel = true; final boolean distributedRouter = true; final NetworkElement nwElement1 = mock(NetworkElement.class); this.manager._ntwkModel = mock(NetworkModel.class); when(this.manager._ntwkModel.getElementImplementingProvider(Provider.VPCVirtualRouter.getName())) .thenReturn(nwElement1); final Map<Service, Map<Network.Capability, String>> capabilitiesService1 = new HashMap<>(); when(nwElement1.getCapabilities()).thenReturn(capabilitiesService1); capabilities.put(Capability.RegionLevelVpc, ""); capabilities.put(Capability.DistributedRouter, ""); capabilitiesService1.put(service, capabilities); return providers; } }