From 137ec37450bf7da7de69829b80cc6fc6df23084c Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Fri, 27 Apr 2018 02:40:04 -0700 Subject: [PATCH] htlcswitch/hodl_mask_test: tests HodlMask active flags --- htlcswitch/hodl/mask_test.go | 110 +++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 htlcswitch/hodl/mask_test.go diff --git a/htlcswitch/hodl/mask_test.go b/htlcswitch/hodl/mask_test.go new file mode 100644 index 000000000..7becd457e --- /dev/null +++ b/htlcswitch/hodl/mask_test.go @@ -0,0 +1,110 @@ +package hodl_test + +import ( + "testing" + + "github.com/lightningnetwork/lnd/htlcswitch/hodl" +) + +var hodlMaskTests = []struct { + mask hodl.Mask + flags map[hodl.Flag]struct{} +}{ + { + // Check that the empty mask has no active flags. + mask: hodl.MaskNone, + flags: map[hodl.Flag]struct{}{}, + }, + { + // Check that passing no arguments to MaskFromFlags is + // equivalent to MaskNone. + mask: hodl.MaskFromFlags(), + flags: map[hodl.Flag]struct{}{}, + }, + + { + // Check using Mask to convert a single flag into a Mask only + // reports that flag active. + mask: hodl.ExitSettle.Mask(), + flags: map[hodl.Flag]struct{}{ + hodl.ExitSettle: {}, + }, + }, + { + // Check that using MaskFromFlags on a single flag only reports + // that flag active. + mask: hodl.MaskFromFlags(hodl.Commit), + flags: map[hodl.Flag]struct{}{ + hodl.Commit: {}, + }, + }, + + { + // Check that using MaskFromFlags on some-but-not-all flags + // reports the correct subset of flags as active. + mask: hodl.MaskFromFlags( + hodl.ExitSettle, + hodl.Commit, + hodl.AddIncoming, + hodl.SettleOutgoing, + ), + flags: map[hodl.Flag]struct{}{ + hodl.ExitSettle: {}, + hodl.Commit: {}, + hodl.AddIncoming: {}, + hodl.SettleOutgoing: {}, + }, + }, + { + // Check that using MaskFromFlags on all known flags reports + // those an no other flags. + mask: hodl.MaskFromFlags( + hodl.ExitSettle, + hodl.AddIncoming, + hodl.SettleIncoming, + hodl.FailIncoming, + hodl.AddOutgoing, + hodl.SettleOutgoing, + hodl.FailOutgoing, + hodl.Commit, + ), + flags: map[hodl.Flag]struct{}{ + hodl.ExitSettle: {}, + hodl.AddIncoming: {}, + hodl.SettleIncoming: {}, + hodl.FailIncoming: {}, + hodl.AddOutgoing: {}, + hodl.SettleOutgoing: {}, + hodl.FailOutgoing: {}, + hodl.Commit: {}, + }, + }, +} + +// TestMask iterates through all of the hodlMaskTests, checking that the mask +// correctly reports active for flags in the tests' expected flags, and inactive +// for all others. +func TestMask(t *testing.T) { + if !hodl.DebugBuild { + t.Fatalf("htlcswitch tests must be run with '-tags debug'") + } + + for i, test := range hodlMaskTests { + for j := uint32(0); i < 32; i++ { + flag := hodl.Flag(1 << j) + _, shouldBeActive := test.flags[flag] + + switch { + case shouldBeActive && !test.mask.Active(flag): + t.Fatalf("hodl mask test #%d -- "+ + "expected flag %s to be active", + i, flag) + + case !shouldBeActive && test.mask.Active(flag): + t.Fatalf("hodl mask test #%d -- "+ + "expected flag %s to be inactive", + i, flag) + } + } + } +}