aboutsummaryrefslogtreecommitdiff
path: root/userdata_test.go
diff options
context:
space:
mode:
authorGravatar Aliaksandr Valialkin <valyala@gmail.com> 2015-12-11 16:40:55 +0200
committerGravatar Aliaksandr Valialkin <valyala@gmail.com> 2015-12-11 16:40:55 +0200
commitb00a213a93e308d9e649777a2fea323f4b0b4796 (patch)
tree686321705181dd9f253b3072b655ab1fec905c43 /userdata_test.go
parentAdded AppendIPv4 and ParseIPv4 helper functions (diff)
downloadfasthttp-b00a213a93e308d9e649777a2fea323f4b0b4796.tar.gz
fasthttp-b00a213a93e308d9e649777a2fea323f4b0b4796.tar.bz2
fasthttp-b00a213a93e308d9e649777a2fea323f4b0b4796.zip
Moved ctx.UserValue from standard map to custom userData. This should improve its' performance for common case when ctx contains up to 10 user values
Diffstat (limited to 'userdata_test.go')
-rw-r--r--userdata_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/userdata_test.go b/userdata_test.go
new file mode 100644
index 0000000..e4eeaf2
--- /dev/null
+++ b/userdata_test.go
@@ -0,0 +1,41 @@
+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", v, value)
+ }
+}