summaryrefslogtreecommitdiff
path: root/pkg/sif/descriptor_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/sif/descriptor_test.go')
-rw-r--r--pkg/sif/descriptor_test.go111
1 files changed, 82 insertions, 29 deletions
diff --git a/pkg/sif/descriptor_test.go b/pkg/sif/descriptor_test.go
index 470d91a..21280d9 100644
--- a/pkg/sif/descriptor_test.go
+++ b/pkg/sif/descriptor_test.go
@@ -1,4 +1,4 @@
-// Copyright (c) 2018-2021, Sylabs Inc. All rights reserved.
+// Copyright (c) 2018-2022, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE file distributed with the sources of this project regarding your
// rights to use or distribute this software.
@@ -168,48 +168,51 @@ func TestDescriptor_PartitionMetadata(t *testing.T) {
}
func TestDescriptor_SignatureMetadata(t *testing.T) {
- s := signature{
- Hashtype: hashSHA384,
- }
- copy(s.Entity[:], []byte{
- 0x12, 0x04, 0x5c, 0x8c, 0x0b, 0x10, 0x04, 0xd0, 0x58, 0xde,
- 0x4b, 0xed, 0xa2, 0x0c, 0x27, 0xee, 0x7f, 0xf7, 0xba, 0x84,
- })
-
- rd := rawDescriptor{
- DataType: DataSignature,
- }
- if err := rd.setExtra(s); err != nil {
- t.Fatal(err)
- }
-
tests := []struct {
name string
- rd rawDescriptor
- wantHT crypto.Hash
- wantFP []byte
+ dt DataType
+ ht hashType
+ fp []byte
wantErr error
+ wantHT crypto.Hash
}{
{
- name: "UnexpectedDataType",
- rd: rawDescriptor{
- DataType: DataGeneric,
- },
+ name: "UnexpectedDataType",
+ dt: DataGeneric,
wantErr: &unexpectedDataTypeError{DataGeneric, []DataType{DataSignature}},
},
{
- name: "OK",
- rd: rd,
- wantHT: crypto.SHA384,
- wantFP: []byte{
+ name: "Fingerprint",
+ dt: DataSignature,
+ ht: hashSHA384,
+ fp: []byte{
0x12, 0x04, 0x5c, 0x8c, 0x0b, 0x10, 0x04, 0xd0, 0x58, 0xde,
0x4b, 0xed, 0xa2, 0x0c, 0x27, 0xee, 0x7f, 0xf7, 0xba, 0x84,
},
+ wantHT: crypto.SHA384,
+ },
+ {
+ name: "NoFingerprint",
+ dt: DataSignature,
+ ht: hashSHA256,
+ wantHT: crypto.SHA256,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- d := Descriptor{raw: tt.rd}
+ sig := signature{
+ Hashtype: tt.ht,
+ }
+ copy(sig.Entity[:], tt.fp)
+
+ rd := rawDescriptor{
+ DataType: tt.dt,
+ }
+ if err := rd.setExtra(sig); err != nil {
+ t.Fatal(err)
+ }
+
+ d := Descriptor{raw: rd}
ht, fp, err := d.SignatureMetadata()
@@ -222,7 +225,7 @@ func TestDescriptor_SignatureMetadata(t *testing.T) {
t.Fatalf("got hash type %v, want %v", got, want)
}
- if got, want := fp, tt.wantFP; !bytes.Equal(got, want) {
+ if got, want := fp, tt.fp; !bytes.Equal(got, want) {
t.Fatalf("got entity %v, want %v", got, want)
}
}
@@ -287,6 +290,56 @@ func TestDescriptor_CryptoMessageMetadata(t *testing.T) {
}
}
+func TestDescriptor_SBOMMetadata(t *testing.T) {
+ m := sbom{
+ Format: SBOMFormatCycloneDXJSON,
+ }
+
+ rd := rawDescriptor{
+ DataType: DataSBOM,
+ }
+ if err := rd.setExtra(m); err != nil {
+ t.Fatal(err)
+ }
+
+ tests := []struct {
+ name string
+ rd rawDescriptor
+ wantFormat SBOMFormat
+ wantErr error
+ }{
+ {
+ name: "UnexpectedDataType",
+ rd: rawDescriptor{
+ DataType: DataGeneric,
+ },
+ wantErr: &unexpectedDataTypeError{DataGeneric, []DataType{DataSBOM}},
+ },
+ {
+ name: "OK",
+ rd: rd,
+ wantFormat: SBOMFormatCycloneDXJSON,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ d := Descriptor{raw: tt.rd}
+
+ f, err := d.SBOMMetadata()
+
+ if got, want := err, tt.wantErr; !errors.Is(got, want) {
+ t.Fatalf("got error %v, want %v", got, want)
+ }
+
+ if err == nil {
+ if got, want := f, tt.wantFormat; got != want {
+ t.Fatalf("got format %v, want %v", got, want)
+ }
+ }
+ })
+ }
+}
+
func TestDescriptor_GetIntegrityReader(t *testing.T) {
rd := rawDescriptor{
DataType: DataDeffile,