| /* |
| * 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; |
| } |
| } |