Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions src/test/java/land/oras/FluxCDITCase.java
Original file line number Diff line number Diff line change
@@ -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 .

}
}
2 changes: 1 addition & 1 deletion src/test/java/land/oras/utils/ArchiveUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ void shouldCreateTarGzAndExtractIt() throws Exception {
}

@ParameterizedTest
@ValueSource(strings = {"jenkins-chart.tgz", "jenkins-sources.tar.gz"})
@ValueSource(strings = {"jenkins-chart.tgz", "jenkins-sources.tar.gz", "flux-manifests.tgz"})
@Disabled("https://issues.apache.org/jira/browse/COMPRESS-705")
void shouldExtractSeveralExistingArchive(String file) {
Path archive = Paths.get("src/test/resources/archives").resolve(file);
Expand Down
Binary file not shown.