Skip to content

Commit

Permalink
Changed NewElement methods to return error instead of nil
Browse files Browse the repository at this point in the history
Signed-off-by: Yogesh Deshpande <[email protected]>
  • Loading branch information
yogeshbdeshpande committed Feb 11, 2025
1 parent 9ec2a7c commit 7c8464c
Show file tree
Hide file tree
Showing 18 changed files with 112 additions and 80 deletions.
18 changes: 14 additions & 4 deletions comid/tdx-profile/example_pce_refval_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,19 +308,29 @@ func Example_encode_tdx_pce_refval_with_profile() {
}

func setTDXPCEMvalExtension(val *comid.Mval) error {
instanceID := NewTeeInstanceID(TestUIntInstance)
err := val.Extensions.Set("instanceid", instanceID)
instanceID, err := NewTeeInstanceID(TestUIntInstance)
if err != nil {
return fmt.Errorf("unable to get teeinstanceID %w", err)
}
err = val.Extensions.Set("instanceid", instanceID)
if err != nil {
return fmt.Errorf("unable to set teeinstanceID %w", err)
}

p := NewTeePCEID(TestPCEID)
p, err := NewTeePCEID(TestPCEID)
if err != nil {
return fmt.Errorf("unable to get NewTeepceID %w", err)
}
err = val.Extensions.Set("pceid", p)
if err != nil {
return fmt.Errorf("unable to set teepceID %w", err)
}

c := NewTeeTcbCompSVN(TestCompSVN)
c, err := NewTeeTcbCompSVN(TestCompSVN)
if err != nil {
return fmt.Errorf("failed to get TeeTcbCompSVN %w", err)
}

err = val.Extensions.Set("tcbcompsvn", c)
if err != nil {
return fmt.Errorf("unable to set teetcbcompsvn: %w", err)
Expand Down
8 changes: 6 additions & 2 deletions comid/tdx-profile/example_qe_refval_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,12 @@ func setTDXQEMvalExtensions(val *comid.Mval) error {
teeMiscSel := TeeMiscSelect([]byte{0xC0, 0x00, 0xFB, 0xFF, 0x00, 0x00}) // Taken from irim-qe-ref.diag
// Taken below from irim-qe-ref.diag
r := 1
isvProdID := NewTeeISVProdID(r)
err := val.Extensions.Set("isvprodid", isvProdID)
isvProdID, err := NewTeeISVProdID(r)
if err != nil {
return fmt.Errorf("unable to get isvprodid %w", err)
}

err = val.Extensions.Set("isvprodid", isvProdID)
if err != nil {
return fmt.Errorf("unable to set isvprodid %w", err)
}
Expand Down
10 changes: 8 additions & 2 deletions comid/tdx-profile/example_seam_refval_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,10 @@ func setTDXSeamMvalExtensions(val *comid.Mval) error {
return fmt.Errorf("unable to set tcbDate %w", err)
}
r := []byte{0x01, 0x01}
isvProdID := NewTeeISVProdID(r)
isvProdID, err := NewTeeISVProdID(r)
if err != nil {
return fmt.Errorf("unable to get isvprodid %w", err)
}
err = val.Extensions.Set("isvprodid", isvProdID)
if err != nil {
return fmt.Errorf("unable to set isvprodid %w", err)
Expand All @@ -239,7 +242,10 @@ func setTDXSeamMvalExtensions(val *comid.Mval) error {
return fmt.Errorf("unable to set tcbevalnum %w", err)
}

teeAttr := NewTeeAttributes(TestTeeAttributes)
teeAttr, err := NewTeeAttributes(TestTeeAttributes)
if err != nil {
fmt.Errorf("unable to get teeAttributes %w", err)

Check failure on line 247 in comid/tdx-profile/example_seam_refval_test.go

View workflow job for this annotation

GitHub Actions / Lint

unusedresult: result of fmt.Errorf call not used (govet)

Check failure on line 247 in comid/tdx-profile/example_seam_refval_test.go

View workflow job for this annotation

GitHub Actions / Lint

unusedresult: result of fmt.Errorf call not used (govet)
}
err = val.Extensions.Set("attributes", teeAttr)
if err != nil {
return fmt.Errorf("unable to set attributes %w", err)
Expand Down
10 changes: 5 additions & 5 deletions comid/tdx-profile/teeadvisoryids.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@ type TeeAdvisoryIDs setType
// supplied interface array and returns a pointer to
// the AdvisoryIDs. In this version only
// Advisory IDs of string type are supported
func NewTeeAvisoryIDs(val []any) *TeeAdvisoryIDs {
func NewTeeAvisoryIDs(val []any) (*TeeAdvisoryIDs, error) {
var adv TeeAdvisoryIDs
if len(val) == 0 {
return nil
return nil, fmt.Errorf("zero len TeeAdvisoryIDs")
}

for _, v := range val {
for i, v := range val {
switch t := v.(type) {
case string:
adv = append(adv, t)
default:
return nil
return nil, fmt.Errorf("invalid type: %T for AdvisoryIDs at index: %d", t, i)
}
}
return &adv
return &adv, nil
}

// AddTeeAdvisoryIDs add supplied AvisoryIDs to existing AdvisoryIDs
Expand Down
14 changes: 8 additions & 6 deletions comid/tdx-profile/teeadvisoryids_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,18 @@ func initAdvisoryIDs() []any {

func TestAdvisoryIDs_NewTeeAvisoryIDs_OK(t *testing.T) {
a := initAdvisoryIDs()
adv := NewTeeAvisoryIDs(a)
require.NotNil(t, adv)
_, err := NewTeeAvisoryIDs(a)
require.Nil(t, err)
}

func TestAdvisoryIDs_NewTeeAvisoryIDs_NOK(t *testing.T) {
expectedErr := "invalid type: int for AdvisoryIDs at index: 0"
a := make([]any, len(TestAdvisoryIDs))
for i := range TestAdvisoryIDs {
a[i] = i
}
adv := NewTeeAvisoryIDs(a)
require.Nil(t, adv)
_, err := NewTeeAvisoryIDs(a)
assert.EqualError(t, err, expectedErr)
}

func TestAdvisoryIDs_AddAdvisoryIDs_OK(t *testing.T) {
Expand All @@ -53,8 +54,9 @@ func TestAdvisoryIDs_AddAdvisoryIDs_NOK(t *testing.T) {

func TestAdvisoryIDs_Valid_OK(t *testing.T) {
a := initAdvisoryIDs()
adv := NewTeeAvisoryIDs(a)
err := adv.Valid()
adv, err := NewTeeAvisoryIDs(a)
require.NoError(t, err)
err = adv.Valid()
require.NoError(t, err)
}

Expand Down
6 changes: 3 additions & 3 deletions comid/tdx-profile/teeattributes.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ import "fmt"

type TeeAttributes maskType

func NewTeeAttributes(val []byte) *TeeAttributes {
func NewTeeAttributes(val []byte) (*TeeAttributes, error) {
if val == nil {
return nil
return nil, fmt.Errorf("nil TeeAttributes")
}
teeAttributes := TeeAttributes(val)
return &teeAttributes
return &teeAttributes, nil
}

func (o TeeAttributes) Valid() error {
Expand Down
9 changes: 5 additions & 4 deletions comid/tdx-profile/teeattributes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ import (
)

func TestNewTeeAttributes_NewTeeAttributes_OK(t *testing.T) {
tA := NewTeeAttributes(TestTeeAttributes)
require.NotNil(t, tA)
_, err := NewTeeAttributes(TestTeeAttributes)
require.Nil(t, err)
}

func TestNewTeeAttributes_NewTeeAttributes_NOK(t *testing.T) {
tA := NewTeeAttributes(nil)
require.Nil(t, tA)
expectedErr := "nil TeeAttributes"
_, err := NewTeeAttributes(nil)
assert.EqualError(t, err, expectedErr)
}

func TestNewTeeAttributes_Valid_OK(t *testing.T) {
Expand Down
12 changes: 6 additions & 6 deletions comid/tdx-profile/teeinstanceid.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ type TeeInstanceID struct {
// NewTeeInstanceID creates a new InstanceID from the
// supplied interface. The supported types are positive integers and
// byte array
func NewTeeInstanceID(val interface{}) *TeeInstanceID {
func NewTeeInstanceID(val interface{}) (*TeeInstanceID, error) {
switch t := val.(type) {
case uint, uint64:
return &TeeInstanceID{val: t}
return &TeeInstanceID{val: t}, nil
case []byte:
return &TeeInstanceID{val: t}
return &TeeInstanceID{val: t}, nil
case int:
if t < 0 {
return nil
return nil, fmt.Errorf("unsupported negative %d TeeInstanceID", t)
}
return &TeeInstanceID{val: t}
return &TeeInstanceID{val: t}, nil
default:
return nil
return nil, fmt.Errorf("unsupported TeeInstanceID type: %T", t)
}
}

Expand Down
8 changes: 4 additions & 4 deletions comid/tdx-profile/teeinstanceid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ func TestTeeInstanceID_NewTeeInstanceID_OK(t *testing.T) {
}

for _, tv := range tvs {
inst := NewTeeInstanceID(tv.input)
require.NotNil(t, inst)
_, err := NewTeeInstanceID(tv.input)
require.Nil(t, err)
}
}

Expand Down Expand Up @@ -99,8 +99,8 @@ func TestTeeInstanceID_Valid_NOK(t *testing.T) {
}

func TestTeeInstanceID_MarshalCBOR_Bytes(t *testing.T) {
inst := NewTeeInstanceID(TestByteInstance)
require.NotNil(t, inst)
inst, err := NewTeeInstanceID(TestByteInstance)
require.Nil(t, err)
expected := comid.MustHexDecode(t, "43454647")
actual, err := inst.MarshalCBOR()
fmt.Printf("CBOR: %x\n", actual)
Expand Down
12 changes: 6 additions & 6 deletions comid/tdx-profile/teeisvproid.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ type TeeISVProdID struct {
// NewTeeISVProdID creates a new TeeISVProdID from the
// supplied interface and return a pointer to TeeISVProdID
// Supported values are positive integers and byte array
func NewTeeISVProdID(val interface{}) *TeeISVProdID {
func NewTeeISVProdID(val interface{}) (*TeeISVProdID, error) {
switch t := val.(type) {
case uint, uint64:
return &TeeISVProdID{val: t}
return &TeeISVProdID{val: t}, nil
case []byte:
return &TeeISVProdID{val: t}
return &TeeISVProdID{val: t}, nil
case int:
if t < 0 {
return nil
return nil, fmt.Errorf("negative integer %d for TeeISVProdID", t)
}
return &TeeISVProdID{val: t}
return &TeeISVProdID{val: t}, nil
default:
return nil
return nil, fmt.Errorf("unsupported TeeISVProdID type: %T", t)
}
}

Expand Down
8 changes: 4 additions & 4 deletions comid/tdx-profile/teeisvproid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ func TestISVProdID_NewISVProdID_OK(t *testing.T) {
}

for _, tv := range tvs {
id := NewTeeISVProdID(tv.input)
require.NotNil(t, id)
_, err := NewTeeISVProdID(tv.input)
require.Nil(t, err)
}
}

Expand Down Expand Up @@ -102,8 +102,8 @@ func TestIsvProdID_Valid_NOK(t *testing.T) {
}

func TestIsvProdID_MarshalCBOR_Bytes(t *testing.T) {
id := NewTeeISVProdID(TestBytesISVProdID)
require.NotNil(t, id)
id, err := NewTeeISVProdID(TestBytesISVProdID)
require.Nil(t, err)
expected := comid.MustHexDecode(t, "43010203")
actual, err := id.MarshalCBOR()
fmt.Printf("CBOR: %x\n", actual)
Expand Down
6 changes: 3 additions & 3 deletions comid/tdx-profile/teemiscselect.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ import "fmt"

type TeeMiscSelect maskType

func NewTeeMiscSelect(val []byte) *TeeMiscSelect {
func NewTeeMiscSelect(val []byte) (*TeeMiscSelect, error) {
var miscSelect TeeMiscSelect
if val == nil {
return nil
return nil, fmt.Errorf("nil value for TeeMiscSelect")
}
miscSelect = TeeMiscSelect(val)
return &miscSelect
return &miscSelect, nil
}

func (o TeeMiscSelect) Valid() error {
Expand Down
9 changes: 5 additions & 4 deletions comid/tdx-profile/teemiscselect_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@ import (
)

func TestTeeMiscSelect_NewTeeMiscSelect_OK(t *testing.T) {
tA := NewTeeMiscSelect(TestTeeMiscSelect)
require.NotNil(t, tA)
_, err := NewTeeMiscSelect(TestTeeMiscSelect)
require.Nil(t, err)
}

func TestTeeMiscSelect_NewTeeMiscSelect_NOK(t *testing.T) {
tA := NewTeeMiscSelect(nil)
require.Nil(t, tA)
expectedErr := "nil value for TeeMiscSelect"
_, err := NewTeeMiscSelect(nil)
assert.EqualError(t, err, expectedErr)
}

func TestNewTeeMiscSelect_Valid_OK(t *testing.T) {
Expand Down
6 changes: 3 additions & 3 deletions comid/tdx-profile/teepceid.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ import (

type TeePCEID string

func NewTeePCEID(val string) *TeePCEID {
func NewTeePCEID(val string) (*TeePCEID, error) {
var pceID TeePCEID
if val == "" {
return nil
return nil, fmt.Errorf("null string for TeePCEID")
}
pceID = TeePCEID(val)
return &pceID
return &pceID, nil
}

func (o TeePCEID) Valid() error {
Expand Down
16 changes: 9 additions & 7 deletions comid/tdx-profile/teepceid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,21 @@ import (
)

func TestPCEID_NewTeePCEID_OK(t *testing.T) {
pceID := NewTeePCEID(TestPCEID)
require.NotNil(t, pceID)
_, err := NewTeePCEID(TestPCEID)
require.NoError(t, err)
}

func TestPCEID_NewTeePCEID_NOK(t *testing.T) {
pceID := NewTeePCEID("")
require.Nil(t, pceID)
expectedErr := "null string for TeePCEID"
_, err := NewTeePCEID("")
assert.EqualError(t, err, expectedErr)
}

func TestPCEID_Valid_OK(t *testing.T) {
pceID := NewTeePCEID(TestPCEID)
err := pceID.Valid()
require.Nil(t, err)
pceID, err := NewTeePCEID(TestPCEID)
require.NoError(t, err)
err = pceID.Valid()
require.NoError(t, err)
}

func TestPCEID_Valid_NOK(t *testing.T) {
Expand Down
11 changes: 7 additions & 4 deletions comid/tdx-profile/teetcbcompsvn.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,18 @@ const MaxSVNCount = 16

type TeeTcbCompSvn [MaxSVNCount]TeeSVN

func NewTeeTcbCompSVN(val []uint) *TeeTcbCompSvn {
if len(val) > MaxSVNCount || len(val) == 0 {
return nil
func NewTeeTcbCompSVN(val []uint) (*TeeTcbCompSvn, error) {
if len(val) > MaxSVNCount {
return nil, fmt.Errorf("invalid length %d for TeeTcbCompSVN", len(val))
} else if len(val) == 0 {
return nil, fmt.Errorf("no value supplied for TeeTcbCompSVN")
}

TeeTcbCompSVN := make([]TeeSVN, MaxSVNCount)
for i, value := range val {
TeeTcbCompSVN[i] = TeeSVN(value)
}
return (*TeeTcbCompSvn)(TeeTcbCompSVN)
return (*TeeTcbCompSvn)(TeeTcbCompSVN), nil
}

// nolint:gocritic
Expand Down
10 changes: 5 additions & 5 deletions comid/tdx-profile/teetcbstatus.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@ import "fmt"

type TeeTcbStatus setType

func NewTeeTcbStatus(val []any) *TeeTcbStatus {
func NewTeeTcbStatus(val []any) (*TeeTcbStatus, error) {
var ts TeeTcbStatus
if len(val) == 0 {
return nil
return nil, fmt.Errorf("nil value argument")
}

for _, v := range val {
for i, v := range val {
switch t := v.(type) {
case string:
ts = append(ts, t)
default:
return nil
return nil, fmt.Errorf("invalid type: %T for tcb status at index: %d", t, i)
}
}
return &ts
return &ts, nil
}

func (o *TeeTcbStatus) AddTeeTcbStatus(val []any) error {
Expand Down
Loading

0 comments on commit 7c8464c

Please sign in to comment.