github.com/vchain-us/vcn@v0.9.11-0.20210921212052-a2484d23c0b3/pkg/bundle/manifest_test.go (about) 1 /* 2 * Copyright (c) 2018-2020 vChain, Inc. All Rights Reserved. 3 * This software is released under GPL3. 4 * The full license information can be found under: 5 * https://www.gnu.org/licenses/gpl-3.0.en.html 6 * 7 */ 8 9 package bundle 10 11 import ( 12 "encoding/json" 13 "io" 14 "io/ioutil" 15 "log" 16 "os" 17 "strings" 18 19 "github.com/opencontainers/go-digest" 20 21 "github.com/stretchr/testify/assert" 22 23 "testing" 24 ) 25 26 func getTestManifest(t *testing.T) *Manifest { 27 items := make([]Descriptor, 0) 28 for path, src := range map[string]io.Reader{ 29 "digits.txt": strings.NewReader("1234567890"), 30 "dup-digits.txt": strings.NewReader("1234567890"), 31 "letters.txt": strings.NewReader("abcdef"), 32 } { 33 d, err := NewDescriptor(path, src) 34 assert.NoError(t, err) 35 items = append(items, *d) 36 } 37 38 return NewManifest(items...) 39 } 40 41 func TestManifest(t *testing.T) { 42 43 m := getTestManifest(t) 44 45 assert.NotNil(t, m) 46 47 d, err := m.Digest() 48 assert.NoError(t, err) 49 assert.Equal(t, "sha256:2cc48ce16beff9987ad31f32a7623bda48317d9232dbb75ba9a83f6d85ed073e", d.String()) 50 51 j, err := json.Marshal(m) 52 assert.NoError(t, err) 53 assert.Equal( 54 t, 55 `{"schemaVersion":1,"items":[{"digest":"sha256:bef57ec7f53a6d40beb640a780a639c83bc29ac8a9816f1fc6c5c6dcd93c4721","size":6,"paths":["letters.txt"]},{"digest":"sha256:c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646","size":10,"paths":["digits.txt","dup-digits.txt"]}]}`, 56 string(j), 57 ) 58 59 } 60 61 func TestWriteReadManifest(t *testing.T) { 62 tmpfile, err := ioutil.TempFile("", "vcn-manifest") 63 if err != nil { 64 log.Fatal(err) 65 } 66 filename := tmpfile.Name() 67 defer os.Remove(filename) // clean up 68 m := getTestManifest(t) 69 70 assert.NoError(t, WriteManifest(*m, filename)) 71 72 assert.NoError(t, m.Normalize()) 73 74 mm, err := ReadManifest(filename) 75 assert.NoError(t, err) 76 assert.Equal(t, m, mm) 77 } 78 79 func TestManifestWrongVersion(t *testing.T) { 80 m := Manifest{ 81 SchemaVersion: 11, 82 } 83 err := m.Normalize() 84 assert.Error(t, err) 85 } 86 87 func TestManifestWrongAlgo(t *testing.T) { 88 m := Manifest{ 89 SchemaVersion: 1, 90 Items: []Descriptor{ 91 { 92 Digest: digest.Digest("sha512:cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"), 93 Size: 0, 94 Paths: []string{"file"}, 95 }, 96 }, 97 } 98 assert.Error(t, m.Normalize()) 99 100 m.Items[0].Digest = digest.Digest("sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855") 101 assert.NoError(t, m.Normalize()) 102 } 103 104 func TestManifestSameDigestMultipleSizes(t *testing.T) { 105 m := Manifest{ 106 SchemaVersion: 1, 107 Items: []Descriptor{ 108 { 109 Digest: digest.Digest("sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"), 110 Size: 0, 111 Paths: []string{"file"}, 112 }, 113 { 114 Digest: digest.Digest("sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"), 115 Size: 1, 116 Paths: []string{"file1"}, 117 }, 118 }, 119 } 120 assert.Error(t, m.Normalize()) 121 }