watchtower/blob/type_test: adds Flag and Type unit tests
This commit is contained in:
parent
bc09c6dbae
commit
cf1b8ba78f
135
watchtower/blob/type_test.go
Normal file
135
watchtower/blob/type_test.go
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
package blob_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/lightningnetwork/lnd/watchtower/blob"
|
||||||
|
)
|
||||||
|
|
||||||
|
var unknownFlag = blob.Flag(16)
|
||||||
|
|
||||||
|
type typeStringTest struct {
|
||||||
|
name string
|
||||||
|
typ blob.Type
|
||||||
|
expStr string
|
||||||
|
}
|
||||||
|
|
||||||
|
var typeStringTests = []typeStringTest{
|
||||||
|
{
|
||||||
|
name: "commit no-reward",
|
||||||
|
typ: blob.TypeDefault,
|
||||||
|
expStr: "[FlagCommitOutputs|No-FlagReward]",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "commit reward",
|
||||||
|
typ: (blob.FlagCommitOutputs | blob.FlagReward).Type(),
|
||||||
|
expStr: "[FlagCommitOutputs|FlagReward]",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "unknown flag",
|
||||||
|
typ: unknownFlag.Type(),
|
||||||
|
expStr: "0000000000010000[No-FlagCommitOutputs|No-FlagReward]",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestTypeStrings asserts that the proper human-readable string is returned for
|
||||||
|
// various blob.Types
|
||||||
|
func TestTypeStrings(t *testing.T) {
|
||||||
|
for _, test := range typeStringTests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
typeStr := test.typ.String()
|
||||||
|
if typeStr != test.expStr {
|
||||||
|
t.Fatalf("mismatched type string, want: %v, "+
|
||||||
|
"got %v", test.expStr, typeStr)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestUnknownFlagString asserts that the proper string is returned from
|
||||||
|
// unallocated flags.
|
||||||
|
func TestUnknownFlagString(t *testing.T) {
|
||||||
|
if unknownFlag.String() != "FlagUnknown" {
|
||||||
|
t.Fatalf("unknown flags should return FlagUnknown, instead "+
|
||||||
|
"got: %v", unknownFlag.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type typeFromFlagTest struct {
|
||||||
|
name string
|
||||||
|
flags []blob.Flag
|
||||||
|
expType blob.Type
|
||||||
|
}
|
||||||
|
|
||||||
|
var typeFromFlagTests = []typeFromFlagTest{
|
||||||
|
{
|
||||||
|
name: "no flags",
|
||||||
|
flags: nil,
|
||||||
|
expType: blob.Type(0),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "single flag",
|
||||||
|
flags: []blob.Flag{blob.FlagReward},
|
||||||
|
expType: blob.Type(blob.FlagReward),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "multiple flags",
|
||||||
|
flags: []blob.Flag{blob.FlagReward, blob.FlagCommitOutputs},
|
||||||
|
expType: blob.Type(blob.FlagReward | blob.FlagCommitOutputs),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "duplicate flag",
|
||||||
|
flags: []blob.Flag{blob.FlagReward, blob.FlagReward},
|
||||||
|
expType: blob.Type(blob.FlagReward),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestTypeFromFlags asserts that blob.Types constructed using
|
||||||
|
// blob.TypeFromFlags are correct, and properly deduplicate flags. We also
|
||||||
|
// assert that Has returns true for the generated blob.Type for all of the flags
|
||||||
|
// that were used to create it.
|
||||||
|
func TestTypeFromFlags(t *testing.T) {
|
||||||
|
for _, test := range typeFromFlagTests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
blobType := blob.TypeFromFlags(test.flags...)
|
||||||
|
|
||||||
|
// Assert that the constructed type matches our
|
||||||
|
// expectation.
|
||||||
|
if blobType != test.expType {
|
||||||
|
t.Fatalf("mismatch, expected blob type %s, "+
|
||||||
|
"got %s", test.expType, blobType)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert that Has returns true for all flags used to
|
||||||
|
// construct the type.
|
||||||
|
for _, flag := range test.flags {
|
||||||
|
if blobType.Has(flag) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Fatalf("expected type to have flag %s, "+
|
||||||
|
"but didn't", flag)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestSupportedTypes verifies that blob.IsSupported returns true for all
|
||||||
|
// blob.Types returned from blob.SupportedTypes. It also asserts that the
|
||||||
|
// blob.DefaultType returns true.
|
||||||
|
func TestSupportedTypes(t *testing.T) {
|
||||||
|
// Assert that the package's default type is supported.
|
||||||
|
if !blob.IsSupportedType(blob.TypeDefault) {
|
||||||
|
t.Fatalf("default type %s is not supported", blob.TypeDefault)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert that all claimed supported types are actually supported.
|
||||||
|
for _, supType := range blob.SupportedTypes() {
|
||||||
|
if blob.IsSupportedType(supType) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Fatalf("supposedly supported type %s is not supported",
|
||||||
|
supType)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user