|
@@ -0,0 +1,82 @@
|
|
|
|
+package graph
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "encoding/json"
|
|
|
|
+ "os"
|
|
|
|
+ "testing"
|
|
|
|
+
|
|
|
|
+ "github.com/docker/docker/image"
|
|
|
|
+ "github.com/docker/docker/registry"
|
|
|
|
+ "github.com/docker/docker/utils"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+const (
|
|
|
|
+ testManifestImageName = "testapp"
|
|
|
|
+ testManifestImageID = "d821b739e8834ec89ac4469266c3d11515da88fdcbcbdddcbcddb636f54fdde9"
|
|
|
|
+ testManifestImageIDShort = "d821b739e883"
|
|
|
|
+ testManifestTag = "manifesttest"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func TestManifestTarsumCache(t *testing.T) {
|
|
|
|
+ tmp, err := utils.TestDirectory("")
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ defer os.RemoveAll(tmp)
|
|
|
|
+ store := mkTestTagStore(tmp, t)
|
|
|
|
+ defer store.graph.driver.Cleanup()
|
|
|
|
+
|
|
|
|
+ archive, err := fakeTar()
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ img := &image.Image{ID: testManifestImageID}
|
|
|
|
+ if err := store.graph.Register(img, archive); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ if err := store.Set(testManifestImageName, testManifestTag, testManifestImageID, false); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if cs, err := img.GetCheckSum(store.graph.ImageRoot(testManifestImageID)); err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ } else if cs != "" {
|
|
|
|
+ t.Fatalf("Non-empty checksum file after register")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // Generate manifest
|
|
|
|
+ payload, err := store.newManifest(testManifestImageName, testManifestImageName, testManifestTag)
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ manifestChecksum, err := img.GetCheckSum(store.graph.ImageRoot(testManifestImageID))
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var manifest registry.ManifestData
|
|
|
|
+ if err := json.Unmarshal(payload, &manifest); err != nil {
|
|
|
|
+ t.Fatalf("error unmarshalling manifest: %s", err)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(manifest.FSLayers) != 1 {
|
|
|
|
+ t.Fatalf("Unexpected number of layers, expecting 1: %d", len(manifest.FSLayers))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if manifest.FSLayers[0].BlobSum != manifestChecksum {
|
|
|
|
+ t.Fatalf("Unexpected blob sum, expecting %q, got %q", manifestChecksum, manifest.FSLayers[0].BlobSum)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if len(manifest.History) != 1 {
|
|
|
|
+ t.Fatalf("Unexpected number of layer history, expecting 1: %d", len(manifest.History))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ v1compat, err := img.RawJson()
|
|
|
|
+ if err != nil {
|
|
|
|
+ t.Fatal(err)
|
|
|
|
+ }
|
|
|
|
+ if manifest.History[0].V1Compatibility != string(v1compat) {
|
|
|
|
+ t.Fatalf("Unexpected json value\nExpected:\n%s\nActual:\n%s", v1compat, manifest.History[0].V1Compatibility)
|
|
|
|
+ }
|
|
|
|
+}
|