wormhole-explorer/common/types/tx_hash_test.go

117 lines
3.8 KiB
Go

package types
import "testing"
// TestParseTxHash tests the ParseTxHash function.
func TestParseTxHash(t *testing.T) {
// a table containing several test cases
tcs := []struct {
input string
output string
isSolanaTxHash bool
isWormholeTxHash bool
}{
{
// Invalid Solana hash - 86 characters (too short)
input: "VKrJx5ak3amnpY5EXiqfu6pnrzxHTLU95m9vfbYnGSSLQrkRzb4tm4NztCGeLcJxieXQYnqddUwoaEsDRTRh57",
},
{
// Valid Solana hash - 88 characters
input: "2maR6uDZzroV7JFF76rp5QR4CFP1PFUe76VRE8gF8QtWRifpGAKJQo4SQDBNs3TAM9RrchJhnJ644jUL2yfagZco",
output: "2maR6uDZzroV7JFF76rp5QR4CFP1PFUe76VRE8gF8QtWRifpGAKJQo4SQDBNs3TAM9RrchJhnJ644jUL2yfagZco",
isSolanaTxHash: true,
},
{
// Valid Solana hash - 87 characters
input: "VKrJx5ak3amnpY5EXiqfu6pnrzxHTLU95m9vfbYnGSSLQrkRzb4tm4NztCGeLcJxieXQYnqddUwoaEsDRTRh57R",
output: "VKrJx5ak3amnpY5EXiqfu6pnrzxHTLU95m9vfbYnGSSLQrkRzb4tm4NztCGeLcJxieXQYnqddUwoaEsDRTRh57R",
isSolanaTxHash: true,
},
{
// Invalid Solana hash - 89 characters (too long)
input: "2maR6uDZzroV7JFF76rp5QR4CFP1PFUe76VRE8gF8QtWRifpGAKJQo4SQDBNs3TAM9RrchJhnJ644jUL2yfagZco2",
},
{
// Invalid Sui hash - 42 characters (too short)
input: "cVWa8xZtWbTxXQGLQaYquwmChE2sQYxFNGnHmp6oXX",
},
{
// Valid Sui hash - 43 characters
input: "cVWa8xZtWbTxXQGLQaYquwmChE2sQYxFNGnHmp6oXXL",
output: "cVWa8xZtWbTxXQGLQaYquwmChE2sQYxFNGnHmp6oXXL",
isWormholeTxHash: true,
},
{
// Valid Sui hash - 44 characters
input: "9yQWLTNmFkwZ6CdK3QXhk8utKr42n3Eh1CFFBWcdCeJC",
output: "9yQWLTNmFkwZ6CdK3QXhk8utKr42n3Eh1CFFBWcdCeJC",
isWormholeTxHash: true,
},
{
// Invalid Sui hash - 45 characters (too long)
input: "9yQWLTNmFkwZ6CdK3QXhk8utKr42n3Eh1CFFBWcdCeJC9",
},
{
// Invalid Wormhole hash - 63 characters (too short)
input: "f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
},
{
// Wormhole hash with 0x prefix
input: "0x3f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
output: "3f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
isWormholeTxHash: true,
},
{
// Wormhole hash with 0X prefix
input: "0X3F77F8B44F35FF047A74EE8235CE007AFBAB357D4E30010D51B6F6990F921637",
output: "3f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
isWormholeTxHash: true,
},
{
// Wormhole hash with no prefix
input: "3f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
output: "3f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
isWormholeTxHash: true,
},
{
// Invalid Wormhole hash - 65 characters (too long)
input: "33f77f8b44f35ff047a74ee8235ce007afbab357d4e30010d51b6f6990f921637",
},
{
// A bunch of random characters
input: "434234i32042oiu08d8sauf0suif",
},
}
// run each test case in the table
for i := range tcs {
tc := tcs[i]
// try to parse the hash
txHash, err := ParseTxHash(tc.input)
if tc.output == "" && err == nil {
t.Fatalf("expected parseTxHash(%s) to fail", tc.input)
} else if tc.output != "" && err != nil {
t.Fatalf("parseTxHash(%s) failed with error %v", tc.input, err)
}
if tc.output == "" {
continue
}
// make assertions about the output struct
if tc.output != txHash.String() {
t.Fatalf("expected TxHash.String()=%s, got %s", tc.output, txHash.String())
}
if tc.isSolanaTxHash != txHash.IsSolanaTxHash() {
t.Fatalf("expected TxHash.IsSolanaHash()=%t, but got %t", tc.isSolanaTxHash, txHash.IsSolanaTxHash())
}
if tc.isWormholeTxHash != txHash.IsWormholeTxHash() {
t.Fatalf("expected TxHash.IsWormholeHash()=%t, but got %t", tc.isWormholeTxHash, txHash.IsWormholeTxHash())
}
}
}