107 lines
2.9 KiB
Go
107 lines
2.9 KiB
Go
package collector
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"os"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseTPMProperties(t *testing.T) {
|
|
properties := parseTPMProperties(`TPM2_PT_FAMILY_INDICATOR:
|
|
raw: 0x322E3000
|
|
value: "2.0"
|
|
TPM2_PT_MANUFACTURER:
|
|
raw: 0x49465800
|
|
value: "IFX"
|
|
TPM2_PT_FIRMWARE_VERSION_1:
|
|
raw: 0x0007003F
|
|
TPM2_PT_FIRMWARE_VERSION_2:
|
|
raw: 0x00100023
|
|
`)
|
|
|
|
if got := tpmPropertyValue(properties, "TPM2_PT_FAMILY_INDICATOR"); got != "2.0" {
|
|
t.Fatalf("family indicator = %q, want 2.0", got)
|
|
}
|
|
if got := tpmManufacturer(properties["TPM2_PT_MANUFACTURER"]); got != "IFX" {
|
|
t.Fatalf("manufacturer = %q, want IFX", got)
|
|
}
|
|
if got := tpmPropertyRaw(properties, "TPM2_PT_FIRMWARE_VERSION_1"); got != "0x0007003F" {
|
|
t.Fatalf("firmware version 1 = %q", got)
|
|
}
|
|
}
|
|
|
|
func TestTPMManufacturerDecodesRawVendorID(t *testing.T) {
|
|
if got := tpmManufacturer(tpmProperty{raw: "0x49465800"}); got != "IFX" {
|
|
t.Fatalf("manufacturer = %q, want IFX", got)
|
|
}
|
|
}
|
|
|
|
func TestCollectTPMPlatformConfig(t *testing.T) {
|
|
originalGlob, originalStat, originalRun := tpmGlob, tpmStat, tpmRun
|
|
t.Cleanup(func() {
|
|
tpmGlob, tpmStat, tpmRun = originalGlob, originalStat, originalRun
|
|
})
|
|
|
|
tpmGlob = func(string) ([]string, error) { return []string{"/sys/class/tpm/tpm0"}, nil }
|
|
tpmStat = func(path string) (os.FileInfo, error) {
|
|
if path == "/dev/tpmrm0" {
|
|
return nil, nil
|
|
}
|
|
return nil, os.ErrNotExist
|
|
}
|
|
tpmRun = func(name string, args ...string) ([]byte, error) {
|
|
if name != "tpm2_getcap" || !reflect.DeepEqual(args, []string{"properties-fixed"}) {
|
|
t.Fatalf("unexpected command: %s %v", name, args)
|
|
}
|
|
return []byte(`TPM2_PT_FAMILY_INDICATOR:
|
|
value: "2.0"
|
|
TPM2_PT_MANUFACTURER:
|
|
raw: 0x49465800
|
|
TPM2_PT_FIRMWARE_VERSION_1:
|
|
raw: 0x0007003F
|
|
TPM2_PT_FIRMWARE_VERSION_2:
|
|
raw: 0x00100023
|
|
`), nil
|
|
}
|
|
|
|
got := decodeTPMConfig(t, collectTPMPlatformConfig())
|
|
want := map[string]any{
|
|
"TpmPresent": true,
|
|
"TpmEnabled": true,
|
|
"TpmDevice": "tpm0",
|
|
"TpmInterface": "/dev/tpmrm0",
|
|
"TpmVersion": "2.0",
|
|
"TpmManufacturer": "IFX",
|
|
"TpmFirmwareVersion": "0x0007003F/0x00100023",
|
|
}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("config = %#v, want %#v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCollectTPMPlatformConfigAbsent(t *testing.T) {
|
|
originalGlob := tpmGlob
|
|
t.Cleanup(func() { tpmGlob = originalGlob })
|
|
tpmGlob = func(string) ([]string, error) { return nil, errors.New("not found") }
|
|
|
|
got := decodeTPMConfig(t, collectTPMPlatformConfig())
|
|
want := map[string]any{"TpmPresent": false, "TpmEnabled": false}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("config = %#v, want %#v", got, want)
|
|
}
|
|
}
|
|
|
|
func decodeTPMConfig(t *testing.T, raw *json.RawMessage) map[string]any {
|
|
t.Helper()
|
|
if raw == nil {
|
|
t.Fatal("platform config is nil")
|
|
}
|
|
var config map[string]any
|
|
if err := json.Unmarshal(*raw, &config); err != nil {
|
|
t.Fatalf("unmarshal config: %v", err)
|
|
}
|
|
return config
|
|
}
|