|
|
@ -0,0 +1,45 @@ |
|
|
|
package storage |
|
|
|
|
|
|
|
import "testing" |
|
|
|
|
|
|
|
func TestParseKeyHash(t *testing.T) { |
|
|
|
testcases := []struct { |
|
|
|
KeyHash string |
|
|
|
ID uint64 |
|
|
|
Cookie uint32 |
|
|
|
Err bool |
|
|
|
}{ |
|
|
|
// normal
|
|
|
|
{"4ed4c8116e41", 0x4ed4, 0xc8116e41, false}, |
|
|
|
// cookie with leading zeros
|
|
|
|
{"4ed401116e41", 0x4ed4, 0x01116e41, false}, |
|
|
|
// odd length
|
|
|
|
{"ed400116e41", 0xed4, 0x00116e41, false}, |
|
|
|
// uint
|
|
|
|
{"fed4c8114ed4c811f0116e41", 0xfed4c8114ed4c811, 0xf0116e41, false}, |
|
|
|
// err: too short
|
|
|
|
{"4ed4c811", 0, 0, true}, |
|
|
|
// err: too long
|
|
|
|
{"4ed4c8114ed4c8114ed4c8111", 0, 0, true}, |
|
|
|
// err: invalid character
|
|
|
|
{"helloworld", 0, 0, true}, |
|
|
|
} |
|
|
|
|
|
|
|
for _, tc := range testcases { |
|
|
|
if id, cookie, err := ParseKeyHash(tc.KeyHash); err != nil && !tc.Err { |
|
|
|
t.Fatalf("Parse %s error: %v", tc.KeyHash, err) |
|
|
|
} else if err == nil && tc.Err { |
|
|
|
t.Fatalf("Parse %s expected error got nil", tc.KeyHash) |
|
|
|
} else if id != tc.ID || cookie != tc.Cookie { |
|
|
|
t.Fatalf("Parse %s wrong result. Expected: (%d, %d) got: (%d, %d)", tc.KeyHash, tc.ID, tc.Cookie, id, cookie) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func BenchmarkParseKeyHash(b *testing.B) { |
|
|
|
b.ReportAllocs() |
|
|
|
|
|
|
|
for i := 0; i < b.N; i++ { |
|
|
|
ParseKeyHash("4ed44ed44ed44ed4c8116e41") |
|
|
|
} |
|
|
|
} |