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  }