github.com/endocode/docker@v1.4.2-0.20160113120958-46eb4700391e/distribution/metadata/blobsum_service_test.go (about) 1 package metadata 2 3 import ( 4 "io/ioutil" 5 "os" 6 "reflect" 7 "testing" 8 9 "github.com/docker/distribution/digest" 10 "github.com/docker/docker/layer" 11 ) 12 13 func TestBlobSumService(t *testing.T) { 14 tmpDir, err := ioutil.TempDir("", "blobsum-storage-service-test") 15 if err != nil { 16 t.Fatalf("could not create temp dir: %v", err) 17 } 18 defer os.RemoveAll(tmpDir) 19 20 metadataStore, err := NewFSMetadataStore(tmpDir) 21 if err != nil { 22 t.Fatalf("could not create metadata store: %v", err) 23 } 24 blobSumService := NewBlobSumService(metadataStore) 25 26 testVectors := []struct { 27 diffID layer.DiffID 28 blobsums []digest.Digest 29 }{ 30 { 31 diffID: layer.DiffID("sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"), 32 blobsums: []digest.Digest{ 33 digest.Digest("sha256:f0cd5ca10b07f35512fc2f1cbf9a6cefbdb5cba70ac6b0c9e5988f4497f71937"), 34 }, 35 }, 36 { 37 diffID: layer.DiffID("sha256:86e0e091d0da6bde2456dbb48306f3956bbeb2eae1b5b9a43045843f69fe4aaa"), 38 blobsums: []digest.Digest{ 39 digest.Digest("sha256:f0cd5ca10b07f35512fc2f1cbf9a6cefbdb5cba70ac6b0c9e5988f4497f71937"), 40 digest.Digest("sha256:9e3447ca24cb96d86ebd5960cb34d1299b07e0a0e03801d90b9969a2c187dd6e"), 41 }, 42 }, 43 { 44 diffID: layer.DiffID("sha256:03f4658f8b782e12230c1783426bd3bacce651ce582a4ffb6fbbfa2079428ecb"), 45 blobsums: []digest.Digest{ 46 digest.Digest("sha256:f0cd5ca10b07f35512fc2f1cbf9a6cefbdb5cba70ac6b0c9e5988f4497f71937"), 47 digest.Digest("sha256:9e3447ca24cb96d86ebd5960cb34d1299b07e0a0e03801d90b9969a2c187dd6e"), 48 digest.Digest("sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf"), 49 digest.Digest("sha256:8902a7ca89aabbb868835260912159026637634090dd8899eee969523252236e"), 50 digest.Digest("sha256:c84364306344ccc48532c52ff5209236273525231dddaaab53262322352883aa"), 51 digest.Digest("sha256:aa7583bbc87532a8352bbb72520a821b3623523523a8352523a52352aaa888fe"), 52 }, 53 }, 54 } 55 56 // Set some associations 57 for _, vec := range testVectors { 58 for _, blobsum := range vec.blobsums { 59 err := blobSumService.Add(vec.diffID, blobsum) 60 if err != nil { 61 t.Fatalf("error calling Set: %v", err) 62 } 63 } 64 } 65 66 // Check the correct values are read back 67 for _, vec := range testVectors { 68 blobsums, err := blobSumService.GetBlobSums(vec.diffID) 69 if err != nil { 70 t.Fatalf("error calling Get: %v", err) 71 } 72 expectedBlobsums := len(vec.blobsums) 73 if expectedBlobsums > 5 { 74 expectedBlobsums = 5 75 } 76 if !reflect.DeepEqual(blobsums, vec.blobsums[len(vec.blobsums)-expectedBlobsums:len(vec.blobsums)]) { 77 t.Fatal("Get returned incorrect layer ID") 78 } 79 } 80 81 // Test GetBlobSums on a nonexistent entry 82 _, err = blobSumService.GetBlobSums(layer.DiffID("sha256:82379823067823853223359023576437723560923756b03560378f4497753917")) 83 if err == nil { 84 t.Fatal("expected error looking up nonexistent entry") 85 } 86 87 // Test GetDiffID on a nonexistent entry 88 _, err = blobSumService.GetDiffID(digest.Digest("sha256:82379823067823853223359023576437723560923756b03560378f4497753917")) 89 if err == nil { 90 t.Fatal("expected error looking up nonexistent entry") 91 } 92 93 // Overwrite one of the entries and read it back 94 err = blobSumService.Add(testVectors[1].diffID, testVectors[0].blobsums[0]) 95 if err != nil { 96 t.Fatalf("error calling Add: %v", err) 97 } 98 diffID, err := blobSumService.GetDiffID(testVectors[0].blobsums[0]) 99 if err != nil { 100 t.Fatalf("error calling GetDiffID: %v", err) 101 } 102 if diffID != testVectors[1].diffID { 103 t.Fatal("GetDiffID returned incorrect diffID") 104 } 105 }