mirror of https://github.com/stashapp/stash.git
112 lines
1.9 KiB
Go
112 lines
1.9 KiB
Go
![]() |
package oshash
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"math/rand"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func BenchmarkOsHash(b *testing.B) {
|
||
|
src := rand.NewSource(9999)
|
||
|
r := rand.New(src)
|
||
|
|
||
|
size := int64(1234567890)
|
||
|
|
||
|
head := make([]byte, 1024*64)
|
||
|
_, err := r.Read(head)
|
||
|
if err != nil {
|
||
|
b.Errorf("unable to generate head array: %v", err)
|
||
|
}
|
||
|
|
||
|
tail := make([]byte, 1024*64)
|
||
|
_, err = r.Read(tail)
|
||
|
if err != nil {
|
||
|
b.Errorf("unable to generate tail array: %v", err)
|
||
|
}
|
||
|
|
||
|
b.ResetTimer()
|
||
|
|
||
|
for n := 0; n < b.N; n++ {
|
||
|
_, err := oshash(size, head, tail)
|
||
|
if err != nil {
|
||
|
b.Errorf("unexpected error: %v", err)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestFromReader(t *testing.T) {
|
||
|
makeByteArray := func(base []byte, mag int) []byte {
|
||
|
ret := base
|
||
|
for i := 0; i < mag; i++ {
|
||
|
ret = append(ret, ret...)
|
||
|
}
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
makeTailArray := func(base []byte, tail []byte) []byte {
|
||
|
ret := base
|
||
|
t := make([]byte, chunkSize)
|
||
|
copy(t[len(t)-len(tail):], tail)
|
||
|
ret = append(ret, t...)
|
||
|
return ret
|
||
|
}
|
||
|
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
data []byte
|
||
|
want string
|
||
|
wantErr bool
|
||
|
}{
|
||
|
{
|
||
|
"empty",
|
||
|
[]byte{},
|
||
|
"",
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"regular",
|
||
|
makeByteArray([]byte("this is a test"), 15),
|
||
|
"6a0eba04654d0b9b",
|
||
|
false,
|
||
|
},
|
||
|
{
|
||
|
"< chunk size",
|
||
|
[]byte("hello world"),
|
||
|
"d3e392dee38cd4df",
|
||
|
false,
|
||
|
},
|
||
|
{
|
||
|
"< 8",
|
||
|
[]byte("hello"),
|
||
|
"",
|
||
|
true,
|
||
|
},
|
||
|
{
|
||
|
"identical #1",
|
||
|
makeTailArray(make([]byte, chunkSize), []byte("this is dumb")),
|
||
|
"d5d6ddd820756920",
|
||
|
false,
|
||
|
},
|
||
|
{
|
||
|
"identical #2",
|
||
|
makeTailArray(make([]byte, chunkSize), []byte("dumb is this")),
|
||
|
"d5d6ddd820756920",
|
||
|
false,
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
r := bytes.NewReader(tt.data)
|
||
|
|
||
|
got, err := FromReader(r, int64(len(tt.data)))
|
||
|
if (err != nil) != tt.wantErr {
|
||
|
t.Errorf("FromReader() error = %v, wantErr %v", err, tt.wantErr)
|
||
|
return
|
||
|
}
|
||
|
if got != tt.want {
|
||
|
t.Errorf("FromReader() = %v, want %v", got, tt.want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|