109 lines
4.5 KiB
Java
109 lines
4.5 KiB
Java
package com.hithomelabs.cftunnels.Integration;
|
|
|
|
import com.hithomelabs.cftunnels.Config.CloudflareConfig;
|
|
import com.hithomelabs.cftunnels.Headers.AuthKeyEmailHeader;
|
|
import com.hithomelabs.cftunnels.Models.Config;
|
|
import com.hithomelabs.cftunnels.Models.Ingress;
|
|
import com.hithomelabs.cftunnels.Models.TunnelResponse;
|
|
import com.hithomelabs.cftunnels.Models.TunnelResult;
|
|
import com.hithomelabs.cftunnels.Models.TunnelsResponse;
|
|
import com.hithomelabs.cftunnels.Services.CloudflareAPIService;
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.junit.jupiter.api.Tag;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.boot.test.context.SpringBootTest;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.test.context.ActiveProfiles;
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
import java.util.List;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
@ActiveProfiles("integration")
|
|
@Tag("integration")
|
|
public class CoudflareApiIntegrationTest {
|
|
|
|
@Autowired
|
|
RestTemplate restTemplate;
|
|
|
|
@Autowired
|
|
AuthKeyEmailHeader authKeyEmailHeader;
|
|
|
|
@Autowired
|
|
CloudflareConfig cloudflareConfig;
|
|
|
|
@Autowired
|
|
CloudflareAPIService cloudflareAPIService;
|
|
|
|
private static final String DEV_TUNNEL_ID = "50df9101-f625-4618-b7c5-100338a57124";
|
|
|
|
@Test
|
|
@DisplayName("Calls cloudflare cfd tunnels API and checks that dev tunnel should be a part of the response")
|
|
public void testGetTunnelsTest() {
|
|
|
|
ResponseEntity<TunnelsResponse> response = cloudflareAPIService.getCloudflareTunnels();
|
|
|
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
|
|
|
List<TunnelResult> tunnelList = response.getBody().getResult();
|
|
boolean hasName = tunnelList.stream()
|
|
.anyMatch(tunnel -> "devtunnel".equals(tunnel.getName()));
|
|
|
|
assertTrue(hasName);
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Calls cloudflare API to get mappings for devtunnel tunnel")
|
|
public void testTunnelConfigurations() {
|
|
|
|
ResponseEntity<TunnelResponse> responseEntity = cloudflareAPIService.getCloudflareTunnelConfigurations(DEV_TUNNEL_ID, restTemplate, TunnelResponse.class);
|
|
|
|
// * * Check if status code is 200
|
|
assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
|
|
|
|
// * * Checking if mapping for devdocker exists
|
|
TunnelResponse tunnelResponse = responseEntity.getBody();
|
|
boolean hasMatch = tunnelResponse.getResult().getConfig().getIngress().stream()
|
|
.anyMatch(ingress -> "devdocker.hithomelabs.com".equals(ingress.getHostname()));
|
|
assertTrue(hasMatch);
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("Inserts and deletes a mapping using Cloudflare API")
|
|
public void testAddAndDeleteMapping() {
|
|
|
|
ResponseEntity<TunnelResponse> beforeMapping = cloudflareAPIService.getCloudflareTunnelConfigurations(DEV_TUNNEL_ID, restTemplate, TunnelResponse.class);
|
|
|
|
assertEquals(HttpStatus.OK, beforeMapping.getStatusCode());
|
|
|
|
Ingress ingress = new Ingress();
|
|
ingress.setHostname("random.hithomelabs.com");
|
|
ingress.setService("http://192.168.0.100:3457");
|
|
|
|
Config beforeInsertConfig = beforeMapping.getBody().getResult().getConfig();
|
|
List<Ingress> beforeInsert = beforeInsertConfig.getIngress();
|
|
beforeInsert.add(beforeInsert.size() - 1, ingress);
|
|
|
|
ResponseEntity<TunnelResponse> afterInsert = cloudflareAPIService.putCloudflareTunnelConfigurations(DEV_TUNNEL_ID, restTemplate, TunnelResponse.class, beforeInsertConfig);
|
|
|
|
assertEquals(HttpStatus.OK, afterInsert.getStatusCode());
|
|
Config afterInsertConfig = afterInsert.getBody().getResult().getConfig();
|
|
List<Ingress> ingressList = afterInsertConfig.getIngress();
|
|
|
|
boolean hasIngress = ingressList.get(ingressList.size() - 2 ).getHostname().equals("random.hithomelabs.com");
|
|
assertTrue(hasIngress);
|
|
|
|
Boolean deleteSuccess = Ingress.deleteByHostName(ingressList, ingress.getHostname());
|
|
assertTrue(deleteSuccess);
|
|
|
|
ResponseEntity<TunnelResponse> afterDelete = cloudflareAPIService.putCloudflareTunnelConfigurations(DEV_TUNNEL_ID, restTemplate, TunnelResponse.class, afterInsertConfig);
|
|
assertEquals(HttpStatus.OK, afterDelete.getStatusCode());
|
|
assertFalse(afterDelete.getBody().getResult().getConfig().getIngress().stream().anyMatch(anyIngress -> "random.hithomelabs.com".equals(anyIngress.getHostname())));
|
|
}
|
|
|
|
}
|