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  }