mirror of
https://github.com/genuinetools/reg.git
synced 2024-08-21 14:20:23 -04:00
113 lines
3.3 KiB
Go
113 lines
3.3 KiB
Go
package streamformatter // import "github.com/docker/docker/pkg/streamformatter"
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/docker/docker/pkg/jsonmessage"
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
"gotest.tools/assert"
|
|
is "gotest.tools/assert/cmp"
|
|
)
|
|
|
|
func TestRawProgressFormatterFormatStatus(t *testing.T) {
|
|
sf := rawProgressFormatter{}
|
|
res := sf.formatStatus("ID", "%s%d", "a", 1)
|
|
assert.Check(t, is.Equal("a1\r\n", string(res)))
|
|
}
|
|
|
|
func TestRawProgressFormatterFormatProgress(t *testing.T) {
|
|
sf := rawProgressFormatter{}
|
|
jsonProgress := &jsonmessage.JSONProgress{
|
|
Current: 15,
|
|
Total: 30,
|
|
Start: 1,
|
|
}
|
|
res := sf.formatProgress("id", "action", jsonProgress, nil)
|
|
out := string(res)
|
|
assert.Check(t, strings.HasPrefix(out, "action [===="))
|
|
assert.Check(t, is.Contains(out, "15B/30B"))
|
|
assert.Check(t, strings.HasSuffix(out, "\r"))
|
|
}
|
|
|
|
func TestFormatStatus(t *testing.T) {
|
|
res := FormatStatus("ID", "%s%d", "a", 1)
|
|
expected := `{"status":"a1","id":"ID"}` + streamNewline
|
|
assert.Check(t, is.Equal(expected, string(res)))
|
|
}
|
|
|
|
func TestFormatError(t *testing.T) {
|
|
res := FormatError(errors.New("Error for formatter"))
|
|
expected := `{"errorDetail":{"message":"Error for formatter"},"error":"Error for formatter"}` + "\r\n"
|
|
assert.Check(t, is.Equal(expected, string(res)))
|
|
}
|
|
|
|
func TestFormatJSONError(t *testing.T) {
|
|
err := &jsonmessage.JSONError{Code: 50, Message: "Json error"}
|
|
res := FormatError(err)
|
|
expected := `{"errorDetail":{"code":50,"message":"Json error"},"error":"Json error"}` + streamNewline
|
|
assert.Check(t, is.Equal(expected, string(res)))
|
|
}
|
|
|
|
func TestJsonProgressFormatterFormatProgress(t *testing.T) {
|
|
sf := &jsonProgressFormatter{}
|
|
jsonProgress := &jsonmessage.JSONProgress{
|
|
Current: 15,
|
|
Total: 30,
|
|
Start: 1,
|
|
}
|
|
aux := "aux message"
|
|
res := sf.formatProgress("id", "action", jsonProgress, aux)
|
|
msg := &jsonmessage.JSONMessage{}
|
|
|
|
assert.NilError(t, json.Unmarshal(res, msg))
|
|
|
|
rawAux := json.RawMessage(`"` + aux + `"`)
|
|
expected := &jsonmessage.JSONMessage{
|
|
ID: "id",
|
|
Status: "action",
|
|
Aux: &rawAux,
|
|
Progress: jsonProgress,
|
|
}
|
|
assert.DeepEqual(t, msg, expected, cmpJSONMessageOpt())
|
|
}
|
|
|
|
func cmpJSONMessageOpt() cmp.Option {
|
|
progressMessagePath := func(path cmp.Path) bool {
|
|
return path.String() == "ProgressMessage"
|
|
}
|
|
return cmp.Options{
|
|
cmpopts.IgnoreUnexported(jsonmessage.JSONProgress{}),
|
|
// Ignore deprecated property that is a derivative of Progress
|
|
cmp.FilterPath(progressMessagePath, cmp.Ignore()),
|
|
}
|
|
}
|
|
|
|
func TestJsonProgressFormatterFormatStatus(t *testing.T) {
|
|
sf := jsonProgressFormatter{}
|
|
res := sf.formatStatus("ID", "%s%d", "a", 1)
|
|
assert.Check(t, is.Equal(`{"status":"a1","id":"ID"}`+streamNewline, string(res)))
|
|
}
|
|
|
|
func TestNewJSONProgressOutput(t *testing.T) {
|
|
b := bytes.Buffer{}
|
|
b.Write(FormatStatus("id", "Downloading"))
|
|
_ = NewJSONProgressOutput(&b, false)
|
|
assert.Check(t, is.Equal(`{"status":"Downloading","id":"id"}`+streamNewline, b.String()))
|
|
}
|
|
|
|
func TestAuxFormatterEmit(t *testing.T) {
|
|
b := bytes.Buffer{}
|
|
aux := &AuxFormatter{Writer: &b}
|
|
sampleAux := &struct {
|
|
Data string
|
|
}{"Additional data"}
|
|
err := aux.Emit("", sampleAux)
|
|
assert.NilError(t, err)
|
|
assert.Check(t, is.Equal(`{"aux":{"Data":"Additional data"}}`+streamNewline, b.String()))
|
|
}
|