TestDockerEnvInfoer tests the ability of EnvInfo to extract information from running containers. Containers are deleted after the test is complete. As this test creates containers, it is skipped by default. It can be run manually as follows: CODER_TEST_USE_DOCKER=1 go test ./agent/agentcontainers -
(t *testing.T)
| 160 | // |
| 161 | //nolint:paralleltest // This test tends to flake when lots of containers start and stop in parallel. |
| 162 | func TestDockerEnvInfoer(t *testing.T) { |
| 163 | if ctud, ok := os.LookupEnv("CODER_TEST_USE_DOCKER"); !ok || ctud != "1" { |
| 164 | t.Skip("Set CODER_TEST_USE_DOCKER=1 to run this test") |
| 165 | } |
| 166 | |
| 167 | pool, err := dockertest.NewPool("") |
| 168 | require.NoError(t, err, "Could not connect to docker") |
| 169 | for idx, tt := range []struct { |
| 170 | image string |
| 171 | labels map[string]string |
| 172 | expectedEnv []string |
| 173 | containerUser string |
| 174 | expectedUsername string |
| 175 | expectedUserShell string |
| 176 | }{ |
| 177 | { |
| 178 | image: "busybox:latest", |
| 179 | labels: map[string]string{`devcontainer.metadata`: `[{"remoteEnv": {"FOO": "bar", "MULTILINE": "foo\nbar\nbaz"}}]`}, |
| 180 | |
| 181 | expectedEnv: []string{"FOO=bar", "MULTILINE=foo\nbar\nbaz"}, |
| 182 | expectedUsername: "root", |
| 183 | expectedUserShell: "/bin/sh", |
| 184 | }, |
| 185 | { |
| 186 | image: "busybox:latest", |
| 187 | labels: map[string]string{`devcontainer.metadata`: `[{"remoteEnv": {"FOO": "bar", "MULTILINE": "foo\nbar\nbaz"}}]`}, |
| 188 | expectedEnv: []string{"FOO=bar", "MULTILINE=foo\nbar\nbaz"}, |
| 189 | containerUser: "root", |
| 190 | expectedUsername: "root", |
| 191 | expectedUserShell: "/bin/sh", |
| 192 | }, |
| 193 | { |
| 194 | image: "codercom/enterprise-minimal:ubuntu", |
| 195 | labels: map[string]string{`devcontainer.metadata`: `[{"remoteEnv": {"FOO": "bar", "MULTILINE": "foo\nbar\nbaz"}}]`}, |
| 196 | expectedEnv: []string{"FOO=bar", "MULTILINE=foo\nbar\nbaz"}, |
| 197 | expectedUsername: "coder", |
| 198 | expectedUserShell: "/bin/bash", |
| 199 | }, |
| 200 | { |
| 201 | image: "codercom/enterprise-minimal:ubuntu", |
| 202 | labels: map[string]string{`devcontainer.metadata`: `[{"remoteEnv": {"FOO": "bar", "MULTILINE": "foo\nbar\nbaz"}}]`}, |
| 203 | expectedEnv: []string{"FOO=bar", "MULTILINE=foo\nbar\nbaz"}, |
| 204 | containerUser: "coder", |
| 205 | expectedUsername: "coder", |
| 206 | expectedUserShell: "/bin/bash", |
| 207 | }, |
| 208 | { |
| 209 | image: "codercom/enterprise-minimal:ubuntu", |
| 210 | labels: map[string]string{`devcontainer.metadata`: `[{"remoteEnv": {"FOO": "bar", "MULTILINE": "foo\nbar\nbaz"}}]`}, |
| 211 | expectedEnv: []string{"FOO=bar", "MULTILINE=foo\nbar\nbaz"}, |
| 212 | containerUser: "root", |
| 213 | expectedUsername: "root", |
| 214 | expectedUserShell: "/bin/bash", |
| 215 | }, |
| 216 | { |
| 217 | image: "codercom/enterprise-minimal:ubuntu", |
| 218 | labels: map[string]string{`devcontainer.metadata`: `[{"remoteEnv": {"FOO": "bar"}},{"remoteEnv": {"MULTILINE": "foo\nbar\nbaz"}}]`}, |
| 219 | expectedEnv: []string{"FOO=bar", "MULTILINE=foo\nbar\nbaz"}, |
nothing calls this directly
no test coverage detected