github.com/status-im/status-go@v1.1.0/protocol/identity/emojihash/emojihash_test.go (about)

     1  package emojihash
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/status-im/status-go/protocol/identity"
    10  )
    11  
    12  func TestGenerateFor(t *testing.T) {
    13  	checker := func(pubkey string, expected *[](string)) {
    14  		emojihash, err := GenerateFor(pubkey)
    15  		require.NoError(t, err)
    16  		if !reflect.DeepEqual(emojihash, *expected) {
    17  			t.Fatalf("invalid emojihash %v != %v", emojihash, *expected)
    18  		}
    19  	}
    20  
    21  	checker("0x04e25da6994ea2dc4ac70727e07eca153ae92bf7609db7befb7ebdceaad348f4fc55bbe90abf9501176301db5aa103fc0eb3bc3750272a26c424a10887db2a7ea8",
    22  		&[](string){"πŸ‘¦πŸ½", "🦹🏻", "πŸ‘ΆπŸΏ", "πŸ›", "🌁", "πŸ™ŒπŸ»", "πŸ™‡πŸ½β€β™‚οΈ", "πŸ™ŒπŸΎ", "πŸ€₯", "πŸ›", "πŸ‘©πŸ½β€πŸ”§", "πŸ”§", "βš™οΈ", "πŸ§’πŸ½"})
    23  
    24  	checker("0x0400000000000000000000000000000000000000000000000000000000000000014218F20AE6C646B363DB68605822FB14264CA8D2587FDD6FBC750D587E76A7EE",
    25  		&[](string){"πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€"})
    26  
    27  	checker("0x04000000000000000000000000000000000000000010000000000000000000000033600332D373318ECC2F212A30A5750D2EAC827B6A32B33D326CCF369B12B1BE",
    28  		&[](string){"πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", (emojisAlphabet)[1]})
    29  
    30  	checker("0x040000000000000000000000000000000000000000200000000000000000000000353050BFE33B724E60A0C600FBA565A9B62217B1BD35BF9848F2AB847C598B30",
    31  		&[](string){"πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", "πŸ˜€", (emojisAlphabet)[2]})
    32  }
    33  
    34  func TestEmojiHashOfInvalidKey(t *testing.T) {
    35  	checker := func(pubkey string) {
    36  		_, err := GenerateFor(pubkey)
    37  		require.Error(t, err)
    38  	}
    39  	checker("abc")
    40  	checker("0x01")
    41  	checker("0x01e25da6994ea2dc4ac70727e07eca153ae92bf7609db7befb7ebdceaad348f4fc55bbe90abf9501176301db5aa103fc0eb3bc3750272a26c424a10887db2a7ea8")
    42  	checker("0x04425da6994ea2dc4ac70727e07eca153ae92bf7609db7befb7ebdceaad348f4fc55bbe90abf9501176301db5aa103fc0eb3bc3750272a26c424a10887db2a7ea8")
    43  }
    44  
    45  func TestToEmojiHash(t *testing.T) {
    46  	alphabet := [](string){"πŸ˜‡", "🀐", "πŸ₯΅", "πŸ™Š", "🀌"}
    47  
    48  	checker := func(valueStr string, hashLen int, expected *[](string)) {
    49  		value := identity.ToBigInt(t, valueStr)
    50  		res, err := toEmojiHash(value, hashLen, &alphabet)
    51  		require.NoError(t, err)
    52  		if !reflect.DeepEqual(res, *expected) {
    53  			t.Fatalf("invalid emojihash conversion %v != %v", res, *expected)
    54  		}
    55  	}
    56  
    57  	checker("777", 5, &[](string){"🀐", "🀐", "🀐", "πŸ˜‡", "πŸ₯΅"})
    58  	checker("777", 0, &[](string){"🀐", "🀐", "🀐", "πŸ˜‡", "πŸ₯΅"})
    59  	checker("777", 10, &[](string){"πŸ˜‡", "πŸ˜‡", "πŸ˜‡", "πŸ˜‡", "πŸ˜‡", "🀐", "🀐", "🀐", "πŸ˜‡", "πŸ₯΅"})
    60  
    61  	// 20bytes of data described by 14 emojis requires at least 2757 length alphabet
    62  	alphabet = make([](string), 2757)
    63  	val := identity.ToBigInt(t, "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") // 20 bytes
    64  	_, err := toEmojiHash(val, 14, &alphabet)
    65  	require.NoError(t, err)
    66  
    67  	alphabet = make([](string), 2757-1)
    68  	_, err = toEmojiHash(val, 14, &alphabet)
    69  	require.Error(t, err)
    70  }