github.com/decred/dcrlnd@v0.7.6/watchtower/blob/type_test.go (about) 1 package blob_test 2 3 import ( 4 "testing" 5 6 "github.com/decred/dcrlnd/watchtower/blob" 7 ) 8 9 var unknownFlag = blob.Flag(16) 10 11 type typeStringTest struct { 12 name string 13 typ blob.Type 14 expStr string 15 } 16 17 var typeStringTests = []typeStringTest{ 18 { 19 name: "commit no-reward", 20 typ: blob.TypeAltruistCommit, 21 expStr: "[No-FlagAnchorChannel|FlagCommitOutputs|No-FlagReward]", 22 }, 23 { 24 name: "commit reward", 25 typ: blob.TypeRewardCommit, 26 expStr: "[No-FlagAnchorChannel|FlagCommitOutputs|FlagReward]", 27 }, 28 { 29 name: "unknown flag", 30 typ: unknownFlag.Type(), 31 expStr: "0000000000010000[No-FlagAnchorChannel|No-FlagCommitOutputs|No-FlagReward]", 32 }, 33 } 34 35 // TestTypeStrings asserts that the proper human-readable string is returned for 36 // various blob.Types 37 func TestTypeStrings(t *testing.T) { 38 for _, test := range typeStringTests { 39 t.Run(test.name, func(t *testing.T) { 40 typeStr := test.typ.String() 41 if typeStr != test.expStr { 42 t.Fatalf("mismatched type string, want: %v, "+ 43 "got %v", test.expStr, typeStr) 44 } 45 }) 46 } 47 } 48 49 // TestUnknownFlagString asserts that the proper string is returned from 50 // unallocated flags. 51 func TestUnknownFlagString(t *testing.T) { 52 if unknownFlag.String() != "FlagUnknown" { 53 t.Fatalf("unknown flags should return FlagUnknown, instead "+ 54 "got: %v", unknownFlag.String()) 55 } 56 } 57 58 type typeFromFlagTest struct { 59 name string 60 flags []blob.Flag 61 expType blob.Type 62 } 63 64 var typeFromFlagTests = []typeFromFlagTest{ 65 { 66 name: "no flags", 67 flags: nil, 68 expType: blob.Type(0), 69 }, 70 { 71 name: "single flag", 72 flags: []blob.Flag{blob.FlagReward}, 73 expType: blob.Type(blob.FlagReward), 74 }, 75 { 76 name: "multiple flags", 77 flags: []blob.Flag{blob.FlagReward, blob.FlagCommitOutputs}, 78 expType: blob.TypeRewardCommit, 79 }, 80 { 81 name: "duplicate flag", 82 flags: []blob.Flag{blob.FlagReward, blob.FlagReward}, 83 expType: blob.Type(blob.FlagReward), 84 }, 85 } 86 87 // TestTypeFromFlags asserts that blob.Types constructed using 88 // blob.TypeFromFlags are correct, and properly deduplicate flags. We also 89 // assert that Has returns true for the generated blob.Type for all of the flags 90 // that were used to create it. 91 func TestTypeFromFlags(t *testing.T) { 92 for _, test := range typeFromFlagTests { 93 t.Run(test.name, func(t *testing.T) { 94 blobType := blob.TypeFromFlags(test.flags...) 95 96 // Assert that the constructed type matches our 97 // expectation. 98 if blobType != test.expType { 99 t.Fatalf("mismatch, expected blob type %s, "+ 100 "got %s", test.expType, blobType) 101 } 102 103 // Assert that Has returns true for all flags used to 104 // construct the type. 105 for _, flag := range test.flags { 106 if blobType.Has(flag) { 107 continue 108 } 109 110 t.Fatalf("expected type to have flag %s, "+ 111 "but didn't", flag) 112 } 113 }) 114 } 115 } 116 117 // TestSupportedTypes verifies that blob.IsSupported returns true for all 118 // blob.Types returned from blob.SupportedTypes. It also asserts that the 119 // blob.DefaultType returns true. 120 func TestSupportedTypes(t *testing.T) { 121 // Assert that the package's default type is supported. 122 if !blob.IsSupportedType(blob.TypeAltruistCommit) { 123 t.Fatalf("default type %s is not supported", blob.TypeAltruistCommit) 124 } 125 126 // Assert that the altruist anchor commit types are supported. 127 if !blob.IsSupportedType(blob.TypeAltruistAnchorCommit) { 128 t.Fatalf("default type %s is not supported", 129 blob.TypeAltruistAnchorCommit) 130 } 131 132 // Assert that all claimed supported types are actually supported. 133 for _, supType := range blob.SupportedTypes() { 134 if blob.IsSupportedType(supType) { 135 continue 136 } 137 138 t.Fatalf("supposedly supported type %s is not supported", 139 supType) 140 } 141 }