|
1 | 1 | package dockerui |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "context" |
4 | 5 | "testing" |
5 | 6 |
|
6 | 7 | "github.com/containerd/platforms" |
| 8 | + "github.com/moby/buildkit/client/llb" |
7 | 9 | "github.com/moby/buildkit/exporter/containerimage/exptypes" |
| 10 | + "github.com/moby/buildkit/solver/pb" |
| 11 | + digest "github.com/opencontainers/go-digest" |
8 | 12 | ocispecs "github.com/opencontainers/image-spec/specs-go/v1" |
9 | 13 | "github.com/stretchr/testify/require" |
10 | 14 | ) |
@@ -98,3 +102,65 @@ func TestNormalizePlatform(t *testing.T) { |
98 | 102 | require.Equal(t, platforms.FormatAll(platforms.Normalize(tc.p)), tc.expected.ID) |
99 | 103 | } |
100 | 104 | } |
| 105 | + |
| 106 | +func TestDetectGitContextForwardsDebugCommands(t *testing.T) { |
| 107 | + t.Parallel() |
| 108 | + |
| 109 | + enabled := true |
| 110 | + st, ok, err := DetectGitContext("https://github.com/docker/buildx.git?ref=refs/pull/3732/merge", nil, &enabled) |
| 111 | + require.True(t, ok) |
| 112 | + require.NoError(t, err) |
| 113 | + |
| 114 | + g := marshalGitContext(t, st) |
| 115 | + require.Equal(t, "git://github.com/docker/buildx.git#refs/pull/3732/merge", g.Identifier) |
| 116 | + require.Equal(t, map[string]string{ |
| 117 | + "git.authheadersecret": "GIT_AUTH_HEADER", |
| 118 | + "git.authtokensecret": "GIT_AUTH_TOKEN", |
| 119 | + "git.debugcommands": "true", |
| 120 | + "git.fullurl": "https://github.com/docker/buildx.git", |
| 121 | + }, g.Attrs) |
| 122 | +} |
| 123 | + |
| 124 | +func marshalGitContext(t *testing.T, st *llb.State) *pb.SourceOp { |
| 125 | + t.Helper() |
| 126 | + |
| 127 | + def, err := st.Marshal(context.TODO()) |
| 128 | + require.NoError(t, err) |
| 129 | + |
| 130 | + m, arr := parseDef(t, def.Def) |
| 131 | + require.Equal(t, 2, len(arr)) |
| 132 | + |
| 133 | + dgst, idx := last(t, arr) |
| 134 | + require.Equal(t, 0, idx) |
| 135 | + require.Equal(t, m[dgst], arr[0]) |
| 136 | + |
| 137 | + return arr[0].Op.(*pb.Op_Source).Source |
| 138 | +} |
| 139 | + |
| 140 | +func parseDef(t *testing.T, def [][]byte) (map[string]*pb.Op, []*pb.Op) { |
| 141 | + t.Helper() |
| 142 | + |
| 143 | + m := map[string]*pb.Op{} |
| 144 | + arr := make([]*pb.Op, 0, len(def)) |
| 145 | + |
| 146 | + for _, dt := range def { |
| 147 | + var op pb.Op |
| 148 | + err := op.Unmarshal(dt) |
| 149 | + require.NoError(t, err) |
| 150 | + dgst := digest.FromBytes(dt) |
| 151 | + m[string(dgst)] = &op |
| 152 | + arr = append(arr, &op) |
| 153 | + } |
| 154 | + |
| 155 | + return m, arr |
| 156 | +} |
| 157 | + |
| 158 | +func last(t *testing.T, arr []*pb.Op) (string, int) { |
| 159 | + t.Helper() |
| 160 | + |
| 161 | + require.Greater(t, len(arr), 1) |
| 162 | + |
| 163 | + op := arr[len(arr)-1] |
| 164 | + require.Equal(t, 1, len(op.Inputs)) |
| 165 | + return op.Inputs[0].Digest, int(op.Inputs[0].Index) |
| 166 | +} |
0 commit comments