2222
2323import static org .junit .jupiter .api .Assertions .*;
2424
25- import java .nio .file .Files ;
2625import java .nio .file .Path ;
2726import land .oras .exception .OrasException ;
2827import land .oras .utils .SupportedAlgorithm ;
29- import org .junit .jupiter .api .BeforeAll ;
3028import org .junit .jupiter .api .Test ;
3129import org .junit .jupiter .api .io .TempDir ;
3230import org .junit .jupiter .api .parallel .Execution ;
3331import 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 )
4037class 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
0 commit comments