From ca2809b57262dd923b11e6141cfc5d3f27458a3c Mon Sep 17 00:00:00 2001 From: Tim Trippel Date: Thu, 12 Sep 2024 15:48:28 -0700 Subject: [PATCH] [test] consolidate test data into one library This fixes #15 by consolidating all common prota validation test data into a single library. Signed-off-by: Tim Trippel --- src/proto/BUILD.bazel | 9 ++- src/proto/device_testdata.go | 64 +++++++++++++++---- src/proto/validators.go | 8 +-- src/proto/validators_test.go | 78 +++++------------------ src/proxy_buffer/proto/BUILD.bazel | 1 + src/proxy_buffer/proto/validators_test.go | 66 ++++--------------- 6 files changed, 95 insertions(+), 131 deletions(-) diff --git a/src/proto/BUILD.bazel b/src/proto/BUILD.bazel index 4606be4..b05a4ff 100644 --- a/src/proto/BUILD.bazel +++ b/src/proto/BUILD.bazel @@ -25,7 +25,9 @@ go_library( name = "validators", srcs = ["validators.go"], importpath = "github.com/lowRISC/opentitan-provisioning/src/proto/validators", - deps = [":device_id_go_pb"], + deps = [ + ":device_id_go_pb", + ], ) go_library( @@ -33,11 +35,14 @@ go_library( testonly = True, srcs = ["device_testdata.go"], importpath = "github.com/lowRISC/opentitan-provisioning/src/proto/device_testdata", - deps = [":device_id_go_pb"], + deps = [ + ":device_id_go_pb", + ], ) go_test( name = "validators_test", srcs = ["validators_test.go"], embed = [":validators"], + deps = [":device_testdata"], ) diff --git a/src/proto/device_testdata.go b/src/proto/device_testdata.go index 3d7c19f..8779237 100644 --- a/src/proto/device_testdata.go +++ b/src/proto/device_testdata.go @@ -2,7 +2,7 @@ // Licensed under the Apache License, Version 2.0, see LICENSE for details. // SPDX-License-Identifier: Apache-2.0 -// Package device_data contains device variables. +// Package device_data contains data objects for testing. package device_testdata import ( @@ -10,51 +10,91 @@ import ( ) const ( - DeviceIdSkuSpecificLen = 128 + DeviceIdSkuSpecificLenInBytes = 16 + MaxDeviceDataPayloadLenInBytes = 8192 ) var ( - hwOriginOk = dpb.HardwareOrigin{ + // HardwareOrigin objects. + // TODO: add varying device identification numbers to test cases + HwOriginOk = dpb.HardwareOrigin{ SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_OPENSOURCE, ProductId: dpb.ProductId_PRODUCT_ID_EARLGREY_Z1, DeviceIdentificationNumber: 0, } - hwOriginBadSiliconCreatorId = dpb.HardwareOrigin{ + HwOriginBadSiliconCreatorId = dpb.HardwareOrigin{ SiliconCreatorId: 2, ProductId: dpb.ProductId_PRODUCT_ID_EARLGREY_A1, DeviceIdentificationNumber: 0, } - hwOriginBadProductId = dpb.HardwareOrigin{ + HwOriginBadProductId = dpb.HardwareOrigin{ SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_NUVOTON, ProductId: 0x10000, DeviceIdentificationNumber: 0, } + + // DeviceId objects. + DeviceIdOk = dpb.DeviceId{ + HardwareOrigin: &HwOriginOk, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes), + } + DeviceIdOkMissingSkuSpecific = dpb.DeviceId{ + HardwareOrigin: &HwOriginOk, + SkuSpecific: nil, // Empty SkuSpecific is OK. + } + DeviceIdBadSiliconCreatorId = dpb.DeviceId{ + HardwareOrigin: &HwOriginBadSiliconCreatorId, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes), + } + DeviceIdBadProductId = dpb.DeviceId{ + HardwareOrigin: &HwOriginBadProductId, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes), + } + DeviceIdSkuTooLong = dpb.DeviceId{ + HardwareOrigin: &HwOriginOk, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes+1), + } + // TODO: add deviceIdBadCrc, which would have a bad Crc32 field. + + // DeviceData objects. + DeviceDataOk = dpb.DeviceData{ + Payload: make([]byte, MaxDeviceDataPayloadLenInBytes), + DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_PROD, + } + DeviceDataBadPayloadTooLarge = dpb.DeviceData{ + Payload: make([]byte, MaxDeviceDataPayloadLenInBytes+1), + DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_PROD, + } + DeviceDataBadLifeCycle = dpb.DeviceData{ + Payload: make([]byte, 0), + DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_UNSPECIFIED, + } ) func NewDeviceID() *dpb.DeviceId { return &dpb.DeviceId{ - HardwareOrigin: &hwOriginOk, - SkuSpecific: make([]byte, DeviceIdSkuSpecificLen), + HardwareOrigin: &HwOriginOk, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes), } } func NewDeviceIDSkuTooLong() *dpb.DeviceId { return &dpb.DeviceId{ - HardwareOrigin: &hwOriginOk, - SkuSpecific: make([]byte, DeviceIdSkuSpecificLen+1), + HardwareOrigin: &HwOriginOk, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes+1), } } func NewDeviceIDMissingSku() *dpb.DeviceId { return &dpb.DeviceId{ - HardwareOrigin: &hwOriginOk, + HardwareOrigin: &HwOriginOk, SkuSpecific: nil, // Empty SkuSpecific is OK. } } func NewDeviceIdBadOrigin() *dpb.DeviceId { return &dpb.DeviceId{ - HardwareOrigin: &hwOriginBadSiliconCreatorId, - SkuSpecific: make([]byte, DeviceIdSkuSpecificLen), + HardwareOrigin: &HwOriginBadSiliconCreatorId, + SkuSpecific: make([]byte, DeviceIdSkuSpecificLenInBytes), } } diff --git a/src/proto/validators.go b/src/proto/validators.go index 2b5b81c..4285922 100644 --- a/src/proto/validators.go +++ b/src/proto/validators.go @@ -17,8 +17,8 @@ import ( ) const ( - DeviceIdSkuSpecificLen = 128 - MaxDeviceDataPayloadLen = 8192 + DeviceIdSkuSpecificLenInBytes = 16 + MaxDeviceDataPayloadLenInBytes = 8192 ) // Checks that a uint32 fits into 16 bits. @@ -77,7 +77,7 @@ func ValidateDeviceId(di *dpb.DeviceId) error { // len(di.SkuSpecific) == 0 ==> (optional) field not supplied, // which is considered valid. - if len(di.SkuSpecific) != 0 && len(di.SkuSpecific) != DeviceIdSkuSpecificLen { + if len(di.SkuSpecific) != 0 && len(di.SkuSpecific) != DeviceIdSkuSpecificLenInBytes { return fmt.Errorf("Invalid SkuSpecific string length: %v", len(di.SkuSpecific)) } @@ -98,7 +98,7 @@ func DeviceIdToString(di *dpb.DeviceId) string { // 0-length is considered valid. func validatePayload(payload []byte) error { l := len(payload) - if l > MaxDeviceDataPayloadLen { + if l > MaxDeviceDataPayloadLenInBytes { return fmt.Errorf("Invalid Payload length: %v", l) } diff --git a/src/proto/validators_test.go b/src/proto/validators_test.go index 9e5544b..84953a1 100644 --- a/src/proto/validators_test.go +++ b/src/proto/validators_test.go @@ -8,6 +8,7 @@ import ( "testing" dpb "github.com/lowRISC/opentitan-provisioning/src/proto/device_id_go_pb" + dtd "github.com/lowRISC/opentitan-provisioning/src/proto/device_testdata" ) const okCertPEM = ` @@ -42,50 +43,6 @@ var okCertBytes = func() []byte { return block.Bytes }() -var ( - // TODO: add varying device identification numbers to test cases - hwOriginOk = dpb.HardwareOrigin{ - SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_OPENSOURCE, - ProductId: dpb.ProductId_PRODUCT_ID_EARLGREY_Z1, - DeviceIdentificationNumber: 0, - } - hwOriginBadSiliconCreatorId = dpb.HardwareOrigin{ - SiliconCreatorId: 2, - ProductId: dpb.ProductId_PRODUCT_ID_EARLGREY_A1, - DeviceIdentificationNumber: 0, - } - hwOriginBadProductId = dpb.HardwareOrigin{ - SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_NUVOTON, - ProductId: 0x10000, - DeviceIdentificationNumber: 0, - } - - // TODO: hwOriginBadDeviceId, which would have an inok DeviceIdentificationNumber field. - - deviceIdOk = dpb.DeviceId{ - HardwareOrigin: &hwOriginOk, - SkuSpecific: make([]byte, DeviceIdSkuSpecificLen), - } - deviceIdOkMissingSku = dpb.DeviceId{ - HardwareOrigin: &hwOriginOk, - SkuSpecific: nil, // Empty SkuSpecific is OK. - } - deviceIdBadOrigin = dpb.DeviceId{ - HardwareOrigin: &hwOriginBadSiliconCreatorId, - SkuSpecific: make([]byte, DeviceIdSkuSpecificLen), - } - deviceIdSkuTooLong = dpb.DeviceId{ - HardwareOrigin: &hwOriginOk, - SkuSpecific: make([]byte, DeviceIdSkuSpecificLen+1), - } - // TODO: deviceIdBadCrc, which would have an inok Crc32 field. - - deviceDataOk = dpb.DeviceData{ - DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_PROD, - Payload: okCertBytes, - } -) - func TestValidateSiliconCreatorId(t *testing.T) { tests := []struct { name string @@ -168,16 +125,16 @@ func TestValidateHardwareOrigin(t *testing.T) { }{ { name: "ok", - ho: &hwOriginOk, + ho: &dtd.HwOriginOk, ok: true, }, { name: "bad silicon creator ID", - ho: &hwOriginBadSiliconCreatorId, + ho: &dtd.HwOriginBadSiliconCreatorId, }, { name: "bad product ID", - ho: &hwOriginBadProductId, + ho: &dtd.HwOriginBadProductId, }, } @@ -198,22 +155,27 @@ func TestValidateDeviceId(t *testing.T) { }{ { name: "ok", - di: &deviceIdOk, + di: &dtd.DeviceIdOk, ok: true, }, { name: "missing sku", - di: &deviceIdOkMissingSku, + di: &dtd.DeviceIdOkMissingSkuSpecific, ok: true, // SKU is optional. }, { - name: "bad origin", - di: &deviceIdBadOrigin, + name: "bad hardware origin - bad silicon creator id", + di: &dtd.DeviceIdBadSiliconCreatorId, + }, + { + name: "bad hardware origin - bad product id", + di: &dtd.DeviceIdBadProductId, }, { name: "sku too long", - di: &deviceIdSkuTooLong, + di: &dtd.DeviceIdSkuTooLong, }, + // TODO: test a device ID which has a bad DeviceIdentificationNumber field. } for _, tt := range tests { @@ -280,22 +242,16 @@ func TestValidateDeviceData(t *testing.T) { }, { name: "valid payload with one cert", - dd: &deviceDataOk, + dd: &dtd.DeviceDataOk, ok: true, }, { name: "payload too large", - dd: &dpb.DeviceData{ - Payload: make([]byte, MaxDeviceDataPayloadLen+1), - DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_PROD, - }, + dd: &dtd.DeviceDataBadPayloadTooLarge, }, { name: "bad device life cycle", - dd: &dpb.DeviceData{ - Payload: make([]byte, 0), - DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_UNSPECIFIED, - }, + dd: &dtd.DeviceDataBadLifeCycle, }, } diff --git a/src/proxy_buffer/proto/BUILD.bazel b/src/proxy_buffer/proto/BUILD.bazel index 3aa951e..b05df1c 100644 --- a/src/proxy_buffer/proto/BUILD.bazel +++ b/src/proxy_buffer/proto/BUILD.bazel @@ -43,6 +43,7 @@ go_test( embed = [":validators"], deps = [ "//src/proto:device_id_go_pb", + "//src/proto:device_testdata", "//src/proto:validators", ], ) diff --git a/src/proxy_buffer/proto/validators_test.go b/src/proxy_buffer/proto/validators_test.go index 80cb167..9dc6a4a 100644 --- a/src/proxy_buffer/proto/validators_test.go +++ b/src/proxy_buffer/proto/validators_test.go @@ -7,48 +7,10 @@ import ( "testing" dpb "github.com/lowRISC/opentitan-provisioning/src/proto/device_id_go_pb" - common_validators "github.com/lowRISC/opentitan-provisioning/src/proto/validators" + dtd "github.com/lowRISC/opentitan-provisioning/src/proto/device_testdata" pb "github.com/lowRISC/opentitan-provisioning/src/proxy_buffer/proto/proxy_buffer_go_pb" ) -var ( - // DeviceId objects. - deviceIdOk = dpb.DeviceId{ - HardwareOrigin: &dpb.HardwareOrigin{ - SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_OPENSOURCE, - ProductId: dpb.ProductId_PRODUCT_ID_EARLGREY_Z1, - DeviceIdentificationNumber: 0, - }, - SkuSpecific: make([]byte, common_validators.DeviceIdSkuSpecificLen), - } - deviceIdBadSiliconCreatorId = dpb.DeviceId{ - HardwareOrigin: &dpb.HardwareOrigin{ - SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_UNSPECIFIED, - ProductId: dpb.ProductId_PRODUCT_ID_EARLGREY_Z1, - DeviceIdentificationNumber: 0, - }, - SkuSpecific: make([]byte, common_validators.DeviceIdSkuSpecificLen), - } - deviceIdBadProductId = dpb.DeviceId{ - HardwareOrigin: &dpb.HardwareOrigin{ - SiliconCreatorId: dpb.SiliconCreatorId_SILICON_CREATOR_ID_NUVOTON, - ProductId: dpb.ProductId_PRODUCT_ID_UNSPECIFIED, - DeviceIdentificationNumber: 0, - }, - SkuSpecific: make([]byte, common_validators.DeviceIdSkuSpecificLen), - } - - // DeviceData objects. - deviceDataOk = dpb.DeviceData{ - Payload: make([]byte, common_validators.MaxDeviceDataPayloadLen), - DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_PROD, - } - deviceDataBadPayload = dpb.DeviceData{ - Payload: make([]byte, common_validators.MaxDeviceDataPayloadLen+1), - DeviceLifeCycle: dpb.DeviceLifeCycle_DEVICE_LIFE_CYCLE_PROD, - } -) - func TestValidateDeviceRegistrationRequest(t *testing.T) { tests := []struct { name string @@ -59,8 +21,8 @@ func TestValidateDeviceRegistrationRequest(t *testing.T) { name: "ok", drr: &pb.DeviceRegistrationRequest{ DeviceRecord: &dpb.DeviceRecord{ - Id: &deviceIdOk, - Data: &deviceDataOk, + Id: &dtd.DeviceIdOk, + Data: &dtd.DeviceDataOk, }, }, ok: true, @@ -69,8 +31,8 @@ func TestValidateDeviceRegistrationRequest(t *testing.T) { name: "bad silicon creator id", drr: &pb.DeviceRegistrationRequest{ DeviceRecord: &dpb.DeviceRecord{ - Id: &deviceIdBadSiliconCreatorId, - Data: &deviceDataOk, + Id: &dtd.DeviceIdBadSiliconCreatorId, + Data: &dtd.DeviceDataOk, }, }, }, @@ -78,8 +40,8 @@ func TestValidateDeviceRegistrationRequest(t *testing.T) { name: "bad product id", drr: &pb.DeviceRegistrationRequest{ DeviceRecord: &dpb.DeviceRecord{ - Id: &deviceIdBadProductId, - Data: &deviceDataOk, + Id: &dtd.DeviceIdBadProductId, + Data: &dtd.DeviceDataOk, }, }, }, @@ -87,8 +49,8 @@ func TestValidateDeviceRegistrationRequest(t *testing.T) { name: "bad device data", drr: &pb.DeviceRegistrationRequest{ DeviceRecord: &dpb.DeviceRecord{ - Id: &deviceIdOk, - Data: &deviceDataBadPayload, + Id: &dtd.DeviceIdOk, + Data: &dtd.DeviceDataBadPayloadTooLarge, }, }, }, @@ -113,7 +75,7 @@ func TestValidateDeviceRegistrationResponse(t *testing.T) { name: "ok", drr: &pb.DeviceRegistrationResponse{ Status: pb.DeviceRegistrationStatus_DEVICE_REGISTRATION_STATUS_SUCCESS, - DeviceId: &deviceIdOk, + DeviceId: &dtd.DeviceIdOk, }, ok: true, }, @@ -121,7 +83,7 @@ func TestValidateDeviceRegistrationResponse(t *testing.T) { name: "bad request", drr: &pb.DeviceRegistrationResponse{ Status: pb.DeviceRegistrationStatus_DEVICE_REGISTRATION_STATUS_BAD_REQUEST, - DeviceId: &deviceIdOk, + DeviceId: &dtd.DeviceIdOk, }, ok: true, }, @@ -129,7 +91,7 @@ func TestValidateDeviceRegistrationResponse(t *testing.T) { name: "buffer full", drr: &pb.DeviceRegistrationResponse{ Status: pb.DeviceRegistrationStatus_DEVICE_REGISTRATION_STATUS_BUFFER_FULL, - DeviceId: &deviceIdOk, + DeviceId: &dtd.DeviceIdOk, }, ok: true, }, @@ -137,14 +99,14 @@ func TestValidateDeviceRegistrationResponse(t *testing.T) { name: "invalid status", drr: &pb.DeviceRegistrationResponse{ Status: pb.DeviceRegistrationStatus(-1), - DeviceId: &deviceIdOk, + DeviceId: &dtd.DeviceIdOk, }, }, { name: "bad device id", drr: &pb.DeviceRegistrationResponse{ Status: pb.DeviceRegistrationStatus_DEVICE_REGISTRATION_STATUS_SUCCESS, - DeviceId: &deviceIdBadSiliconCreatorId, + DeviceId: &dtd.DeviceIdBadSiliconCreatorId, }, }, }