Add test to package a standard Flux Artifact by jonesbusy · Pull Request #576 · oras-project/oras-java
@@ -0,0 +1,88 @@
/*-
* =LICENSE=
* ORAS Java SDK
* ===
* Copyright (C) 2024 - 2026 ORAS
* ===
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =LICENSEEND=
*/
package land.oras;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import land.oras.utils.Const; import land.oras.utils.ZotUnsecureContainer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers;
@Testcontainers @Execution(ExecutionMode.CONCURRENT) class FluxCDITCase {
@TempDir Path tempDir;
@Container private final ZotUnsecureContainer unsecureRegistry = new ZotUnsecureContainer().withStartupAttempts(3);
/** * This test demonstrate how to assemble a Flux CD OCI Artifact */ @Test void shouldAssembleArtifact() {
// The compressed manifests Path archive = Paths.get("src/test/resources/archives").resolve("flux-manifests.tgz"); String configMediaType = "application/vnd.cncf.flux.config.v1+json"; String contentMediaType = "application/vnd.cncf.flux.content.v1.tar+gzip";
Map<String, String> annotations = Map.of( Const.ANNOTATION_REVISION, "@sha1:6d63912ed9a9443dd01fbfd2991173a246050079", Const.ANNOTATION_SOURCE, "git@github.com:jonesbusy/oras-java.git", Const.ANNOTATION_CREATED, Const.currentTimestamp());
// Create objects Config config = Config.empty().withMediaType(configMediaType); Layer layer = Layer.fromFile(archive).withMediaType(contentMediaType); Manifest manifest = Manifest.empty().withConfig(config).withLayers(List.of(layer)).withAnnotations(annotations);
// Push config, layers and manifest to registry Registry registry = Registry.builder() .insecure() .withRegistry(unsecureRegistry.getRegistry()) .build(); ContainerRef containerRef = ContainerRef.parse("manifests:latest");
registry.pushConfig(containerRef, config); registry.pushBlob(containerRef, archive); registry.pushManifest(containerRef, manifest);
// Ensure we can pull Manifest createdManifest = registry.getManifest(containerRef); assertNotNull(createdManifest);
// We can test pull with flux pull artifact oci://localhost:<port>/manifests:latest --output .
} }
package land.oras;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.Map; import land.oras.utils.Const; import land.oras.utils.ZotUnsecureContainer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers;
@Testcontainers @Execution(ExecutionMode.CONCURRENT) class FluxCDITCase {
@TempDir Path tempDir;
@Container private final ZotUnsecureContainer unsecureRegistry = new ZotUnsecureContainer().withStartupAttempts(3);
/** * This test demonstrate how to assemble a Flux CD OCI Artifact */ @Test void shouldAssembleArtifact() {
// The compressed manifests Path archive = Paths.get("src/test/resources/archives").resolve("flux-manifests.tgz"); String configMediaType = "application/vnd.cncf.flux.config.v1+json"; String contentMediaType = "application/vnd.cncf.flux.content.v1.tar+gzip";
Map<String, String> annotations = Map.of( Const.ANNOTATION_REVISION, "@sha1:6d63912ed9a9443dd01fbfd2991173a246050079", Const.ANNOTATION_SOURCE, "git@github.com:jonesbusy/oras-java.git", Const.ANNOTATION_CREATED, Const.currentTimestamp());
// Create objects Config config = Config.empty().withMediaType(configMediaType); Layer layer = Layer.fromFile(archive).withMediaType(contentMediaType); Manifest manifest = Manifest.empty().withConfig(config).withLayers(List.of(layer)).withAnnotations(annotations);
// Push config, layers and manifest to registry Registry registry = Registry.builder() .insecure() .withRegistry(unsecureRegistry.getRegistry()) .build(); ContainerRef containerRef = ContainerRef.parse("manifests:latest");
registry.pushConfig(containerRef, config); registry.pushBlob(containerRef, archive); registry.pushManifest(containerRef, manifest);
// Ensure we can pull Manifest createdManifest = registry.getManifest(containerRef); assertNotNull(createdManifest);
// We can test pull with flux pull artifact oci://localhost:<port>/manifests:latest --output .
} }