github.com/defanghe/fabric@v2.1.1+incompatible/core/common/ccprovider/targzmetadataprovider_test.go (about) 1 /* 2 Copyright State Street Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package ccprovider 8 9 import ( 10 "archive/tar" 11 "bytes" 12 "compress/gzip" 13 "io" 14 "testing" 15 "time" 16 17 "github.com/stretchr/testify/assert" 18 ) 19 20 type tarEntry struct { 21 name string 22 content []byte 23 } 24 25 func getCodePackage(code []byte, entries []tarEntry) []byte { 26 codePackage := bytes.NewBuffer(nil) 27 gw := gzip.NewWriter(codePackage) 28 tw := tar.NewWriter(gw) 29 30 var zeroTime time.Time 31 for _, e := range entries { 32 tw.WriteHeader(&tar.Header{Name: e.name, Size: int64(len(e.content)), ModTime: zeroTime, AccessTime: zeroTime, ChangeTime: zeroTime}) 33 tw.Write(e.content) 34 } 35 36 tw.WriteHeader(&tar.Header{Name: "fake-path", Size: int64(len(code)), ModTime: zeroTime, AccessTime: zeroTime, ChangeTime: zeroTime}) 37 tw.Write(code) 38 39 tw.Close() 40 gw.Close() 41 42 return codePackage.Bytes() 43 } 44 45 func getNumEntries(tarbytes []byte) (int, error) { 46 b := bytes.NewReader(tarbytes) 47 tr := tar.NewReader(b) 48 49 count := 0 50 // For each file in the code package tar, 51 // add it to the statedb artifact tar if it has "statedb" in the path 52 for { 53 _, err := tr.Next() 54 if err == io.EOF { 55 // We only get here if there are no more entries to scan 56 break 57 } 58 59 if err != nil { 60 return -1, err 61 } 62 63 count = count + 1 64 } 65 66 return count, nil 67 } 68 69 func TestNoMetadata(t *testing.T) { 70 entries := []tarEntry{{"path/to/a/file", []byte("somdata")}} 71 cds := getCodePackage([]byte("cc code"), entries) 72 metadata, err := MetadataAsTarEntries(cds) 73 assert.Nil(t, err) 74 assert.NotNil(t, metadata) 75 count, err := getNumEntries(metadata) 76 assert.Nil(t, err) 77 assert.Equal(t, count, 0) 78 } 79 80 func TestMetadata(t *testing.T) { 81 entries := []tarEntry{{"path/to/a/file", []byte("somdata")}, {ccPackageStatedbDir + "/m1", []byte("m1data")}, {ccPackageStatedbDir + "/m2", []byte("m2data")}} 82 cds := getCodePackage([]byte("cc code"), entries) 83 metadata, err := MetadataAsTarEntries(cds) 84 assert.Nil(t, err) 85 assert.NotNil(t, metadata) 86 count, err := getNumEntries(metadata) 87 assert.Nil(t, err) 88 assert.Equal(t, count, 2) 89 }