MCPcopy Create free account
hub / github.com/coder/envbuilder / WriteContainer

Function WriteContainer

testutil/registrytest/registrytest.go:50–117  ·  view source on GitHub ↗

WriteContainer uploads a container to the registry server. It returns the reference to the uploaded container.

(t *testing.T, serverURL string, remoteOpt []remote.Option, containerRef, mediaType string, files map[string]any)

Source from the content-addressed store, hash-verified

48// WriteContainer uploads a container to the registry server.
49// It returns the reference to the uploaded container.
50func WriteContainer(t *testing.T, serverURL string, remoteOpt []remote.Option, containerRef, mediaType string, files map[string]any) string {
51 var buf bytes.Buffer
52 hasher := crypto.SHA256.New()
53 mw := io.MultiWriter(&buf, hasher)
54 wtr := tar.NewWriter(mw)
55 for name, content := range files {
56 var data []byte
57 switch content := content.(type) {
58 case string:
59 data = []byte(content)
60 case []byte:
61 data = content
62 default:
63 var err error
64 data, err = json.Marshal(content)
65 require.NoError(t, err)
66 }
67 err := wtr.WriteHeader(&tar.Header{
68 Mode: 0o777,
69 Name: name,
70 Typeflag: tar.TypeReg,
71 Size: int64(len(data)),
72 })
73 require.NoError(t, err)
74 _, err = wtr.Write(data)
75 require.NoError(t, err)
76 }
77
78 h := v1.Hash{
79 Algorithm: "sha256",
80 Hex: hex.EncodeToString(hasher.Sum(make([]byte, 0, hasher.Size()))),
81 }
82 layer, err := partial.UncompressedToLayer(&uncompressedLayer{
83 diffID: h,
84 mediaType: types.MediaType(mediaType),
85 content: buf.Bytes(),
86 })
87 require.NoError(t, err)
88
89 image, err := mutate.Append(empty.Image, mutate.Addendum{
90 Layer: layer,
91 History: v1.History{
92 Author: "registrytest",
93 Created: v1.Time{Time: time.Now()},
94 Comment: "created by the registrytest package",
95 CreatedBy: "registrytest",
96 },
97 })
98 require.NoError(t, err)
99
100 // url.Parse will interpret localhost:12345 as scheme localhost and host 12345
101 // so we need to add a scheme to the URL
102 if !strings.HasPrefix(serverURL, "http://") {
103 serverURL = "http://" + serverURL
104 }
105 parsed, err := url.Parse(serverURL)
106 require.NoError(t, err)
107 parsed.Path = containerRef

Callers 5

TestPushImageFunction · 0.92
TestCompileWithFeaturesFunction · 0.92
TestExtractFunction · 0.92

Calls 3

WriteMethod · 0.80
SizeMethod · 0.80
MediaTypeMethod · 0.45

Tested by 5

TestPushImageFunction · 0.74
TestCompileWithFeaturesFunction · 0.74
TestExtractFunction · 0.74