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 }