Files
2026-09-10 20:19:11 +02:00

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)
}
}
}