CFTunnels/cftunnels-service/src/test/java/com/hithomelabs/cftunnels/Integration/CoudflareApiIntegrationTest.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())));
}
}