117 lines
3.8 KiB
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())
|
|
}
|
|
|
|
}
|
|
|
|
}
|