131 lines
2.5 KiB
Go
131 lines
2.5 KiB
Go
package docker
|
|
|
|
import (
|
|
"os/exec"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestCommandBuild(t *testing.T) {
|
|
tcs := []struct {
|
|
name string
|
|
build Build
|
|
want *exec.Cmd
|
|
}{
|
|
{
|
|
name: "secret from env var",
|
|
build: Build{
|
|
Name: "plugins/drone-docker:latest",
|
|
Dockerfile: "Dockerfile",
|
|
Context: ".",
|
|
SecretEnvs: []string{
|
|
"foo_secret=FOO_SECRET_ENV_VAR",
|
|
},
|
|
},
|
|
want: exec.Command(
|
|
dockerExe,
|
|
"build",
|
|
"--rm=true",
|
|
"-f",
|
|
"Dockerfile",
|
|
"-t",
|
|
"plugins/drone-docker:latest",
|
|
".",
|
|
"--secret id=foo_secret,env=FOO_SECRET_ENV_VAR",
|
|
),
|
|
},
|
|
{
|
|
name: "secret from file",
|
|
build: Build{
|
|
Name: "plugins/drone-docker:latest",
|
|
Dockerfile: "Dockerfile",
|
|
Context: ".",
|
|
SecretFiles: []string{
|
|
"foo_secret=/path/to/foo_secret",
|
|
},
|
|
},
|
|
want: exec.Command(
|
|
dockerExe,
|
|
"build",
|
|
"--rm=true",
|
|
"-f",
|
|
"Dockerfile",
|
|
"-t",
|
|
"plugins/drone-docker:latest",
|
|
".",
|
|
"--secret id=foo_secret,src=/path/to/foo_secret",
|
|
),
|
|
},
|
|
{
|
|
name: "multiple mixed secrets",
|
|
build: Build{
|
|
Name: "plugins/drone-docker:latest",
|
|
Dockerfile: "Dockerfile",
|
|
Context: ".",
|
|
SecretEnvs: []string{
|
|
"foo_secret=FOO_SECRET_ENV_VAR",
|
|
"bar_secret=BAR_SECRET_ENV_VAR",
|
|
},
|
|
SecretFiles: []string{
|
|
"foo_secret=/path/to/foo_secret",
|
|
"bar_secret=/path/to/bar_secret",
|
|
},
|
|
},
|
|
want: exec.Command(
|
|
dockerExe,
|
|
"build",
|
|
"--rm=true",
|
|
"-f",
|
|
"Dockerfile",
|
|
"-t",
|
|
"plugins/drone-docker:latest",
|
|
".",
|
|
"--secret id=foo_secret,env=FOO_SECRET_ENV_VAR",
|
|
"--secret id=bar_secret,env=BAR_SECRET_ENV_VAR",
|
|
"--secret id=foo_secret,src=/path/to/foo_secret",
|
|
"--secret id=bar_secret,src=/path/to/bar_secret",
|
|
),
|
|
},
|
|
{
|
|
name: "invalid mixed secrets",
|
|
build: Build{
|
|
Name: "plugins/drone-docker:latest",
|
|
Dockerfile: "Dockerfile",
|
|
Context: ".",
|
|
SecretEnvs: []string{
|
|
"foo_secret=",
|
|
"=FOO_SECRET_ENV_VAR",
|
|
"",
|
|
},
|
|
SecretFiles: []string{
|
|
"foo_secret=",
|
|
"=/path/to/bar_secret",
|
|
"",
|
|
},
|
|
},
|
|
want: exec.Command(
|
|
dockerExe,
|
|
"build",
|
|
"--rm=true",
|
|
"-f",
|
|
"Dockerfile",
|
|
"-t",
|
|
"plugins/drone-docker:latest",
|
|
".",
|
|
),
|
|
},
|
|
}
|
|
|
|
for _, tc := range tcs {
|
|
tc := tc
|
|
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
cmd := commandBuild(tc.build)
|
|
|
|
if !reflect.DeepEqual(cmd.String(), tc.want.String()) {
|
|
t.Errorf("Got cmd %v, want %v", cmd, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|