load docker image before test for CatalogWatchIT (#1152)

This commit is contained in:
erabii
2022-11-29 15:45:28 +02:00
committed by GitHub
parent 581dd5e776
commit f7d8a5d03d
3 changed files with 52 additions and 36 deletions

View File

@@ -63,21 +63,29 @@ class CatalogWatchIT {
private static KubernetesClient client;
private String busyboxServiceName;
private static String busyboxServiceName;
private String busyboxDeploymentName;
private static String busyboxDeploymentName;
private String appDeploymentName;
private static String appDeploymentName;
private String appServiceName;
private static String appServiceName;
private String appIngressName;
private static String appIngressName;
@BeforeAll
static void beforeAll() {
static void beforeAll() throws Exception {
K3S.start();
Config config = Config.fromKubeconfig(K3S.getKubeConfigYaml());
client = new DefaultKubernetesClient(config);
Commons.validateImage(APP_NAME, K3S);
Commons.loadSpringCloudKubernetesImage(APP_NAME, K3S);
Fabric8Utils.setUp(client, "default");
deployBusyboxManifests();
deployApp();
}
/**
@@ -90,15 +98,7 @@ class CatalogWatchIT {
*/
@SuppressWarnings("unchecked")
@Test
void testCatalogWatch() throws Exception {
Commons.validateImage(APP_NAME, K3S);
Commons.loadSpringCloudKubernetesImage(APP_NAME, K3S);
Fabric8Utils.setUp(client, "default");
deployBusyboxManifests();
deployApp();
void testCatalogWatch() {
WebClient client = builder().baseUrl("localhost/result").build();
EndpointNameAndNamespace[] holder = new EndpointNameAndNamespace[2];
@@ -106,8 +106,8 @@ class CatalogWatchIT {
await().pollInterval(Duration.ofSeconds(1)).atMost(Duration.ofSeconds(240)).until(() -> {
List<EndpointNameAndNamespace> result = (List<EndpointNameAndNamespace>) client.method(HttpMethod.GET)
.retrieve().bodyToMono(ParameterizedTypeReference.forType(resolvableType.getType()))
.retryWhen(retrySpec()).block();
.retrieve().bodyToMono(ParameterizedTypeReference.forType(resolvableType.getType()))
.retryWhen(retrySpec()).block();
// we get 3 pods as input, but because they are sorted by name in the catalog
// watcher implementation
@@ -139,8 +139,8 @@ class CatalogWatchIT {
await().pollInterval(Duration.ofSeconds(1)).atMost(Duration.ofSeconds(240)).until(() -> {
List<EndpointNameAndNamespace> result = (List<EndpointNameAndNamespace>) client.method(HttpMethod.GET)
.retrieve().bodyToMono(ParameterizedTypeReference.forType(resolvableType.getType()))
.retryWhen(retrySpec()).block();
.retrieve().bodyToMono(ParameterizedTypeReference.forType(resolvableType.getType()))
.retryWhen(retrySpec()).block();
// we will only receive one pod here, our own
if (result != null) {
@@ -159,9 +159,14 @@ class CatalogWatchIT {
}
private void deployBusyboxManifests() {
private static void deployBusyboxManifests() throws Exception {
Deployment deployment = client.apps().deployments().load(getBusyboxDeployment()).get();
String[] image = K8SUtils.getImageFromDeployment(deployment).split(":");
Commons.pullImage(image[0], image[1], K3S);
Commons.loadImage(image[0], image[1], "busybox", K3S);
client.apps().deployments().inNamespace(NAMESPACE).create(deployment);
busyboxDeploymentName = deployment.getMetadata().getName();
@@ -173,7 +178,7 @@ class CatalogWatchIT {
}
private void deployApp() {
private static void deployApp() {
Deployment appDeployment = client.apps().deployments().load(getAppDeployment()).get();

View File

@@ -17,6 +17,6 @@ spec:
containers:
- name: busybox
# image: arm64/busybox:latest
image: busybox:latest
image: busybox:1.35
command: ["/bin/sh"]
args: ["-c", "sleep 100000"]

View File

@@ -24,6 +24,9 @@ import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import com.github.dockerjava.api.command.ListImagesCmd;
import com.github.dockerjava.api.command.PullImageCmd;
import com.github.dockerjava.api.command.SaveImageCmd;
import com.github.dockerjava.api.model.Image;
import org.testcontainers.containers.Container;
import org.testcontainers.k3s.K3sContainer;
@@ -78,14 +81,17 @@ public final class Commons {
public static void loadImage(String image, String tag, String tarName, K3sContainer container) throws Exception {
// save image
InputStream imageStream = container.getDockerClient().saveImageCmd(image).withTag(tag).exec();
try (SaveImageCmd saveImageCmd = container.getDockerClient().saveImageCmd(image)) {
InputStream imageStream = saveImageCmd.withTag(tag).exec();
Path imagePath = Paths.get(TEMP_FOLDER + "/" + tarName + ".tar");
Files.deleteIfExists(imagePath);
Files.copy(imageStream, imagePath);
// import image with ctr. this works because TEMP_FOLDER is mounted in the
// container
container.execInContainer("ctr", "i", "import", TEMP_FOLDER + "/" + tarName + ".tar");
}
Path imagePath = Paths.get(TEMP_FOLDER + "/" + tarName + ".tar");
Files.deleteIfExists(imagePath);
Files.copy(imageStream, imagePath);
// import image with ctr. this works because TEMP_FOLDER is mounted in the
// container
container.execInContainer("ctr", "i", "import", TEMP_FOLDER + "/" + tarName + ".tar");
}
public static void cleanUp(String image, K3sContainer container) throws Exception {
@@ -101,16 +107,21 @@ public final class Commons {
* validates that the provided image does exist in the local docker registry.
*/
public static void validateImage(String image, K3sContainer container) {
List<Image> images = container.getDockerClient().listImagesCmd().exec();
images.stream()
.filter(x -> Arrays.stream(x.getRepoTags() == null ? new String[] {} : x.getRepoTags())
.anyMatch(y -> y.contains(image)))
.findFirst().orElseThrow(() -> new IllegalArgumentException("Image : " + image + " not build locally. "
+ "You need to build it first, and then run the test"));
try (ListImagesCmd listImagesCmd = container.getDockerClient().listImagesCmd()) {
List<Image> images = listImagesCmd.exec();
images.stream()
.filter(x -> Arrays.stream(x.getRepoTags() == null ? new String[] {} : x.getRepoTags())
.anyMatch(y -> y.contains(image)))
.findFirst().orElseThrow(() -> new IllegalArgumentException("Image : " + image
+ " not build locally. " + "You need to build it first, and then run the test"));
}
}
public static void pullImage(String image, String tag, K3sContainer container) throws InterruptedException {
container.getDockerClient().pullImageCmd(image).withTag(tag).start().awaitCompletion();
try (PullImageCmd pullImageCmd = container.getDockerClient().pullImageCmd(image)) {
pullImageCmd.withTag(tag).start().awaitCompletion();
}
}
public static String processExecResult(Container.ExecResult execResult) {