68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package windows
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"softbox.local/core/licensing"
|
|
)
|
|
|
|
func TestMachineHashFromUsesBothRequiredSources(t *testing.T) {
|
|
const machineGUID = "6F9619FF-8B86-D011-B42D-00C04FC964FF"
|
|
got, err := machineHashFrom(
|
|
func() (string, error) { return machineGUID, nil },
|
|
func() (uint32, error) { return 0x1a2b3c4d, nil },
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("machineHashFrom() error = %v", err)
|
|
}
|
|
want, err := licensing.DeriveMachineHash(machineGUID, 0x1a2b3c4d)
|
|
if err != nil {
|
|
t.Fatalf("DeriveMachineHash() error = %v", err)
|
|
}
|
|
if got != want {
|
|
t.Fatalf("machineHashFrom() = %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestMachineHashFromFailsClosedWithoutLeakingSourceValues(t *testing.T) {
|
|
const secret = "synthetic-machine-guid-secret"
|
|
tests := []struct {
|
|
name string
|
|
readGUID machineGUIDReader
|
|
readSerial systemVolumeSerialReader
|
|
}{
|
|
{
|
|
name: "GUID reader failure",
|
|
readGUID: func() (string, error) { return "", errors.New(secret) },
|
|
readSerial: func() (uint32, error) { return 1, nil },
|
|
},
|
|
{
|
|
name: "volume reader failure",
|
|
readGUID: func() (string, error) { return "6f9619ff-8b86-d011-b42d-00c04fc964ff", nil },
|
|
readSerial: func() (uint32, error) { return 0, errors.New(secret) },
|
|
},
|
|
{
|
|
name: "invalid GUID",
|
|
readGUID: func() (string, error) { return secret, nil },
|
|
readSerial: func() (uint32, error) { return 1, nil },
|
|
},
|
|
{
|
|
name: "missing GUID reader",
|
|
readSerial: func() (uint32, error) { return 1, nil },
|
|
},
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
_, err := machineHashFrom(test.readGUID, test.readSerial)
|
|
if !errors.Is(err, ErrMachineFingerprintUnavailable) {
|
|
t.Fatalf("machineHashFrom() error = %v, want ErrMachineFingerprintUnavailable", err)
|
|
}
|
|
if strings.Contains(err.Error(), secret) {
|
|
t.Fatalf("machineHashFrom() leaked a source value in %q", err)
|
|
}
|
|
})
|
|
}
|
|
}
|