117 lines
4.5 KiB
Java
117 lines
4.5 KiB
Java
package com.hithomelabs.CFTunnels.Services;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.hithomelabs.CFTunnels.Config.CloudflareConfig;
|
|
import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader;
|
|
import com.hithomelabs.CFTunnels.Models.Config;
|
|
import com.hithomelabs.CFTunnels.Models.TunnelResponse;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.junit.jupiter.api.extension.ExtendWith;
|
|
import org.mockito.InjectMocks;
|
|
import org.mockito.Mock;
|
|
import org.mockito.junit.jupiter.MockitoExtension;
|
|
import org.springframework.http.*;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
import java.io.IOException;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import static com.hithomelabs.CFTunnels.TestUtils.Util.getClassPathDataResource;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
@ExtendWith(MockitoExtension.class)
|
|
class CloudflareAPIServiceTest {
|
|
|
|
@InjectMocks
|
|
private CloudflareAPIService cloudflareAPIService;
|
|
|
|
@Mock
|
|
AuthKeyEmailHeader authKeyEmailHeader;
|
|
|
|
@Mock
|
|
private RestTemplate restTemplate;
|
|
|
|
@Mock
|
|
CloudflareConfig cloudflareConfig;
|
|
|
|
private static final String tunnelResponseLargeIngressFile = "tunnelResponseLargeIngress.json";
|
|
|
|
private static final String bigTunnelResponse;
|
|
|
|
static {
|
|
try {
|
|
bigTunnelResponse = getClassPathDataResource(tunnelResponseLargeIngressFile);
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
@Test
|
|
void testGetCloudflareTunnels() {
|
|
|
|
when(cloudflareConfig.getAccountId()).thenReturn("account-123");
|
|
when(authKeyEmailHeader.getHttpHeaders()).thenReturn(new HttpHeaders());
|
|
Map<String, Object> mockBody = Map.of("tunnels", List.of(Map.of("id", "t1")));
|
|
ResponseEntity<Map> mockResponse = new ResponseEntity<>(mockBody, HttpStatus.OK);
|
|
|
|
when(restTemplate.exchange(
|
|
any(String.class),
|
|
eq(HttpMethod.GET),
|
|
any(HttpEntity.class),
|
|
eq(Map.class)
|
|
)).thenReturn(mockResponse);
|
|
|
|
ResponseEntity<Map> response = cloudflareAPIService.getCloudflareTunnels();
|
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
|
}
|
|
|
|
|
|
@Test
|
|
void getCloudflareTunnelConfigurations() throws JsonProcessingException {
|
|
|
|
when(cloudflareConfig.getAccountId()).thenReturn("account-123");
|
|
when(authKeyEmailHeader.getHttpHeaders()).thenReturn(new HttpHeaders());
|
|
|
|
TunnelResponse tunnelResponse = new ObjectMapper().readValue(bigTunnelResponse, TunnelResponse.class);
|
|
ResponseEntity<TunnelResponse> tunnelResponseResponseEntity = new ResponseEntity<>(tunnelResponse, HttpStatus.OK);
|
|
|
|
when(restTemplate.exchange(
|
|
any(String.class),
|
|
eq(HttpMethod.GET),
|
|
any(HttpEntity.class),
|
|
eq(TunnelResponse.class)
|
|
)).thenReturn(tunnelResponseResponseEntity);
|
|
|
|
ResponseEntity<TunnelResponse> response = cloudflareAPIService.getCloudflareTunnelConfigurations("sampleTunnelID", restTemplate, TunnelResponse.class);
|
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
|
assertEquals(response.getBody().getResult().getConfig().getIngress().get(0).getHostname(), "giteabkp.hithomelabs.com");
|
|
}
|
|
|
|
@Test
|
|
void putCloudflareTunnelConfigurations() throws JsonProcessingException {
|
|
|
|
when(cloudflareConfig.getAccountId()).thenReturn("account-123");
|
|
when(authKeyEmailHeader.getHttpHeaders()).thenReturn(new HttpHeaders());
|
|
|
|
TunnelResponse tunnelResponse = new ObjectMapper().readValue(bigTunnelResponse, TunnelResponse.class);
|
|
ResponseEntity<TunnelResponse> tunnelResponseResponseEntity = new ResponseEntity<>(tunnelResponse, HttpStatus.OK);
|
|
|
|
Config config = tunnelResponse.getResult().getConfig();
|
|
|
|
when(restTemplate.exchange(
|
|
any(String.class),
|
|
eq(HttpMethod.PUT),
|
|
any(HttpEntity.class),
|
|
eq(TunnelResponse.class)
|
|
)).thenReturn(tunnelResponseResponseEntity);
|
|
|
|
ResponseEntity<TunnelResponse> response = cloudflareAPIService.putCloudflareTunnelConfigurations("sampleTunnelID", restTemplate, TunnelResponse.class, config);
|
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
|
assertEquals(response.getBody().getResult().getConfig().getIngress().get(2).getHostname(), "random.hithomelabs.com");
|
|
}
|
|
} |