2015-08-26 21:58:56 +00:00
|
|
|
package image
|
|
|
|
|
|
|
|
import (
|
2015-11-18 22:18:07 +00:00
|
|
|
"encoding/json"
|
|
|
|
"sort"
|
|
|
|
"strings"
|
2015-08-26 21:58:56 +00:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2015-11-18 22:18:07 +00:00
|
|
|
const sampleImageJSON = `{
|
|
|
|
"architecture": "amd64",
|
|
|
|
"os": "linux",
|
|
|
|
"config": {},
|
|
|
|
"rootfs": {
|
|
|
|
"type": "layers",
|
|
|
|
"diff_ids": []
|
|
|
|
}
|
|
|
|
}`
|
2015-08-26 21:58:56 +00:00
|
|
|
|
2015-11-18 22:18:07 +00:00
|
|
|
func TestJSON(t *testing.T) {
|
|
|
|
img, err := NewFromJSON([]byte(sampleImageJSON))
|
2015-08-26 21:58:56 +00:00
|
|
|
if err != nil {
|
2015-11-18 22:18:07 +00:00
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
rawJSON := img.RawJSON()
|
|
|
|
if string(rawJSON) != sampleImageJSON {
|
|
|
|
t.Fatalf("Raw JSON of config didn't match: expected %+v, got %v", sampleImageJSON, rawJSON)
|
2015-08-26 21:58:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-18 22:18:07 +00:00
|
|
|
func TestInvalidJSON(t *testing.T) {
|
|
|
|
_, err := NewFromJSON([]byte("{}"))
|
|
|
|
if err == nil {
|
|
|
|
t.Fatal("Expected JSON parse error")
|
2015-08-26 21:58:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-18 22:18:07 +00:00
|
|
|
func TestMarshalKeyOrder(t *testing.T) {
|
|
|
|
b, err := json.Marshal(&Image{
|
|
|
|
V1Image: V1Image{
|
|
|
|
Comment: "a",
|
|
|
|
Author: "b",
|
|
|
|
Architecture: "c",
|
|
|
|
},
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
expectedOrder := []string{"architecture", "author", "comment"}
|
|
|
|
var indexes []int
|
|
|
|
for _, k := range expectedOrder {
|
|
|
|
indexes = append(indexes, strings.Index(string(b), k))
|
|
|
|
}
|
2015-08-26 21:58:56 +00:00
|
|
|
|
2015-11-18 22:18:07 +00:00
|
|
|
if !sort.IntsAreSorted(indexes) {
|
|
|
|
t.Fatal("invalid key order in JSON: ", string(b))
|
2015-08-26 21:58:56 +00:00
|
|
|
}
|
|
|
|
}
|