75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
package fasthttp
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestUserData(t *testing.T) {
|
|
var u userData
|
|
|
|
for i := 0; i < 10; i++ {
|
|
key := []byte(fmt.Sprintf("key_%d", i))
|
|
u.SetBytes(key, i+5)
|
|
testUserDataGet(t, &u, key, i+5)
|
|
u.SetBytes(key, i)
|
|
testUserDataGet(t, &u, key, i)
|
|
}
|
|
|
|
for i := 0; i < 10; i++ {
|
|
key := []byte(fmt.Sprintf("key_%d", i))
|
|
testUserDataGet(t, &u, key, i)
|
|
}
|
|
|
|
u.Reset()
|
|
|
|
for i := 0; i < 10; i++ {
|
|
key := []byte(fmt.Sprintf("key_%d", i))
|
|
testUserDataGet(t, &u, key, nil)
|
|
}
|
|
}
|
|
|
|
func testUserDataGet(t *testing.T, u *userData, key []byte, value interface{}) {
|
|
v := u.GetBytes(key)
|
|
if v == nil && value != nil {
|
|
t.Fatalf("cannot obtain value for key=%q", key)
|
|
}
|
|
if !reflect.DeepEqual(v, value) {
|
|
t.Fatalf("unexpected value for key=%q: %d. Expecting %d", key, v, value)
|
|
}
|
|
}
|
|
|
|
func TestUserDataValueClose(t *testing.T) {
|
|
var u userData
|
|
|
|
closeCalls := 0
|
|
|
|
// store values implementing io.Closer
|
|
for i := 0; i < 5; i++ {
|
|
key := fmt.Sprintf("key_%d", i)
|
|
u.Set(key, &closerValue{&closeCalls})
|
|
}
|
|
|
|
// store values without io.Closer
|
|
for i := 0; i < 10; i++ {
|
|
key := fmt.Sprintf("key_noclose_%d", i)
|
|
u.Set(key, i)
|
|
}
|
|
|
|
u.Reset()
|
|
|
|
if closeCalls != 5 {
|
|
t.Fatalf("unexpected number of Close calls: %d. Expecting 10", closeCalls)
|
|
}
|
|
}
|
|
|
|
type closerValue struct {
|
|
closeCalls *int
|
|
}
|
|
|
|
func (cv *closerValue) Close() error {
|
|
(*cv.closeCalls)++
|
|
return nil
|
|
}
|