Skip to content

Commit

Permalink
Fixes #376 - Separate Docker container into Maven profile for Azure S… (
Browse files Browse the repository at this point in the history
  • Loading branch information
mnriem committed Mar 29, 2024
1 parent b56ca86 commit 989be55
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 72 deletions.
153 changes: 81 additions & 72 deletions azure-storage/pom.xml
Expand Up @@ -40,7 +40,7 @@
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-data-appconfiguration</artifactId>
<artifactId>azure-storage-blob</artifactId>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -100,77 +100,86 @@
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker-maven-plugin.version}</version>
<configuration>
<images>
<image>
<alias>ocelot-azure-storage</alias>
<name>ghcr.io/manorrock/ocelot-azure-storage:%l</name>
<build>
<buildx>
<platforms>
<platform>linux/amd64</platform>
<platform>linux/arm64</platform>
</platforms>
</buildx>
<contextDir>${basedir}</contextDir>
<dockerFile>src/main/docker/Dockerfile</dockerFile>
</build>
<run>
<ports>
<port>8103:8103</port>
<port>8203:8203</port>
</ports>
<volumes>
<bind>
<volume>${basedir}/src/test/certs:/home/piranha/certs</volume>
</bind>
</volumes>
<wait>
<http>
<url>http://localhost:8103/ping</url>
</http>
<time>20000</time>
</wait>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>build</id>
<phase>none</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>build</goal>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
<execution>
<id>push</id>
<phase>none</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>docker</id>
<build>
<plugins>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker-maven-plugin.version}</version>
<configuration>
<images>
<image>
<alias>ocelot-azure-storage</alias>
<name>ghcr.io/manorrock/ocelot-azure-storage:%l</name>
<build>
<buildx>
<platforms>
<platform>linux/amd64</platform>
<platform>linux/arm64</platform>
</platforms>
</buildx>
<contextDir>${basedir}</contextDir>
<dockerFile>src/main/docker/Dockerfile</dockerFile>
</build>
<run>
<ports>
<port>8103:8103</port>
<port>8203:8203</port>
</ports>
<volumes>
<bind>
<volume>${basedir}/src/test/certs:/home/piranha/certs</volume>
</bind>
</volumes>
<wait>
<http>
<url>http://localhost:8103/ping</url>
</http>
<time>20000</time>
</wait>
</run>
</image>
</images>
</configuration>
<executions>
<execution>
<id>build</id>
<phase>none</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>start</id>
<phase>pre-integration-test</phase>
<goals>
<goal>build</goal>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
<execution>
<id>push</id>
<phase>none</phase>
<goals>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
41 changes: 41 additions & 0 deletions azure-storage/src/main/java/storage/ContainerResource.java
@@ -0,0 +1,41 @@
package storage;

import jakarta.inject.Singleton;
import jakarta.ws.rs.PUT;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.core.Response;
import static jakarta.ws.rs.core.Response.Status.CREATED;
import java.util.ArrayList;
import java.util.List;

/**
* @author Manfred Riem (mriem@manorrock.com)
*/
@Path("")
@Singleton
public class ContainerResource {

/**
* Stores the secrets.
*/
private final List<String> containerNames = new ArrayList<>();

/**
* Create the container.
*
* @param containerName the container name.
* @return the response.
*/
@Path("{containerName}?restype=container")
@PUT
public Response createContainer(
@PathParam("containerName") String containerName) {

if (!containerNames.contains(containerName)) {
containerNames.add(containerName);
return Response.status(CREATED).header("Connection", "close").build();
}
return Response.serverError().build();
}
}
51 changes: 51 additions & 0 deletions azure-storage/src/test/java/storage/StorageIT.java
@@ -0,0 +1,51 @@
package storage;

import com.azure.core.credential.BasicAuthenticationCredential;
import com.azure.core.credential.TokenCredential;
import static com.azure.core.http.policy.HttpLogDetailLevel.BODY_AND_HEADERS;
import com.azure.core.http.policy.HttpLogOptions;
import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobContainerClientBuilder;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

/**
* The integration tests to test our simulated Azure Storage.
*
* @author Manfred Riem (mriem@manorrock.com)
*/
public class StorageIT {

/**
* Stores the credential.
*/
private TokenCredential credential;

/**
* Setup the credential.
*/
@BeforeEach
public void setUp() {
credential = new BasicAuthenticationCredential("username", "password");
}

/**
* Test creating blob container.
*/
@Test
@Disabled
public void testCreateBlobContainer() {

BlobContainerClient blobContainerClient = new BlobContainerClientBuilder()
.endpoint("https://localhost:8203")
.credential(credential)
.containerName("myBlobContainer")
.httpLogOptions(new HttpLogOptions().setLogLevel(BODY_AND_HEADERS))
.buildClient();

blobContainerClient.create();
assertEquals("myBlobContainer", blobContainerClient.getBlobContainerName());
}
}

0 comments on commit 989be55

Please sign in to comment.