blob: cb6f6511d24d5a3e469c69353a43457f3189ca3e [file] [log] [blame]
// 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 org.apache.cloudstack.service;
import com.cloud.dc.DataCenterVO;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.host.Host;
import com.cloud.host.dao.HostDetailsDao;
import com.cloud.network.Network;
import com.cloud.network.Networks;
import com.cloud.network.nsx.NsxProvider;
import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.NsxProviderDao;
import com.cloud.network.dao.PhysicalNetworkDao;
import com.cloud.network.dao.PhysicalNetworkVO;
import com.cloud.network.element.NsxProviderVO;
import com.cloud.resource.ResourceManager;
import com.cloud.resource.ServerResource;
import com.cloud.utils.exception.CloudRuntimeException;
import org.apache.cloudstack.api.BaseResponse;
import org.apache.cloudstack.api.command.AddNsxControllerCmd;
import org.apache.cloudstack.api.response.NsxControllerResponse;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.UUID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class NsxProviderServiceImplTest {
@Mock
NsxProviderDao nsxProviderDao;
@Mock
DataCenterDao dataCenterDao;
@Mock
PhysicalNetworkDao physicalNetworkDao;
@Mock
NetworkDao networkDao;
@Mock
ResourceManager resourceManager;
@Mock
HostDetailsDao hostDetailsDao;
NsxProviderServiceImpl nsxProviderService;
@Before
public void setup() {
nsxProviderService = new NsxProviderServiceImpl();
nsxProviderService.resourceManager = resourceManager;
nsxProviderService.nsxProviderDao = nsxProviderDao;
nsxProviderService.hostDetailsDao = hostDetailsDao;
nsxProviderService.dataCenterDao = dataCenterDao;
nsxProviderService.networkDao = networkDao;
nsxProviderService.physicalNetworkDao = physicalNetworkDao;
}
@Test
public void testAddProvider() {
AddNsxControllerCmd cmd = mock(AddNsxControllerCmd.class);
when(cmd.getZoneId()).thenReturn(1L);
when(cmd.getName()).thenReturn("NsxController");
when(cmd.getHostname()).thenReturn("192.168.0.100");
when(cmd.getPort()).thenReturn("443");
when(cmd.getUsername()).thenReturn("admin");
when(cmd.getPassword()).thenReturn("password");
when(cmd.getEdgeCluster()).thenReturn("EdgeCluster");
when(cmd.getTier0Gateway()).thenReturn("Tier0-GW01");
when(cmd.getTransportZone()).thenReturn("Overlay");
when(resourceManager.addHost(anyLong(), any(ServerResource.class), any(Host.Type.class), anyMap())).thenReturn(mock(Host.class));
try {
NsxProvider provider = nsxProviderService.addProvider(cmd);
Assert.assertNotNull(provider);
} catch (CloudRuntimeException e) {
e.printStackTrace();
fail("Failed to add NSX controller due to internal error.");
}
}
@Test
public void testCreateNsxControllerResponse() {
NsxProvider nsxProvider = mock(NsxProvider.class);
DataCenterVO zone = mock(DataCenterVO.class);
String uuid = UUID.randomUUID().toString();
when(dataCenterDao.findById(anyLong())).thenReturn(zone);
when(zone.getUuid()).thenReturn(UUID.randomUUID().toString());
when(zone.getName()).thenReturn("ZoneNSX");
when(nsxProvider.getProviderName()).thenReturn("NSXController");
when(nsxProvider.getUuid()).thenReturn(uuid);
when(nsxProvider.getHostname()).thenReturn("hostname");
when(nsxProvider.getPort()).thenReturn("443");
when(nsxProvider.getTier0Gateway()).thenReturn("Tier0Gw");
when(nsxProvider.getEdgeCluster()).thenReturn("EdgeCluster");
when(nsxProvider.getTransportZone()).thenReturn("Overlay");
NsxControllerResponse response = nsxProviderService.createNsxControllerResponse(nsxProvider);
assertEquals("EdgeCluster", response.getEdgeCluster());
assertEquals("Tier0Gw", response.getTier0Gateway());
assertEquals("Overlay", response.getTransportZone());
assertEquals("ZoneNSX", response.getZoneName());
}
@Test
public void testListNsxControllers() {
NsxProviderVO nsxProviderVO = Mockito.mock(NsxProviderVO.class);
when(nsxProviderVO.getZoneId()).thenReturn(1L);
when(dataCenterDao.findById(1L)).thenReturn(mock(DataCenterVO.class));
when(nsxProviderDao.findByZoneId(anyLong())).thenReturn(nsxProviderVO);
List<BaseResponse> baseResponseList = nsxProviderService.listNsxProviders(1L);
assertEquals(1, baseResponseList.size());
}
@Test
public void testDeleteNsxController() {
NsxProviderVO nsxProviderVO = Mockito.mock(NsxProviderVO.class);
PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class);
List<PhysicalNetworkVO> physicalNetworkVOList = List.of(physicalNetworkVO);
NetworkVO networkVO = mock(NetworkVO.class);
List<NetworkVO> networkVOList = List.of(networkVO);
when(nsxProviderVO.getZoneId()).thenReturn(1L);
when(physicalNetworkVO.getId()).thenReturn(2L);
when(physicalNetworkDao.listByZone(1L)).thenReturn(physicalNetworkVOList);
when(nsxProviderDao.findById(anyLong())).thenReturn(nsxProviderVO);
when(networkDao.listByPhysicalNetwork(anyLong())).thenReturn(networkVOList);
assertTrue(nsxProviderService.deleteNsxController(1L));
}
@Test
public void testNetworkStateValidation() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
NetworkVO networkVO = Mockito.mock(NetworkVO.class);
List<NetworkVO> networkVOList = List.of(networkVO);
when(networkVO.getBroadcastDomainType()).thenReturn(Networks.BroadcastDomainType.NSX);
when(networkVO.getState()).thenReturn(Network.State.Allocated);
NsxProviderServiceImpl nsxProviderService = new NsxProviderServiceImpl();
assertThrows(CloudRuntimeException.class, () -> nsxProviderService.validateNetworkState(networkVOList));
}
}