From 0a4c33ddb35f1eed2d85686f91e9ba5bf8d2e855 Mon Sep 17 00:00:00 2001
From: Pierre Charton
Date: Sat, 21 Dec 2024 00:02:59 +0100
Subject: [PATCH] UT
---
.../utils/BackrollHttpClientProvider.java | 4 +-
.../utils/BackrollHttpClientProviderTest.java | 82 ++++++++++++++-----
2 files changed, 65 insertions(+), 21 deletions(-)
diff --git a/plugins/backup/backroll/src/main/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProvider.java b/plugins/backup/backroll/src/main/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProvider.java
index 000da0386df..6214cac4a6e 100644
--- a/plugins/backup/backroll/src/main/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProvider.java
+++ b/plugins/backup/backroll/src/main/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProvider.java
@@ -308,7 +308,7 @@ public class BackrollHttpClientProvider {
return null;
}
- private boolean isAuthenticated() throws BackrollApiException, IOException {
+ protected boolean isAuthenticated() throws BackrollApiException, IOException {
boolean result = false;
if(StringUtils.isEmpty(backrollToken)) {
@@ -343,7 +343,7 @@ public class BackrollHttpClientProvider {
}
}
- private void login(final String appname, final String appsecret) throws BackrollApiException, IOException {
+ protected void login(final String appname, final String appsecret) throws BackrollApiException, IOException {
logger.debug("Backroll client - start login");
CloseableHttpClient httpClient = createHttpClient();
diff --git a/plugins/backup/backroll/src/test/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProviderTest.java b/plugins/backup/backroll/src/test/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProviderTest.java
index 2e166e596d7..30d6d66ca94 100644
--- a/plugins/backup/backroll/src/test/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProviderTest.java
+++ b/plugins/backup/backroll/src/test/java/org/apache/cloudstack/backup/backroll/utils/BackrollHttpClientProviderTest.java
@@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -70,7 +71,9 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
+
public class BackrollHttpClientProviderTest {
+
@Spy
@InjectMocks
BackrollHttpClientProvider backupHttpClientProvider;
@@ -117,7 +120,6 @@ public class BackrollHttpClientProviderTest {
String virtualMachineResponseString = "{ \"state\": \"SUCCESS\", \"info\": { \"archives\": [ { \"archive\": \"ROOT-00000\", \"barchive\": \"ROOT-00000\", \"id\": \"25d55ad283aa400af464c76d713c07ad7d163abdd3b8fbcdbdc46b827e5e0457\", \"name\": \"ROOT-00000\", \"start\": \"2024-11-08T18:24:48.000000\", \"time\": \"2024-11-08T18:24:48.000000\" } ], \"encryption\": { \"mode\": \"none\" }, \"repository\": { \"id\": \"36a11ebc0775a097c927735cc7015d19be7309be69fc15b896c5b1fd87fcbd79\", \"last_modified\": \"2024-11-29T09:53:09.000000\", \"location\": \"/mnt/backup/backup1\" } } }";
CloseableHttpResponse response2 = mock(CloseableHttpResponse.class);
-
StatusLine statusLine = mock(StatusLine.class);
doReturn(httpClient).when(backupHttpClientProvider).createHttpClient();
@@ -144,7 +146,7 @@ public class BackrollHttpClientProviderTest {
public void testCreateHttpClient_WithValidateCertificateTrue()
throws KeyManagementException, NoSuchAlgorithmException, URISyntaxException, BackrollApiException {
backupHttpClientProvider = BackrollHttpClientProvider.createProvider(backupHttpClientProvider,
- "http://api.backup.demo.ccc:5050/api/v1", "backroll-api", "VviX8dALauSyYJMqVYJqf3UyZOpO3joS", false,
+ "http://api.backup.demo.ccc:5050/api/v1", "backroll-api", "VviX8dALauSyYJMqVYJqf3UyZOpO3joS", true,
300, 600);
// Mock HttpClientBuilder
@@ -155,17 +157,36 @@ public class BackrollHttpClientProviderTest {
when(mockBuilder.build()).thenReturn(httpClient);
}
+ // Test the method
+ CloseableHttpClient client = backupHttpClientProvider.createHttpClient();
+ // Verify and assert
+ assertNotNull(client);
+ }
+
+ @Test
+ public void testCreateHttpClient_WithValidateCertificateFalse()
+ throws KeyManagementException, NoSuchAlgorithmException, URISyntaxException, BackrollApiException {
+ backupHttpClientProvider = BackrollHttpClientProvider.createProvider(backupHttpClientProvider,
+ "http://api.backup.demo.ccc:5050/api/v1", "backroll-api", "VviX8dALauSyYJMqVYJqf3UyZOpO3joS", false,
+ 300, 600);
+
+ // Mock HttpClientBuilder
+ HttpClientBuilder mockBuilder = mock(HttpClientBuilder.class);
+ try (MockedStatic utilities = Mockito.mockStatic(HttpClientBuilder.class)) {
+ utilities.when(HttpClientBuilder::create).thenReturn(mockBuilder);
+ when(mockBuilder.setDefaultRequestConfig(config)).thenReturn(mockBuilder);
+ when(mockBuilder.setSSLSocketFactory(any(SSLConnectionSocketFactory.class))).thenReturn(mockBuilder);
+ when(mockBuilder.build()).thenReturn(httpClient);
+ }
// Test the method
CloseableHttpClient client = backupHttpClientProvider.createHttpClient();
// Verify and assert
- //verify(mockBuilder).setDefaultRequestConfig(config);
assertNotNull(client);
- //assertTrue(client.getClass() == CloseableHttpClient.class);
- //assertEquals(mockHttpClient, client);
}
+
@Test
public void NotOkBodyException_Test(){
BackrollHttpClientProvider.NotOkBodyException exception = backupHttpClientProvider.new NotOkBodyException();
@@ -173,7 +194,7 @@ public class BackrollHttpClientProviderTest {
}
@Test
- public void get_Test_success() throws Exception, BackrollApiException, IOException {
+ public void get_Test_success() throws Exception {
// Arrange
String path = "/test";
defaultTestHttpClient(path);
@@ -191,7 +212,7 @@ public class BackrollHttpClientProviderTest {
}
@Test
- public void delete_Test_success() throws Exception, BackrollApiException, IOException {
+ public void delete_Test_success() throws Exception {
// Arrange
String path = "/test";
defaultTestHttpClient(path);
@@ -209,25 +230,31 @@ public class BackrollHttpClientProviderTest {
}
@Test
- public void okBody_Test() throws BackrollApiException, IOException, NotOkBodyException {
-
+ public void okBody_Test_success() throws BackrollApiException, IOException, NotOkBodyException {
StatusLine statusLine = mock(StatusLine.class);
doReturn(statusLine).when(response).getStatusLine();
doReturn(HttpStatus.SC_OK).when(statusLine).getStatusCode();
doReturn(new StringEntity("{\"mockKey\": \"mockValue\"}", ContentType.APPLICATION_JSON)).when(response)
.getEntity();
doNothing().when(response).close();
+
String result = backupHttpClientProvider.okBody(response);
assertNotNull(result);
+ }
+ @Test(expected = BackrollHttpClientProvider.NotOkBodyException.class)
+ public void okBody_Test_Error() throws BackrollApiException, IOException, NotOkBodyException {
+ StatusLine statusLine = mock(StatusLine.class);
+ doReturn(statusLine).when(response).getStatusLine();
+ doReturn(HttpStatus.SC_INTERNAL_SERVER_ERROR).when(statusLine).getStatusCode();
+
+ backupHttpClientProvider.okBody(response);
}
@Test
- public void waitGet_Test() throws Exception, BackrollApiException, IOException {
+ public void waitGet_Test() throws Exception {
String path = "/test";
defaultTestHttpClient(path);
- doReturn(response).when(httpClient)
- .execute(argThat(argument -> argument != null && argument.getURI().toString().contains("/auth")));
// Act
VirtualMachineBackupsResponse result = backupHttpClientProvider.waitGet(path,
@@ -236,17 +263,14 @@ public class BackrollHttpClientProviderTest {
// Assert
assertNotNull(result);
verify(backupHttpClientProvider, times(2)).okBody(Mockito.any(CloseableHttpResponse.class));
- verify(httpClient, times(1)).execute(Mockito.any(HttpPost.class));
verify(httpClient, times(1)).execute(Mockito.any(HttpGet.class));
verify(response, times(1)).close();
}
@Test
- public void waitGetWithoutParseResponse_Test() throws Exception, BackrollApiException, IOException {
+ public void waitGetWithoutParseResponse_Test() throws Exception {
String path = "/test";
defaultTestHttpClient(path);
- doReturn(response).when(httpClient)
- .execute(argThat(argument -> argument != null && argument.getURI().toString().contains("/auth")));
// Act
String result = backupHttpClientProvider.waitGetWithoutParseResponse(path);
@@ -254,18 +278,17 @@ public class BackrollHttpClientProviderTest {
// Assert
assertNotNull(result);
verify(backupHttpClientProvider, times(2)).okBody(Mockito.any(CloseableHttpResponse.class));
- verify(httpClient, times(1)).execute(Mockito.any(HttpPost.class));
verify(httpClient, times(1)).execute(Mockito.any(HttpGet.class));
verify(response, times(1)).close();
}
@Test
- public void testPost_success() throws Exception, BackrollApiException, IOException {
+ public void testPost_success() throws Exception {
// Arrange
String path = "/test";
JSONObject json = new JSONObject();
-
defaultTestHttpClient(path);
+
// Act
VirtualMachineBackupsResponse result = backupHttpClientProvider.post(path, json,
VirtualMachineBackupsResponse.class);
@@ -277,4 +300,25 @@ public class BackrollHttpClientProviderTest {
verify(response, times(1)).close();
}
+ @Test
+ public void testAuthenticationFailure() throws Exception {
+ doReturn(false).when(backupHttpClientProvider).isAuthenticated();
+ doNothing().when(backupHttpClientProvider).login(Mockito.anyString(), Mockito.anyString());
+ backupHttpClientProvider.loginIfAuthenticationFailed();
+ verify(backupHttpClientProvider).login(Mockito.anyString(), Mockito.anyString());
+ }
+
+ @Test(expected = BackrollApiException.class)
+ public void testLoginFailure() throws Exception {
+ doReturn(false).when(backupHttpClientProvider).isAuthenticated();
+ doThrow(BackrollApiException.class).when(backupHttpClientProvider).login(Mockito.anyString(), Mockito.anyString());
+ backupHttpClientProvider.loginIfAuthenticationFailed();
+ }
+
+ @Test
+ public void testLoginSuccess() throws Exception {
+ doReturn(true).when(backupHttpClientProvider).isAuthenticated();
+ backupHttpClientProvider.loginIfAuthenticationFailed();
+ verify(backupHttpClientProvider, times(0)).login(Mockito.anyString(), Mockito.anyString());
+ }
}