85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package msg
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"testing"
|
|
|
|
"github.com/Tnze/go-mc/chat/sign"
|
|
)
|
|
|
|
func TestSignatureCache(t *testing.T) {
|
|
cache := newSignatureCache()
|
|
s1 := &sign.Signature{1}
|
|
s2 := &sign.Signature{2}
|
|
s3 := &sign.Signature{3}
|
|
s4 := &sign.Signature{4}
|
|
// t.Logf("%p, %p, %p, %p", s1, s2, s3, s4)
|
|
err := cache.popOrInsert(nil, []sign.PackedSignature{
|
|
{Signature: s1},
|
|
{Signature: s2},
|
|
{Signature: s3},
|
|
})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// cache: [s1, s2, s3, nil...]
|
|
if cache.signatures[0] != s1 || cache.signatures[1] != s2 || cache.signatures[2] != s3 {
|
|
t.Log(cache.signatures)
|
|
t.Fatal("insert s1~3 error")
|
|
}
|
|
err = cache.popOrInsert(s4, []sign.PackedSignature{{Signature: s3}})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// cache: [s4, s3, s1, s2, nil...]
|
|
if cache.signatures[0] != s4 {
|
|
t.Log(cache.signatures)
|
|
t.Fatal("insert s4 error")
|
|
}
|
|
if cache.signatures[1] != s3 {
|
|
t.Log(cache.signatures)
|
|
t.Fatal("pop s3 error")
|
|
}
|
|
if cache.signatures[2] != s1 || cache.signatures[3] != s2 {
|
|
t.Log(cache.signatures)
|
|
t.Fatal("s1~2 position error")
|
|
}
|
|
}
|
|
|
|
func TestSignatureCache_2(t *testing.T) {
|
|
cache := newSignatureCache()
|
|
signs := make([]sign.PackedSignature, len(cache.signatures)+5)
|
|
for i := range signs {
|
|
newSign := new(sign.Signature)
|
|
_, _ = rand.Read(newSign[:])
|
|
signs[i] = sign.PackedSignature{Signature: newSign}
|
|
}
|
|
err := cache.popOrInsert(nil, signs[:len(cache.signatures)])
|
|
if !signatureEquals(cache.signatures[:], signs[:len(cache.signatures)]) {
|
|
t.Fatal("insert error")
|
|
}
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
insert2 := signs[len(cache.signatures)-5:]
|
|
err = cache.popOrInsert(nil, insert2)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !signatureEquals(cache.signatures[:10], insert2) {
|
|
t.Fatal("insert and pop error")
|
|
}
|
|
}
|
|
|
|
func signatureEquals(a []*sign.Signature, b []sign.PackedSignature) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if a[i] != b[i].Signature {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|