61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package store
|
|
|
|
import (
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestApplyChange(t *testing.T) {
|
|
var config ImageConfig
|
|
for _, change := range []string{
|
|
`ENTRYPOINT ["/bin/sh", "-c"]`,
|
|
`CMD java -version`,
|
|
`ENV JAVA_HOME=/opt/jdk`,
|
|
`ENV JAVA_HOME /opt/jdk21`,
|
|
`ENV CI="true"`,
|
|
`WORKDIR /work`,
|
|
`LABEL org.opencontainers.image.title="mini image"`,
|
|
`label maintainer=me`,
|
|
`USER postgres`,
|
|
`VOLUME /var/lib/postgresql/data`,
|
|
`VOLUME ["/var/run/postgresql", "/data"]`,
|
|
} {
|
|
if err := ApplyChange(&config, change); err != nil {
|
|
t.Fatalf("%s: %v", change, err)
|
|
}
|
|
}
|
|
want := ImageConfig{
|
|
Env: []string{"JAVA_HOME=/opt/jdk21", "CI=true"},
|
|
Entrypoint: []string{"/bin/sh", "-c"},
|
|
Cmd: []string{"/bin/sh", "-c", "java -version"},
|
|
WorkingDir: "/work",
|
|
Labels: map[string]string{"org.opencontainers.image.title": "mini image", "maintainer": "me"},
|
|
User: "postgres",
|
|
Volumes: map[string]struct{}{"/var/lib/postgresql/data": {}, "/var/run/postgresql": {}, "/data": {}},
|
|
}
|
|
if !reflect.DeepEqual(config, want) {
|
|
t.Errorf("got %+v\nwant %+v", config, want)
|
|
}
|
|
}
|
|
|
|
func TestApplyChangeRefusals(t *testing.T) {
|
|
tests := []struct{ change, wantErr string }{
|
|
{"USER a b", "one user"},
|
|
{"VOLUME data", "absolute"},
|
|
{"EXPOSE 8080", "unsupported instruction EXPOSE"},
|
|
{"RUN apt-get install", "unsupported instruction RUN"},
|
|
{"", "empty"},
|
|
{"ENTRYPOINT", "missing value"},
|
|
{`CMD ["unterminated`, "JSON array"},
|
|
{"ENV NOVALUE", "KEY=VALUE"},
|
|
{"WORKDIR relative", "absolute"},
|
|
}
|
|
for _, tt := range tests {
|
|
err := ApplyChange(&ImageConfig{}, tt.change)
|
|
if err == nil || !strings.Contains(err.Error(), tt.wantErr) {
|
|
t.Errorf("ApplyChange(%q) = %v, want error containing %q", tt.change, err, tt.wantErr)
|
|
}
|
|
}
|
|
}
|