mirror of https://github.com/apache/cloudstack.git
Add some more unit tests
This commit is contained in:
parent
a529e30a40
commit
31a4a014db
|
|
@ -41,11 +41,27 @@ import org.mockito.Spy;
|
|||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.math.BigInteger;
|
||||
import java.security.KeyPair;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.MockedConstruction;
|
||||
import com.cloud.utils.ssh.SSHCmdHelper;
|
||||
import com.cloud.host.HostVO;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
import com.trilead.ssh2.Connection;
|
||||
import com.cloud.agent.api.routing.NetworkElementCommand;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
|
|
@ -65,7 +81,12 @@ public class CAManagerImplTest {
|
|||
private AgentManager agentManager;
|
||||
@Mock
|
||||
private CAProvider caProvider;
|
||||
|
||||
@Mock
|
||||
private VMInstanceDao vmInstanceDao;
|
||||
@Mock
|
||||
private NetworkOrchestrationService networkOrchestrationService;
|
||||
@Mock
|
||||
private ConfigurationDao configDao;
|
||||
@InjectMocks
|
||||
@Spy
|
||||
private CAManagerImpl caManager = new CAManagerImpl();
|
||||
|
|
@ -216,4 +237,95 @@ public class CAManagerImplTest {
|
|||
Assert.assertFalse(caManager.getActiveCertificatesMap().containsKey("10.0.0.1"));
|
||||
Assert.assertFalse(caManager.getActiveCertificatesMap().containsKey("192.168.0.1"));
|
||||
}
|
||||
@Test
|
||||
public void testProvisionCertificateViaSsh() throws Exception {
|
||||
Connection sshConnection = Mockito.mock(Connection.class);
|
||||
final String agentIp = "192.168.1.1";
|
||||
final String agentHostname = "host1";
|
||||
final String caProviderStr = "root";
|
||||
|
||||
try (MockedStatic<SSHCmdHelper> sshCmdHelperMock = Mockito.mockStatic(SSHCmdHelper.class)) {
|
||||
SSHCmdHelper.SSHCmdResult successResult = new SSHCmdHelper.SSHCmdResult(0, "someCsr", "");
|
||||
sshCmdHelperMock.when(() -> SSHCmdHelper.sshExecuteCmdWithResult(Mockito.eq(sshConnection), Mockito.anyString()))
|
||||
.thenReturn(successResult);
|
||||
|
||||
final KeyPair keyPair = CertUtils.generateRandomKeyPair(1024);
|
||||
final X509Certificate x509 = CertUtils.generateV3Certificate(null, keyPair, keyPair.getPublic(), "CN=ca", "SHA256withRSA", 365, null, null);
|
||||
Mockito.doReturn(new Certificate(x509, null, Collections.singletonList(x509)))
|
||||
.when(caManager).issueCertificate(Mockito.anyString(), Mockito.anyList(), Mockito.anyList(), Mockito.nullable(Integer.class), Mockito.anyString());
|
||||
|
||||
caManager.provisionCertificateViaSsh(sshConnection, agentIp, agentHostname, caProviderStr);
|
||||
|
||||
sshCmdHelperMock.verify(() -> SSHCmdHelper.sshExecuteCmdWithResult(Mockito.eq(sshConnection), Mockito.contains("keystore-setup")), Mockito.times(1));
|
||||
sshCmdHelperMock.verify(() -> SSHCmdHelper.sshExecuteCmdWithResult(Mockito.eq(sshConnection), Mockito.contains("keystore-cert-import")), Mockito.times(1));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProvisionKvmHostViaSsh() throws Exception {
|
||||
HostVO host = Mockito.mock(HostVO.class);
|
||||
Mockito.when(host.getPrivateIpAddress()).thenReturn("192.168.1.1");
|
||||
Mockito.when(host.getName()).thenReturn("host1");
|
||||
Mockito.when(host.getClusterId()).thenReturn(1L);
|
||||
|
||||
Mockito.doNothing().when(hostDao).loadDetails(host);
|
||||
Mockito.when(host.getDetail(ApiConstants.USERNAME)).thenReturn("root");
|
||||
Mockito.when(host.getDetail(ApiConstants.PASSWORD)).thenReturn("password");
|
||||
|
||||
Mockito.when(configDao.getValue("ssh.privatekey")).thenReturn("privatekey");
|
||||
|
||||
try (MockedConstruction<Connection> ignored = Mockito.mockConstruction(Connection.class,
|
||||
(mock, context) -> {
|
||||
// Do nothing on connect
|
||||
});
|
||||
MockedStatic<SSHCmdHelper> sshCmdHelperMock = Mockito.mockStatic(SSHCmdHelper.class)) {
|
||||
sshCmdHelperMock.when(() -> SSHCmdHelper.acquireAuthorizedConnectionWithPublicKey(Mockito.any(Connection.class), Mockito.anyString(), Mockito.anyString()))
|
||||
.thenReturn(true);
|
||||
|
||||
Mockito.doNothing().when(caManager).provisionCertificateViaSsh(Mockito.any(Connection.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||
|
||||
Method method = CAManagerImpl.class.getDeclaredMethod("provisionKvmHostViaSsh", Host.class, String.class);
|
||||
method.setAccessible(true);
|
||||
boolean result = (Boolean) method.invoke(caManager, host, "root");
|
||||
|
||||
Assert.assertTrue(result);
|
||||
Mockito.verify(caManager, Mockito.times(1)).provisionCertificateViaSsh(Mockito.any(Connection.class), Mockito.eq("192.168.1.1"), Mockito.eq("host1"), Mockito.eq("root"));
|
||||
sshCmdHelperMock.verify(() -> SSHCmdHelper.sshExecuteCmd(Mockito.any(Connection.class), Mockito.eq("sudo service cloudstack-agent restart")), Mockito.times(1));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProvisionSystemVmViaSsh() throws Exception {
|
||||
Host host = Mockito.mock(Host.class);
|
||||
Mockito.when(host.getName()).thenReturn("v-1-VM");
|
||||
|
||||
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);
|
||||
Mockito.when(vm.getHostId()).thenReturn(1L);
|
||||
Mockito.when(vm.getHostName()).thenReturn("host1");
|
||||
Mockito.when(vm.getInstanceName()).thenReturn("v-1-VM");
|
||||
Mockito.when(vmInstanceDao.findVMByInstanceName("v-1-VM")).thenReturn(vm);
|
||||
|
||||
Map<String, String> accessDetails = new HashMap<>();
|
||||
accessDetails.put(NetworkElementCommand.ROUTER_IP, "192.168.1.2");
|
||||
Mockito.when(networkOrchestrationService.getSystemVMAccessDetails(vm)).thenReturn(accessDetails);
|
||||
|
||||
HostVO hypervisorHost = Mockito.mock(HostVO.class);
|
||||
Mockito.when(hostDao.findById(1L)).thenReturn(hypervisorHost);
|
||||
|
||||
final KeyPair keyPair = CertUtils.generateRandomKeyPair(1024);
|
||||
final X509Certificate x509 = CertUtils.generateV3Certificate(null, keyPair, keyPair.getPublic(), "CN=ca", "SHA256withRSA", 365, null, null);
|
||||
Certificate cert = new Certificate(x509, null, Collections.singletonList(x509));
|
||||
Mockito.doReturn(cert)
|
||||
.when(caManager).issueCertificate(Mockito.nullable(String.class), Mockito.anyList(), Mockito.anyList(), Mockito.nullable(Integer.class), Mockito.anyString());
|
||||
|
||||
Mockito.doReturn(true)
|
||||
.when(caManager).deployCertificate(Mockito.eq(hypervisorHost), Mockito.eq(cert), Mockito.anyBoolean(), Mockito.eq(accessDetails));
|
||||
|
||||
Method method = CAManagerImpl.class.getDeclaredMethod("provisionSystemVmViaSsh", Host.class, Boolean.class, String.class);
|
||||
method.setAccessible(true);
|
||||
boolean result = (Boolean) method.invoke(caManager, host, true, "root");
|
||||
|
||||
Assert.assertTrue(result);
|
||||
Mockito.verify(caManager, Mockito.times(1)).deployCertificate(Mockito.eq(hypervisorHost), Mockito.eq(cert), Mockito.eq(true), Mockito.eq(accessDetails));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue