Skip to content

Commit 9d68307

Browse files
committed
Add DockerProviderTest and simplify tests
1 parent c7fb14a commit 9d68307

File tree

4 files changed

+157
-339
lines changed

4 files changed

+157
-339
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,6 @@ jobs:
99
fail-fast: false
1010
matrix:
1111
os: [ubuntu-latest, macos-latest, windows-latest]
12-
include:
13-
- os: ubuntu-latest
14-
test-type: integration
15-
- os: macos-latest
16-
test-type: unit
17-
- os: windows-latest
18-
test-type: unit
1912
runs-on: ${{ matrix.os }}
2013
steps:
2114
- uses: actions/checkout@v4
@@ -30,14 +23,8 @@ jobs:
3023
run: chmod +x gradlew
3124
if: matrix.os != 'windows-latest'
3225

33-
- name: Run unit tests
34-
if: matrix.test-type == 'unit'
35-
run: ./gradlew test --tests "io.github.intisy.docker.ModelTest" --tests "io.github.intisy.docker.DockerClientBuilderTest" --info
36-
shell: bash
37-
3826
- name: Run tests
39-
if: matrix.test-type == 'integration'
40-
run: ./gradlew test --tests "io.github.intisy.docker.ModelTest" --tests "io.github.intisy.docker.DockerClientBuilderTest" --tests "io.github.intisy.docker.WslDiagnosticTest" --info
27+
run: ./gradlew test --info
4128
shell: bash
4229

4330
build:
@@ -68,4 +55,4 @@ jobs:
6855
- name: Create Release and Upload Jar
6956
run: |
7057
gh release create ${{ github.ref_name }} -t "Release ${{ github.ref_name }}"
71-
gh release upload "${{ github.ref_name }}" build/libs/* --clobber
58+
gh release upload "${{ github.ref_name }}" build/libs/* --clobber
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package io.github.intisy.docker;
2+
3+
import org.junit.jupiter.api.*;
4+
5+
import java.nio.file.Path;
6+
import java.nio.file.Paths;
7+
8+
import static org.junit.jupiter.api.Assertions.*;
9+
10+
/**
11+
* Unit tests for DockerProvider factory and configuration (no Docker daemon required).
12+
*
13+
* @author Finn Birich
14+
*/
15+
public class DockerProviderTest {
16+
17+
@AfterEach
18+
void resetState() {
19+
DockerProvider.resetBaseDirectory();
20+
}
21+
22+
@Test
23+
@DisplayName("get() returns a non-null provider for current OS")
24+
void testGetReturnsProvider() {
25+
DockerProvider provider = DockerProvider.get();
26+
assertNotNull(provider, "DockerProvider.get() should return a provider for the current OS");
27+
}
28+
29+
@Test
30+
@DisplayName("get() returns correct provider type for current OS")
31+
void testGetReturnsCorrectType() {
32+
DockerProvider provider = DockerProvider.get();
33+
String os = System.getProperty("os.name").toLowerCase();
34+
35+
if (os.contains("win")) {
36+
assertInstanceOf(WindowsDockerProvider.class, provider, "Should return WindowsDockerProvider on Windows");
37+
} else if (os.contains("mac")) {
38+
assertInstanceOf(MacDockerProvider.class, provider, "Should return MacDockerProvider on macOS");
39+
} else if (os.contains("nix") || os.contains("nux") || os.contains("aix")) {
40+
assertInstanceOf(LinuxDockerProvider.class, provider, "Should return LinuxDockerProvider on Linux");
41+
}
42+
}
43+
44+
@Test
45+
@DisplayName("Each get() call returns a new instance")
46+
void testGetReturnsNewInstance() {
47+
DockerProvider provider1 = DockerProvider.get();
48+
DockerProvider provider2 = DockerProvider.get();
49+
50+
assertNotSame(provider1, provider2, "Each get() call should return a new instance");
51+
}
52+
53+
@Test
54+
@DisplayName("setBaseDirectory() and getBaseDirectory() work correctly")
55+
void testBaseDirectory() {
56+
Path customPath = Paths.get("/custom/docker/path");
57+
DockerProvider.setBaseDirectory(customPath);
58+
59+
assertEquals(customPath, DockerProvider.getBaseDirectory(),
60+
"getBaseDirectory() should return the path set by setBaseDirectory()");
61+
}
62+
63+
@Test
64+
@DisplayName("Default base directory is ~/.docker-java/")
65+
void testDefaultBaseDirectory() {
66+
Path expected = Paths.get(System.getProperty("user.home"), ".docker-java");
67+
assertEquals(expected, DockerProvider.getBaseDirectory(),
68+
"Default base directory should be ~/.docker-java/");
69+
}
70+
71+
@Test
72+
@DisplayName("setWslBaseDirectory() and getWslBaseDirectory() work correctly")
73+
void testWslBaseDirectory() {
74+
DockerProvider.setWslBaseDirectory(".custom-wsl-dir");
75+
76+
assertEquals(".custom-wsl-dir", DockerProvider.getWslBaseDirectory(),
77+
"getWslBaseDirectory() should return the path set by setWslBaseDirectory()");
78+
}
79+
80+
@Test
81+
@DisplayName("Default WSL base directory is .docker-java")
82+
void testDefaultWslBaseDirectory() {
83+
assertEquals(".docker-java", DockerProvider.getWslBaseDirectory(),
84+
"Default WSL base directory should be .docker-java");
85+
}
86+
87+
@Test
88+
@DisplayName("resetBaseDirectory() restores defaults")
89+
void testResetBaseDirectory() {
90+
Path expected = Paths.get(System.getProperty("user.home"), ".docker-java");
91+
92+
DockerProvider.setBaseDirectory(Paths.get("/custom/path"));
93+
DockerProvider.setWslBaseDirectory(".custom-wsl");
94+
95+
DockerProvider.resetBaseDirectory();
96+
97+
assertEquals(expected, DockerProvider.getBaseDirectory(),
98+
"Base directory should be reset to default");
99+
assertEquals(".docker-java", DockerProvider.getWslBaseDirectory(),
100+
"WSL base directory should be reset to default");
101+
}
102+
103+
@Test
104+
@DisplayName("Provider has a unique instance ID")
105+
void testInstanceId() {
106+
DockerProvider provider = DockerProvider.get();
107+
String instanceId = provider.getInstanceId();
108+
109+
assertNotNull(instanceId, "Instance ID should not be null");
110+
assertFalse(instanceId.isEmpty(), "Instance ID should not be empty");
111+
}
112+
113+
@Test
114+
@DisplayName("NVIDIA GPU methods have safe defaults")
115+
void testNvidiaDefaults() {
116+
DockerProvider provider = DockerProvider.get();
117+
118+
assertFalse(provider.isNvidiaGpuAvailable(),
119+
"Base isNvidiaGpuAvailable() should return false by default");
120+
assertFalse(provider.isNvidiaContainerToolkitInstalled(),
121+
"Base isNvidiaContainerToolkitInstalled() should return false by default");
122+
}
123+
124+
@Test
125+
@DisplayName("ensureNvidiaContainerToolkit() does not throw when no GPU")
126+
void testEnsureNvidiaNoOp() {
127+
DockerProvider provider = DockerProvider.get();
128+
129+
assertDoesNotThrow(() -> provider.ensureNvidiaContainerToolkit(),
130+
"ensureNvidiaContainerToolkit() should not throw when no GPU is available");
131+
}
132+
}

0 commit comments

Comments
 (0)