Skip to content

Commit fa79592

Browse files
authored
Fix mount for insecure registry (parameter order) (#652)
Signed-off-by: Valentin Delaye <jonesbusy@users.noreply.github.com>
1 parent 64ae87a commit fa79592

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

src/main/java/land/oras/Registry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public boolean mountBlob(ContainerRef sourceRef, ContainerRef targetRef) {
155155
}
156156
ContainerRef ref = targetRef.forRegistry(this).checkBlocked(this);
157157
if (ref.isInsecure(this) && !this.isInsecure()) {
158-
return asInsecure().mountBlob(targetRef, sourceRef);
158+
return asInsecure().mountBlob(sourceRef, targetRef);
159159
}
160160
URI uri = URI.create("%s://%s".formatted(getScheme(), ref.getBlobsMountPath(this, sourceRef)));
161161
HttpClient.ResponseWrapper<String> response = client.post(

src/test/java/land/oras/RegistryTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,54 @@ void shouldCheckIfCanMount() throws IOException {
283283
"Should not mount if different reference type");
284284
}
285285

286+
@Test
287+
void shouldMountWithInsecureRegistry(@TempDir Path homeDir) throws Exception {
288+
289+
// language=toml
290+
String config =
291+
"""
292+
[[registry]]
293+
location = "%s"
294+
insecure = true
295+
"""
296+
.formatted(this.unsecureRegistry.getRegistry());
297+
TestUtils.createRegistriesConfFile(homeDir, config);
298+
299+
TestUtils.withHome(homeDir, () -> {
300+
Registry registry = Registry.builder()
301+
.defaults(this.unsecureRegistry.getRegistry())
302+
.build();
303+
304+
byte[] content = "foo".getBytes(StandardCharsets.UTF_8);
305+
String digest = SupportedAlgorithm.getDefault().digest(content);
306+
ContainerRef sourceRef = ContainerRef.parse("library/artifact-mount-insecure-source");
307+
ContainerRef targetRef = ContainerRef.parse("library/artifact-mount-insecure-target");
308+
Layer layer = registry.pushBlob(sourceRef.withDigest(digest), content);
309+
registry.mountBlob(sourceRef.withDigest(digest), targetRef.withDigest(digest));
310+
311+
// Ensure we can reference from both artifact
312+
Manifest manifestSource = Manifest.empty().withLayers(List.of(layer));
313+
Manifest manifestTarget = Manifest.empty().withLayers(List.of(layer));
314+
315+
// Push the empty config
316+
registry.pushConfig(sourceRef, Config.empty());
317+
318+
// Mount also the config
319+
String configDigest = Config.empty().getDigest();
320+
assertNotNull(configDigest, "Config digest should not be null");
321+
registry.mountBlob(sourceRef.withDigest(configDigest), targetRef.withDigest(configDigest));
322+
323+
registry.pushManifest(sourceRef, manifestSource);
324+
registry.pushManifest(targetRef, manifestTarget);
325+
assertThrows(
326+
OrasException.class,
327+
() -> {
328+
registry.mountBlob(sourceRef, targetRef.withDigest(configDigest));
329+
},
330+
"Missing digest");
331+
});
332+
}
333+
286334
@Test
287335
void shouldMount() {
288336
Registry registry = Registry.builder()

0 commit comments

Comments
 (0)