Skip to content

Commit 1bcd75e

Browse files
committed
Some test code cleanup
Signed-off-by: Valentin Delaye <jonesbusy@users.noreply.github.com>
1 parent e652f07 commit 1bcd75e

10 files changed

Lines changed: 354 additions & 353 deletions

File tree

src/main/java/land/oras/ContainerRef.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ public boolean isInsecure(Registry registry) {
423423
String effectiveRegistry = getEffectiveRegistry(registry);
424424
ContainerRef effectiveRef = forRegistry(effectiveRegistry);
425425
if (registry.getRegistriesConf().isInsecure(effectiveRef)) {
426-
LOG.info(
426+
LOG.debug(
427427
"Access to container reference {} is insecure by location configuration for registry {}",
428428
this,
429429
effectiveRegistry);
@@ -474,10 +474,10 @@ public ContainerRef forRegistry(Registry registry) {
474474
if (registry.getRegistry() == null && registry.getRegistriesConf().hasAlias(key)) {
475475
String newLocation = registry.getRegistriesConf().getAliases().get(key);
476476
String newRefString = "%s:%s".formatted(newLocation, tag);
477-
LOG.info("Using {} as an alias to {}", key, newRefString);
477+
LOG.debug("Using {} as an alias to {}", key, newRefString);
478478
return ContainerRef.parse(newRefString);
479479
}
480-
LOG.info(
480+
LOG.debug(
481481
"The container reference {} was created without a registry. Will try to resolve using unqualified-search-registries in order",
482482
this);
483483
return new ContainerRef(

src/main/java/land/oras/auth/HttpClient.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
package land.oras.auth;
2222

23+
import java.io.FileNotFoundException;
2324
import java.io.InputStream;
2425
import java.net.*;
2526
import java.net.http.HttpRequest;
@@ -228,8 +229,8 @@ public ResponseWrapper<String> upload(
228229
HttpRequest.BodyPublishers.ofFile(file),
229230
scopes,
230231
authProvider);
231-
} catch (Exception e) {
232-
throw new OrasException("Unable to upload file", e);
232+
} catch (FileNotFoundException e) {
233+
throw new OrasException("Unable to upload file. File not found.", e);
233234
}
234235
}
235236

@@ -360,12 +361,12 @@ public <T> TokenResponse refreshToken(
360361
String wwwAuthHeader = response.headers().getOrDefault(Const.WWW_AUTHENTICATE_HEADER.toLowerCase(), "");
361362
LOG.debug("WWW-Authenticate header: {}", wwwAuthHeader);
362363
if (wwwAuthHeader.isEmpty()) {
363-
throw new OrasException("No WWW-Authenticate header found in response");
364+
throw new OrasException(response.statusCode(), "No WWW-Authenticate header found in response");
364365
}
365366

366367
Matcher matcher = WWW_AUTH_VALUE_PATTERN.matcher(wwwAuthHeader);
367368
if (!matcher.matches()) {
368-
throw new OrasException("Invalid WWW-Authenticate header value: " + wwwAuthHeader);
369+
throw new OrasException(response.statusCode(), "Invalid WWW-Authenticate header");
369370
}
370371

371372
// Extract parts
@@ -496,6 +497,9 @@ private <T> ResponseWrapper<T> executeRequest(
496497
}
497498
return redoRequest(response, builder, handler, newScopes, authProvider);
498499
} catch (Exception e) {
500+
if (e instanceof OrasException) {
501+
throw (OrasException) e;
502+
}
499503
LOG.error("Failed to execute request", e);
500504
throw new OrasException("Unable to create HTTP request", e);
501505
}

src/main/java/land/oras/exception/OrasException.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,16 @@ public OrasException(HttpClient.ResponseWrapper<String> response) {
7070
}
7171
}
7272

73+
/**
74+
* Constructor
75+
* @param statusCode The status code
76+
* @param message The message
77+
*/
78+
public OrasException(int statusCode, String message) {
79+
this(message);
80+
this.statusCode = statusCode;
81+
}
82+
7383
/**
7484
* Constructor
7585
* @param message The message

src/test/java/land/oras/ContainerRefTest.java

Lines changed: 70 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -22,51 +22,22 @@
2222

2323
import static org.junit.jupiter.api.Assertions.*;
2424

25-
import java.nio.file.Files;
2625
import java.nio.file.Path;
2726
import land.oras.exception.OrasException;
2827
import land.oras.utils.SupportedAlgorithm;
29-
import org.junit.jupiter.api.BeforeAll;
3028
import org.junit.jupiter.api.Test;
3129
import org.junit.jupiter.api.io.TempDir;
3230
import org.junit.jupiter.api.parallel.Execution;
3331
import org.junit.jupiter.api.parallel.ExecutionMode;
34-
import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
3532

3633
/**
3734
* Tests for {@link ContainerRef}.
3835
*/
3936
@Execution(ExecutionMode.CONCURRENT)
4037
class ContainerRefTest {
4138

42-
@TempDir
43-
private static Path homeDir1;
44-
45-
@TempDir
46-
private static Path homeDir2;
47-
48-
@TempDir
49-
private static Path homeDir3;
50-
51-
@TempDir
52-
private static Path homeDir4;
53-
54-
@BeforeAll
55-
static void init() throws Exception {
56-
57-
// Write home registries.conf on the temp home directory
58-
Files.createDirectory(homeDir1.resolve(".config"));
59-
Files.createDirectory(homeDir1.resolve(".config").resolve("containers"));
60-
Files.createDirectory(homeDir2.resolve(".config"));
61-
Files.createDirectory(homeDir2.resolve(".config").resolve("containers"));
62-
Files.createDirectory(homeDir3.resolve(".config"));
63-
Files.createDirectory(homeDir3.resolve(".config").resolve("containers"));
64-
Files.createDirectory(homeDir4.resolve(".config"));
65-
Files.createDirectory(homeDir4.resolve(".config").resolve("containers"));
66-
}
67-
6839
@Test
69-
void shouldReadRegistriesConfig() throws Exception {
40+
void shouldReadRegistriesConfig(@TempDir Path homeDir) throws Exception {
7041
// language=toml
7142
String config =
7243
"""
@@ -83,35 +54,30 @@ void shouldReadRegistriesConfig() throws Exception {
8354
insecure = true
8455
""";
8556

86-
Files.writeString(homeDir1.resolve(".config").resolve("containers").resolve("registries.conf"), config);
87-
88-
new EnvironmentVariables()
89-
.set("HOME", homeDir1.toAbsolutePath().toString())
90-
.execute(() -> {
91-
Registry registry = Registry.builder().defaults().build();
92-
assertEquals("https", registry.getScheme());
93-
assertTrue(ContainerRef.parse("public.ecr.aws/whatever").isBlocked(registry));
94-
assertFalse(ContainerRef.parse("docker.io/library/whatever").isInsecure(registry));
95-
assertTrue(ContainerRef.parse("docker.io/library/whatever").isInsecure(registry.asInsecure()));
96-
assertTrue(ContainerRef.parse("docker.io/library/alpine:latest")
97-
.isBlocked(registry));
98-
assertFalse(ContainerRef.parse("docker.io/library/alpine:latest")
99-
.isInsecure(registry));
100-
assertFalse(
101-
ContainerRef.parse("docker.io/library/test:latest").isBlocked(registry));
102-
assertTrue(ContainerRef.parse("localhost:5000/library/test").isInsecure(registry));
103-
assertThrows(
104-
OrasException.class,
105-
() -> registry.getIndex(ContainerRef.parse("public.ecr.aws/docker/library/alpine:latest")));
106-
assertThrows(
107-
OrasException.class,
108-
() -> registry.getIndex(ContainerRef.parse("docker.io/library/alpine:latest")));
109-
assertDoesNotThrow(() -> registry.getIndex(ContainerRef.parse("docker.io/library/mongo:latest")));
110-
});
57+
TestUtils.createRegistriesConfFile(homeDir, config);
58+
59+
TestUtils.withHome(homeDir, () -> {
60+
Registry registry = Registry.builder().defaults().build();
61+
assertEquals("https", registry.getScheme());
62+
assertTrue(ContainerRef.parse("public.ecr.aws/whatever").isBlocked(registry));
63+
assertFalse(ContainerRef.parse("docker.io/library/whatever").isInsecure(registry));
64+
assertTrue(ContainerRef.parse("docker.io/library/whatever").isInsecure(registry.asInsecure()));
65+
assertTrue(ContainerRef.parse("docker.io/library/alpine:latest").isBlocked(registry));
66+
assertFalse(ContainerRef.parse("docker.io/library/alpine:latest").isInsecure(registry));
67+
assertFalse(ContainerRef.parse("docker.io/library/test:latest").isBlocked(registry));
68+
assertTrue(ContainerRef.parse("localhost:5000/library/test").isInsecure(registry));
69+
assertThrows(
70+
OrasException.class,
71+
() -> registry.getIndex(ContainerRef.parse("public.ecr.aws/docker/library/alpine:latest")));
72+
assertThrows(
73+
OrasException.class,
74+
() -> registry.getIndex(ContainerRef.parse("docker.io/library/alpine:latest")));
75+
assertDoesNotThrow(() -> registry.getIndex(ContainerRef.parse("docker.io/library/mongo:latest")));
76+
});
11177
}
11278

11379
@Test
114-
void shouldDetermineFromAlias() throws Exception {
80+
void shouldDetermineFromAlias(@TempDir Path homeDir) throws Exception {
11581

11682
// language=toml
11783
String config =
@@ -121,21 +87,19 @@ void shouldDetermineFromAlias() throws Exception {
12187
"my-library"="localhost/test2"
12288
""";
12389

124-
Files.writeString(homeDir2.resolve(".config").resolve("containers").resolve("registries.conf"), config);
125-
126-
new EnvironmentVariables()
127-
.set("HOME", homeDir2.toAbsolutePath().toString())
128-
.execute(() -> {
129-
Registry registry = Registry.builder().defaults().build();
130-
ContainerRef unqualifiedRef = ContainerRef.parse("my-library/my-namespace");
131-
assertEquals("localhost/test", unqualifiedRef.getEffectiveRegistry(registry));
132-
ContainerRef unqualifiedRef2 = ContainerRef.parse("my-library");
133-
assertEquals("localhost/test2", unqualifiedRef2.getEffectiveRegistry(registry));
134-
});
90+
TestUtils.createRegistriesConfFile(homeDir, config);
91+
92+
TestUtils.withHome(homeDir, () -> {
93+
Registry registry = Registry.builder().defaults().build();
94+
ContainerRef unqualifiedRef = ContainerRef.parse("my-library/my-namespace");
95+
assertEquals("localhost/test", unqualifiedRef.getEffectiveRegistry(registry));
96+
ContainerRef unqualifiedRef2 = ContainerRef.parse("my-library");
97+
assertEquals("localhost/test2", unqualifiedRef2.getEffectiveRegistry(registry));
98+
});
13599
}
136100

137101
@Test
138-
void shouldRewriteAllSubdomainToLocalProxy() throws Exception {
102+
void shouldRewriteAllSubdomainToLocalProxy(@TempDir Path homeDir) throws Exception {
139103

140104
// language=toml
141105
String config =
@@ -149,41 +113,39 @@ void shouldRewriteAllSubdomainToLocalProxy() throws Exception {
149113
location = "localhost:5001/docker"
150114
""";
151115

152-
Files.writeString(homeDir3.resolve(".config").resolve("containers").resolve("registries.conf"), config);
153-
154-
new EnvironmentVariables()
155-
.set("HOME", homeDir3.toAbsolutePath().toString())
156-
.execute(() -> {
157-
Registry registry = Registry.builder().defaults().build();
158-
159-
// One subdomain
160-
ContainerRef containerRef = ContainerRef.parse("toto.example.com/library/alpine:latest");
161-
assertEquals("localhost:5000", containerRef.getEffectiveRegistry(registry));
162-
ContainerRef newRef = registry.getRegistriesConf().rewrite(containerRef);
163-
assertEquals("localhost:5000/example-com/library/alpine:latest", newRef.toString());
164-
165-
// Several subdomain
166-
containerRef = ContainerRef.parse("test.foobar.example.com/library/alpine:latest");
167-
assertEquals("localhost:5000", containerRef.getEffectiveRegistry(registry));
168-
newRef = registry.getRegistriesConf().rewrite(containerRef);
169-
assertEquals("localhost:5000/example-com/library/alpine:latest", newRef.toString());
170-
171-
// With path
172-
containerRef = ContainerRef.parse("test.otherexample.io/library/alpine:latest");
173-
assertEquals("localhost:5001", containerRef.getEffectiveRegistry(registry));
174-
newRef = registry.getRegistriesConf().rewrite(containerRef);
175-
assertEquals("localhost:5001/docker/alpine:latest", newRef.toString());
176-
177-
// No rewrite if library does not match
178-
containerRef = ContainerRef.parse("test.otherexample.io/foobar/alpine:latest");
179-
assertEquals("test.otherexample.io", containerRef.getEffectiveRegistry(registry));
180-
newRef = registry.getRegistriesConf().rewrite(containerRef);
181-
assertEquals("test.otherexample.io/foobar/alpine:latest", newRef.toString());
182-
});
116+
TestUtils.createRegistriesConfFile(homeDir, config);
117+
118+
TestUtils.withHome(homeDir, () -> {
119+
Registry registry = Registry.builder().defaults().build();
120+
121+
// One subdomain
122+
ContainerRef containerRef = ContainerRef.parse("toto.example.com/library/alpine:latest");
123+
assertEquals("localhost:5000", containerRef.getEffectiveRegistry(registry));
124+
ContainerRef newRef = registry.getRegistriesConf().rewrite(containerRef);
125+
assertEquals("localhost:5000/example-com/library/alpine:latest", newRef.toString());
126+
127+
// Several subdomain
128+
containerRef = ContainerRef.parse("test.foobar.example.com/library/alpine:latest");
129+
assertEquals("localhost:5000", containerRef.getEffectiveRegistry(registry));
130+
newRef = registry.getRegistriesConf().rewrite(containerRef);
131+
assertEquals("localhost:5000/example-com/library/alpine:latest", newRef.toString());
132+
133+
// With path
134+
containerRef = ContainerRef.parse("test.otherexample.io/library/alpine:latest");
135+
assertEquals("localhost:5001", containerRef.getEffectiveRegistry(registry));
136+
newRef = registry.getRegistriesConf().rewrite(containerRef);
137+
assertEquals("localhost:5001/docker/alpine:latest", newRef.toString());
138+
139+
// No rewrite if library does not match
140+
containerRef = ContainerRef.parse("test.otherexample.io/foobar/alpine:latest");
141+
assertEquals("test.otherexample.io", containerRef.getEffectiveRegistry(registry));
142+
newRef = registry.getRegistriesConf().rewrite(containerRef);
143+
assertEquals("test.otherexample.io/foobar/alpine:latest", newRef.toString());
144+
});
183145
}
184146

185147
@Test
186-
void shouldDetermineEffectiveRegistry() throws Exception {
148+
void shouldDetermineEffectiveRegistry(@TempDir Path homeDir) throws Exception {
187149

188150
// Use from container ref
189151
Registry registry = Registry.builder().defaults().build();
@@ -203,18 +165,16 @@ void shouldDetermineEffectiveRegistry() throws Exception {
203165
// Ensure empty config does not cause error with machine contains default registry
204166
String config = "";
205167

206-
Files.writeString(homeDir4.resolve(".config").resolve("containers").resolve("registries.conf"), config);
168+
TestUtils.createRegistriesConfFile(homeDir, config);
207169

208-
new EnvironmentVariables()
209-
.set("HOME", homeDir4.toAbsolutePath().toString())
210-
.execute(() -> {
211-
Registry r = Registry.builder().defaults().build();
170+
TestUtils.withHome(homeDir, () -> {
171+
Registry r = Registry.builder().defaults().build();
212172

213-
// Unqualified without config use docker.io
214-
ContainerRef unqualifiedRef = ContainerRef.parse("alpine:latest");
215-
assertTrue(unqualifiedRef.isUnqualified(), "ContainerRef must be unqualified");
216-
assertEquals("docker.io", unqualifiedRef.getEffectiveRegistry(r));
217-
});
173+
// Unqualified without config use docker.io
174+
ContainerRef unqualifiedRef = ContainerRef.parse("alpine:latest");
175+
assertTrue(unqualifiedRef.isUnqualified(), "ContainerRef must be unqualified");
176+
assertEquals("docker.io", unqualifiedRef.getEffectiveRegistry(r));
177+
});
218178
}
219179

220180
@Test

src/test/java/land/oras/GitHubContainerRegistryITCase.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222

2323
import static org.junit.jupiter.api.Assertions.assertNotNull;
2424

25-
import java.nio.file.Files;
2625
import java.nio.file.Path;
2726
import land.oras.utils.ArchiveUtils;
2827
import land.oras.utils.Const;
2928
import org.junit.jupiter.api.Test;
3029
import org.junit.jupiter.api.io.TempDir;
3130
import org.junit.jupiter.api.parallel.Execution;
3231
import org.junit.jupiter.api.parallel.ExecutionMode;
33-
import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
3432

3533
@Execution(ExecutionMode.CONCURRENT)
3634
class GitHubContainerRegistryITCase {
@@ -59,18 +57,14 @@ void shouldPullIndexWithAlias() throws Exception {
5957
""";
6058

6159
// Setup
62-
Files.createDirectory(homeDir.resolve(".config"));
63-
Files.createDirectory(homeDir.resolve(".config").resolve("containers"));
64-
Files.writeString(homeDir.resolve(".config").resolve("containers").resolve("registries.conf"), config);
60+
TestUtils.createRegistriesConfFile(tempDir, config);
6561

66-
new EnvironmentVariables()
67-
.set("HOME", homeDir.toAbsolutePath().toString())
68-
.execute(() -> {
69-
Registry registry = Registry.builder().defaults().build();
70-
ContainerRef containerRef1 = ContainerRef.parse("oras:main");
71-
Index index = registry.getIndex(containerRef1);
72-
assertNotNull(index);
73-
});
62+
TestUtils.withHome(homeDir, () -> {
63+
Registry registry = Registry.builder().defaults().build();
64+
ContainerRef containerRef1 = ContainerRef.parse("oras:main");
65+
Index index = registry.getIndex(containerRef1);
66+
assertNotNull(index);
67+
});
7468
}
7569

7670
@Test

0 commit comments

Comments
 (0)