2018-04-27 12:40:04 +03:00
|
|
|
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,
|
2018-05-18 14:59:11 +03:00
|
|
|
hodl.BogusSettle,
|
2018-04-27 12:40:04 +03:00
|
|
|
),
|
|
|
|
flags: map[hodl.Flag]struct{}{
|
|
|
|
hodl.ExitSettle: {},
|
|
|
|
hodl.AddIncoming: {},
|
|
|
|
hodl.SettleIncoming: {},
|
|
|
|
hodl.FailIncoming: {},
|
|
|
|
hodl.AddOutgoing: {},
|
|
|
|
hodl.SettleOutgoing: {},
|
|
|
|
hodl.FailOutgoing: {},
|
|
|
|
hodl.Commit: {},
|
2018-05-18 14:59:11 +03:00
|
|
|
hodl.BogusSettle: {},
|
2018-04-27 12:40:04 +03:00
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|