You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							49 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							49 lines
						
					
					
						
							1.2 KiB
						
					
					
				| package needle | |
| 
 | |
| import ( | |
| 	"testing" | |
| 
 | |
| 	"github.com/chrislusf/seaweedfs/weed/storage/types" | |
| ) | |
| 
 | |
| func TestParseKeyHash(t *testing.T) { | |
| 	testcases := []struct { | |
| 		KeyHash string | |
| 		ID      types.NeedleId | |
| 		Cookie  types.Cookie | |
| 		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 := ParseNeedleIdCookie(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++ { | |
| 		ParseNeedleIdCookie("4ed44ed44ed44ed4c8116e41") | |
| 	} | |
| }
 |