12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package build
- import (
- "context"
- "encoding/json"
- "io"
- "testing"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/client"
- "github.com/docker/docker/pkg/jsonmessage"
- "github.com/docker/docker/testutil/fakecontext"
- "gotest.tools/v3/assert"
- )
- // Do builds an image from the given context and returns the image ID.
- func Do(ctx context.Context, t *testing.T, client client.APIClient, buildCtx *fakecontext.Fake) string {
- resp, err := client.ImageBuild(ctx, buildCtx.AsTarReader(t), types.ImageBuildOptions{})
- if resp.Body != nil {
- defer resp.Body.Close()
- }
- assert.NilError(t, err)
- img := GetImageIDFromBody(t, resp.Body)
- t.Cleanup(func() {
- client.ImageRemove(ctx, img, types.ImageRemoveOptions{Force: true})
- })
- return img
- }
- // GetImageIDFromBody reads the image ID from the build response body.
- func GetImageIDFromBody(t *testing.T, body io.Reader) string {
- var (
- jm jsonmessage.JSONMessage
- br types.BuildResult
- dec = json.NewDecoder(body)
- )
- for {
- err := dec.Decode(&jm)
- if err == io.EOF {
- break
- }
- assert.NilError(t, err)
- if jm.Aux == nil {
- continue
- }
- assert.NilError(t, json.Unmarshal(*jm.Aux, &br))
- assert.Assert(t, br.ID != "", "could not read image ID from build output")
- break
- }
- io.Copy(io.Discard, body)
- return br.ID
- }
|