package image import ( "bytes" "io/ioutil" "testing" "github.com/docker/distribution/digest" ) var fixtures = []string{ "fixtures/pre1.9", "fixtures/post1.9", } func loadFixtureFile(t *testing.T, path string) []byte { fileData, err := ioutil.ReadFile(path) if err != nil { t.Fatalf("error opening %s: %v", path, err) } return bytes.TrimSpace(fileData) } // TestMakeImageConfig makes sure that MakeImageConfig returns the expected // canonical JSON for a reference Image. func TestMakeImageConfig(t *testing.T) { for _, fixture := range fixtures { v1Compatibility := loadFixtureFile(t, fixture+"/v1compatibility") expectedConfig := loadFixtureFile(t, fixture+"/expected_config") layerID := digest.Digest(loadFixtureFile(t, fixture+"/layer_id")) parentID := digest.Digest(loadFixtureFile(t, fixture+"/parent_id")) json, err := MakeImageConfig(v1Compatibility, layerID, parentID) if err != nil { t.Fatalf("MakeImageConfig on %s returned error: %v", fixture, err) } if !bytes.Equal(json, expectedConfig) { t.Fatalf("did not get expected JSON for %s\nexpected: %s\ngot: %s", fixture, expectedConfig, json) } } } // TestGetStrongID makes sure that GetConfigJSON returns the expected // hash for a reference Image. func TestGetStrongID(t *testing.T) { for _, fixture := range fixtures { expectedConfig := loadFixtureFile(t, fixture+"/expected_config") expectedComputedID := digest.Digest(loadFixtureFile(t, fixture+"/expected_computed_id")) if id, err := StrongID(expectedConfig); err != nil || id != expectedComputedID { t.Fatalf("did not get expected ID for %s\nexpected: %s\ngot: %s\nerror: %v", fixture, expectedComputedID, id, err) } } }