diff options
| author | Rasmus Dahlberg <rasmus.dahlberg@kau.se> | 2021-02-23 11:29:29 +0100 | 
|---|---|---|
| committer | Rasmus Dahlberg <rasmus.dahlberg@kau.se> | 2021-02-23 11:29:29 +0100 | 
| commit | 7d548d838fa9023e8be902dc3db47a3e78e592ea (patch) | |
| tree | e6f7f8da44a29d848474d244f5dfd3c444aa593a /types | |
| parent | 666e41811bdd46e24ced8ddd3448243ecb2f45c3 (diff) | |
added StItemList
Diffstat (limited to 'types')
| -rw-r--r-- | types/item.go | 5 | ||||
| -rw-r--r-- | types/item_test.go | 45 | 
2 files changed, 49 insertions, 1 deletions
| diff --git a/types/item.go b/types/item.go index 5e8836e..8596ce4 100644 --- a/types/item.go +++ b/types/item.go @@ -28,7 +28,10 @@ type StItem struct {  	SignedChecksumV1   *SignedChecksumV1   `tls:"selector:Format,val:5"`  } -// TODO: StItemList +// StItemList is an StItem List that is at most 2^32-1 bytes when serialized. +type StItemList struct { +	Items []StItem `tls:"minlen:0,maxlen:4294967295"` +}  type SignedTreeHeadV1 struct {  	TreeHead  TreeHeadV1 diff --git a/types/item_test.go b/types/item_test.go index 01c3376..6788f51 100644 --- a/types/item_test.go +++ b/types/item_test.go @@ -4,6 +4,8 @@ import (  	"bytes"  	"strings"  	"testing" + +	"encoding/binary"  )  // testCaseType is a common test case used for ST log types @@ -19,6 +21,7 @@ type testCaseType struct {  // marshalled.  If wantBytes is non-nil the marshalled result must also match.  func TestMarshalUnmarshal(t *testing.T) {  	var tests []testCaseType +	tests = append(tests, test_cases_stitemlist(t)...)  	tests = append(tests, test_cases_stitem(t)...)  	tests = append(tests, test_cases_sthv1(t)...)  	tests = append(tests, test_cases_costhv1(t)...) @@ -44,6 +47,9 @@ func TestMarshalUnmarshal(t *testing.T) {  		}  		switch table.item.(type) { +		case StItemList: +			var item StItemList +			err = Unmarshal(b, &item)  		case StItem:  			var item StItem  			err = Unmarshal(b, &item) @@ -150,6 +156,28 @@ func TestStItemString(t *testing.T) {  }  var ( +	// StItemList +	testStItemList = StItemList{ +		Items: []StItem{ +			testStItemSignedChecksumV1, +			testStItemInclusionProofV1, +			testStItemCosignedTreeHeadV1, +		}, +	} +	testStItemListBytes = bytes.Join([][]byte{ +		func() []byte { +			sum := uint32(len(testStItemSignedChecksumV1Bytes)) +			sum += uint32(len(testStItemInclusionProofV1Bytes)) +			sum += uint32(len(testStItemCosignedTreeHeadV1Bytes)) +			buf := make([]byte, 4) +			binary.BigEndian.PutUint32(buf, sum) +			return buf +		}(), // length specifier list +		testStItemSignedChecksumV1Bytes,   // first StItem +		testStItemInclusionProofV1Bytes,   // second StItem +		testStItemCosignedTreeHeadV1Bytes, // third StItem +	}, nil) +  	// StItem  	testStItemReserved = StItem{  		Format: StFormatReserved, @@ -308,6 +336,23 @@ var (  	}, nil)  ) +// test_cases_stitemlist returns test cases for the StItemList type +func test_cases_stitemlist(t *testing.T) []testCaseType { +	t.Helper() +	return []testCaseType{ +		testCaseType{ +			description: "test_cases_stitemlist: valid: StItemList: empty", +			item:        StItemList{}, +			wantBytes:   []byte{0x00, 0x00, 0x00, 0x00}, +		}, // skip max len check because it is huge +		testCaseType{ +			description: "test_cases_stitemlist: valid: mixed content", +			item:        testStItemList, +			wantBytes:   testStItemListBytes, +		}, // other invalid bounds are already tested in subtypes +	} +} +  // test_cases_stitem returns test cases for the different StItem types  func test_cases_stitem(t *testing.T) []testCaseType {  	t.Helper() | 
