Skip to content

Commit 1663b6f

Browse files
committed
Add unit tests for Docker API stream helpers and Podman CLI authentication
- Implemented unit tests for DockerApiDriverBaseStreamHelpers, covering methods for stripping Docker stream headers and reading exact bytes from a stream. - Added tests for PodmanCliAuthDriver to validate argument building for registry login commands, including handling of inline passwords and stdin. - Created tests for PodmanCliPhase2Fix to ensure correct argument generation for various Podman commands, including filters and detach flag placements. - Introduced DockerCliComposeDriver with methods to build arguments for various Docker Compose commands, enhancing testability and maintainability.
1 parent edf6611 commit 1663b6f

26 files changed

+2784
-296
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
using FluentDocker.Drivers;
2+
using FluentDocker.Drivers.Docker.Cli.Components;
3+
using Xunit;
4+
5+
namespace FluentDocker.Tests.CoreTests.Driver.Docker
6+
{
7+
[Trait("Category", "Unit")]
8+
public class DockerCliAuthDriverTests
9+
{
10+
#region BuildLoginArgs — Password Inline
11+
12+
[Fact]
13+
public void BuildLoginArgs_PasswordInline_ContainsPasswordFlag()
14+
{
15+
var config = new RegistryLoginConfig
16+
{
17+
Username = "user1",
18+
Password = "secret",
19+
PasswordStdin = false
20+
};
21+
22+
var (args, stdinData) = DockerCliAuthDriver.BuildLoginArgs(config);
23+
24+
Assert.Contains("-p secret", args);
25+
Assert.DoesNotContain("--password-stdin", args);
26+
Assert.Null(stdinData);
27+
}
28+
29+
#endregion
30+
31+
#region BuildLoginArgs — Password Stdin
32+
33+
[Fact]
34+
public void BuildLoginArgs_PasswordStdin_ContainsStdinFlag()
35+
{
36+
var config = new RegistryLoginConfig
37+
{
38+
Username = "user1",
39+
Password = "secret",
40+
PasswordStdin = true
41+
};
42+
43+
var (args, stdinData) = DockerCliAuthDriver.BuildLoginArgs(config);
44+
45+
Assert.Contains("--password-stdin", args);
46+
Assert.DoesNotContain("-p ", args);
47+
Assert.Equal("secret", stdinData);
48+
}
49+
50+
[Fact]
51+
public void BuildLoginArgs_PasswordStdinNoPassword_StdinDataIsNull()
52+
{
53+
var config = new RegistryLoginConfig
54+
{
55+
Username = "user1",
56+
PasswordStdin = true
57+
};
58+
59+
var (args, stdinData) = DockerCliAuthDriver.BuildLoginArgs(config);
60+
61+
Assert.Contains("--password-stdin", args);
62+
Assert.Null(stdinData);
63+
}
64+
65+
#endregion
66+
67+
#region BuildLoginArgs — Server
68+
69+
[Fact]
70+
public void BuildLoginArgs_WithServer_ServerAppendedAtEnd()
71+
{
72+
var config = new RegistryLoginConfig
73+
{
74+
Username = "user1",
75+
Password = "pass",
76+
Server = "registry.example.com"
77+
};
78+
79+
var (args, _) = DockerCliAuthDriver.BuildLoginArgs(config);
80+
81+
Assert.EndsWith("registry.example.com", args);
82+
}
83+
84+
[Fact]
85+
public void BuildLoginArgs_NoServer_NoServerInArgs()
86+
{
87+
var config = new RegistryLoginConfig
88+
{
89+
Username = "user1",
90+
Password = "pass"
91+
};
92+
93+
var (args, _) = DockerCliAuthDriver.BuildLoginArgs(config);
94+
95+
Assert.Equal("login -u user1 -p pass", args);
96+
}
97+
98+
#endregion
99+
100+
#region BuildLoginArgs — Username
101+
102+
[Fact]
103+
public void BuildLoginArgs_NoUsername_NoUserFlag()
104+
{
105+
var config = new RegistryLoginConfig
106+
{
107+
Password = "pass"
108+
};
109+
110+
var (args, _) = DockerCliAuthDriver.BuildLoginArgs(config);
111+
112+
Assert.DoesNotContain("-u ", args);
113+
Assert.Contains("-p pass", args);
114+
}
115+
116+
[Fact]
117+
public void BuildLoginArgs_WithUsername_ContainsUserFlag()
118+
{
119+
var config = new RegistryLoginConfig
120+
{
121+
Username = "admin"
122+
};
123+
124+
var (args, _) = DockerCliAuthDriver.BuildLoginArgs(config);
125+
126+
Assert.Contains("-u admin", args);
127+
}
128+
129+
#endregion
130+
131+
#region BuildLoginArgs — Edge Cases
132+
133+
[Fact]
134+
public void BuildLoginArgs_NoCredentials_JustLogin()
135+
{
136+
var config = new RegistryLoginConfig();
137+
138+
var (args, stdinData) = DockerCliAuthDriver.BuildLoginArgs(config);
139+
140+
Assert.Equal("login", args);
141+
Assert.Null(stdinData);
142+
}
143+
144+
[Fact]
145+
public void BuildLoginArgs_AllFields_CorrectOrder()
146+
{
147+
var config = new RegistryLoginConfig
148+
{
149+
Username = "user1",
150+
Password = "pass",
151+
PasswordStdin = false,
152+
Server = "ghcr.io"
153+
};
154+
155+
var (args, _) = DockerCliAuthDriver.BuildLoginArgs(config);
156+
157+
// Expected: login -u user1 -p pass ghcr.io
158+
Assert.StartsWith("login", args);
159+
var uPos = args.IndexOf("-u user1");
160+
var pPos = args.IndexOf("-p pass");
161+
var sPos = args.IndexOf("ghcr.io");
162+
Assert.True(uPos < pPos, "Username should come before password");
163+
Assert.True(pPos < sPos, "Password should come before server");
164+
}
165+
166+
[Fact]
167+
public void BuildLoginArgs_StdinWithServer_CorrectOrder()
168+
{
169+
var config = new RegistryLoginConfig
170+
{
171+
Username = "user1",
172+
Password = "secret",
173+
PasswordStdin = true,
174+
Server = "docker.io"
175+
};
176+
177+
var (args, stdinData) = DockerCliAuthDriver.BuildLoginArgs(config);
178+
179+
Assert.Equal("login -u user1 --password-stdin docker.io", args);
180+
Assert.Equal("secret", stdinData);
181+
}
182+
183+
#endregion
184+
}
185+
}

0 commit comments

Comments
 (0)