github.com/MetalBlockchain/metalgo@v1.11.9/ids/test_aliases.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package ids
     5  
     6  import "github.com/stretchr/testify/require"
     7  
     8  var AliasTests = []func(require *require.Assertions, r AliaserReader, w AliaserWriter){
     9  	AliaserLookupErrorTest,
    10  	AliaserLookupTest,
    11  	AliaserAliasesEmptyTest,
    12  	AliaserAliasesTest,
    13  	AliaserPrimaryAliasTest,
    14  	AliaserAliasClashTest,
    15  	AliaserRemoveAliasTest,
    16  }
    17  
    18  func AliaserLookupErrorTest(require *require.Assertions, r AliaserReader, _ AliaserWriter) {
    19  	_, err := r.Lookup("Batman")
    20  	// TODO: require error to be errNoIDWithAlias
    21  	require.Error(err) //nolint:forbidigo // currently returns grpc errors too
    22  }
    23  
    24  func AliaserLookupTest(require *require.Assertions, r AliaserReader, w AliaserWriter) {
    25  	id := ID{'K', 'a', 't', 'e', ' ', 'K', 'a', 'n', 'e'}
    26  	require.NoError(w.Alias(id, "Batwoman"))
    27  
    28  	res, err := r.Lookup("Batwoman")
    29  	require.NoError(err)
    30  	require.Equal(id, res)
    31  }
    32  
    33  func AliaserAliasesEmptyTest(require *require.Assertions, r AliaserReader, _ AliaserWriter) {
    34  	id := ID{'J', 'a', 'm', 'e', 's', ' ', 'G', 'o', 'r', 'd', 'o', 'n'}
    35  
    36  	aliases, err := r.Aliases(id)
    37  	require.NoError(err)
    38  	require.Empty(aliases)
    39  }
    40  
    41  func AliaserAliasesTest(require *require.Assertions, r AliaserReader, w AliaserWriter) {
    42  	id := ID{'B', 'r', 'u', 'c', 'e', ' ', 'W', 'a', 'y', 'n', 'e'}
    43  
    44  	require.NoError(w.Alias(id, "Batman"))
    45  	require.NoError(w.Alias(id, "Dark Knight"))
    46  
    47  	aliases, err := r.Aliases(id)
    48  	require.NoError(err)
    49  
    50  	expected := []string{"Batman", "Dark Knight"}
    51  	require.Equal(expected, aliases)
    52  }
    53  
    54  func AliaserPrimaryAliasTest(require *require.Assertions, r AliaserReader, w AliaserWriter) {
    55  	id1 := ID{'J', 'a', 'm', 'e', 's', ' ', 'G', 'o', 'r', 'd', 'o', 'n'}
    56  	id2 := ID{'B', 'r', 'u', 'c', 'e', ' ', 'W', 'a', 'y', 'n', 'e'}
    57  
    58  	require.NoError(w.Alias(id2, "Batman"))
    59  	require.NoError(w.Alias(id2, "Dark Knight"))
    60  
    61  	_, err := r.PrimaryAlias(id1)
    62  	// TODO: require error to be errNoAliasForID
    63  	require.Error(err) //nolint:forbidigo // currently returns grpc errors too
    64  
    65  	expected := "Batman"
    66  	res, err := r.PrimaryAlias(id2)
    67  	require.NoError(err)
    68  	require.Equal(expected, res)
    69  }
    70  
    71  func AliaserAliasClashTest(require *require.Assertions, _ AliaserReader, w AliaserWriter) {
    72  	id1 := ID{'B', 'r', 'u', 'c', 'e', ' ', 'W', 'a', 'y', 'n', 'e'}
    73  	id2 := ID{'D', 'i', 'c', 'k', ' ', 'G', 'r', 'a', 'y', 's', 'o', 'n'}
    74  
    75  	require.NoError(w.Alias(id1, "Batman"))
    76  
    77  	err := w.Alias(id2, "Batman")
    78  	// TODO: require error to be errAliasAlreadyMapped
    79  	require.Error(err) //nolint:forbidigo // currently returns grpc errors too
    80  }
    81  
    82  func AliaserRemoveAliasTest(require *require.Assertions, r AliaserReader, w AliaserWriter) {
    83  	id1 := ID{'B', 'r', 'u', 'c', 'e', ' ', 'W', 'a', 'y', 'n', 'e'}
    84  	id2 := ID{'J', 'a', 'm', 'e', 's', ' ', 'G', 'o', 'r', 'd', 'o', 'n'}
    85  
    86  	require.NoError(w.Alias(id1, "Batman"))
    87  	require.NoError(w.Alias(id1, "Dark Knight"))
    88  
    89  	w.RemoveAliases(id1)
    90  
    91  	_, err := r.PrimaryAlias(id1)
    92  	// TODO: require error to be errNoAliasForID
    93  	require.Error(err) //nolint:forbidigo // currently returns grpc errors too
    94  
    95  	require.NoError(w.Alias(id2, "Batman"))
    96  	require.NoError(w.Alias(id2, "Dark Knight"))
    97  	require.NoError(w.Alias(id1, "Dark Night Rises"))
    98  }