github.com/woremacx/kocha@v0.7.1-0.20150731103243-a5889322afc9/session_test.go (about) 1 package kocha_test 2 3 import ( 4 "fmt" 5 "reflect" 6 "strings" 7 "testing" 8 "testing/quick" 9 10 "github.com/woremacx/kocha" 11 ) 12 13 func TestSession(t *testing.T) { 14 sess := make(kocha.Session) 15 key := "test_key" 16 var actual interface{} = sess.Get(key) 17 var expected interface{} = "" 18 if !reflect.DeepEqual(actual, expected) { 19 t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected) 20 } 21 actual = len(sess) 22 expected = 0 23 if !reflect.DeepEqual(actual, expected) { 24 t.Errorf(`len(Session) => %#v; want %#v`, actual, expected) 25 } 26 27 value := "test_value" 28 sess.Set(key, value) 29 actual = sess.Get(key) 30 expected = value 31 if !reflect.DeepEqual(actual, expected) { 32 t.Errorf(`Session.Set(%#v, %#v); Session.Get(%#v) => %#v; want %#v`, key, value, key, actual, expected) 33 } 34 actual = len(sess) 35 expected = 1 36 if !reflect.DeepEqual(actual, expected) { 37 t.Errorf(`Session.Set(%#v, %#v); len(Session) => %#v; want %#v`, key, value, actual, expected) 38 } 39 40 key2 := "test_key2" 41 value2 := "test_value2" 42 sess.Set(key2, value2) 43 actual = sess.Get(key2) 44 expected = value2 45 if !reflect.DeepEqual(actual, expected) { 46 t.Errorf(`Session.Set(%#v, %#v); Session.Get(%#v) => %#v; want %#v`, key2, value2, key2, actual, expected) 47 } 48 actual = len(sess) 49 expected = 2 50 if !reflect.DeepEqual(actual, expected) { 51 t.Errorf(`Session.Set(%#v, %#v); len(Session) => %#v; want %#v`, key2, value2, actual, expected) 52 } 53 54 value3 := "test_value3" 55 sess.Set(key, value3) 56 actual = sess.Get(key) 57 expected = value3 58 if !reflect.DeepEqual(actual, expected) { 59 t.Errorf(`Session.Set(%#v, %#v); Session.Get(%#v) => %#v; want %#v`, key, value3, key, actual, expected) 60 } 61 actual = len(sess) 62 expected = 2 63 if !reflect.DeepEqual(actual, expected) { 64 t.Errorf(`Session.Set(%#v, %#v); len(Session) => %#v; want %#v`, key, value3, actual, expected) 65 } 66 67 sess.Clear() 68 for _, key := range []string{key, key2} { 69 actual = sess.Get(key) 70 expected = "" 71 if !reflect.DeepEqual(actual, expected) { 72 t.Errorf(`Session.Clear(); Session.Get(%#v) => %#v; want %#v`, key, actual, expected) 73 } 74 } 75 actual = len(sess) 76 expected = 0 77 if !reflect.DeepEqual(actual, expected) { 78 t.Errorf(`Session.Clear(); len(Session) => %#v; want %#v`, actual, expected) 79 } 80 } 81 82 func TestSession_Get(t *testing.T) { 83 sess := make(kocha.Session) 84 key := "test_key" 85 var actual interface{} = sess.Get(key) 86 var expected interface{} = "" 87 if !reflect.DeepEqual(actual, expected) { 88 t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected) 89 } 90 91 value := "test_value" 92 sess[key] = value 93 actual = sess.Get(key) 94 expected = value 95 if !reflect.DeepEqual(actual, expected) { 96 t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected) 97 } 98 99 delete(sess, key) 100 actual = sess.Get(key) 101 expected = "" 102 if !reflect.DeepEqual(actual, expected) { 103 t.Errorf(`Session.Get(%#v) => %#v; want %#v`, key, actual, expected) 104 } 105 } 106 107 func TestSession_Set(t *testing.T) { 108 sess := make(kocha.Session) 109 key := "test_key" 110 var actual interface{} = sess[key] 111 var expected interface{} = "" 112 if !reflect.DeepEqual(actual, expected) { 113 t.Errorf(`Session[%#v] => %#v; want %#v`, key, actual, expected) 114 } 115 116 value := "test_value" 117 sess.Set(key, value) 118 actual = sess[key] 119 expected = value 120 if !reflect.DeepEqual(actual, expected) { 121 t.Errorf(`Session.Set(%#v, %#v); Session[%#v] => %#v; want %#v`, key, value, key, actual, expected) 122 } 123 124 value2 := "test_value2" 125 sess.Set(key, value2) 126 actual = sess[key] 127 expected = value2 128 if !reflect.DeepEqual(actual, expected) { 129 t.Errorf(`Session.Set(%#v, %#v); Session[%#v] => %#v; want %#v`, key, value2, key, actual, expected) 130 } 131 } 132 133 func TestSession_Del(t *testing.T) { 134 sess := make(kocha.Session) 135 key := "test_key" 136 value := "test_value" 137 sess[key] = value 138 var actual interface{} = sess[key] 139 var expected interface{} = value 140 if !reflect.DeepEqual(actual, expected) { 141 t.Errorf(`Session[%#v] => %#v; want %#v`, key, actual, expected) 142 } 143 144 sess.Del(key) 145 actual = sess[key] 146 expected = "" 147 if !reflect.DeepEqual(actual, expected) { 148 t.Errorf(`Session.Del(%#v); Session[%#v] => %#v; want %#v`, key, key, actual, expected) 149 } 150 } 151 152 func Test_Session_Clear(t *testing.T) { 153 sess := make(kocha.Session) 154 sess["hoge"] = "foo" 155 sess["bar"] = "baz" 156 actual := len(sess) 157 expected := 2 158 if !reflect.DeepEqual(actual, expected) { 159 t.Errorf("Expect %v, but %v", expected, actual) 160 } 161 sess.Clear() 162 actual = len(sess) 163 expected = 0 164 if !reflect.DeepEqual(actual, expected) { 165 t.Errorf("Expect %v, but %v", expected, actual) 166 } 167 } 168 169 func Test_SessionCookieStore(t *testing.T) { 170 if err := quick.Check(func(k, v string) bool { 171 expected := make(kocha.Session) 172 expected[k] = v 173 store := kocha.NewTestSessionCookieStore() 174 r, err := store.Save(expected) 175 if err != nil { 176 t.Fatal(err) 177 } 178 actual, err := store.Load(r) 179 if err != nil { 180 t.Fatal(err) 181 } 182 return reflect.DeepEqual(actual, expected) 183 }, nil); err != nil { 184 t.Error(err) 185 } 186 187 func() { 188 store := kocha.NewTestSessionCookieStore() 189 key := "invalid" 190 _, err := store.Load(key) 191 actual := err 192 expect := fmt.Errorf("kocha: session cookie value too short") 193 if !reflect.DeepEqual(actual, expect) { 194 t.Errorf(`SessionCookieStore.Load(%#v) => _, %#v; want %#v`, key, actual, expect) 195 } 196 }() 197 } 198 199 func Test_SessionCookieStore_Validate(t *testing.T) { 200 // tests for validate the key size. 201 for _, keySize := range []int{16, 24, 32} { 202 store := &kocha.SessionCookieStore{ 203 SecretKey: strings.Repeat("a", keySize), 204 SigningKey: "a", 205 } 206 if err := store.Validate(); err != nil { 207 t.Errorf("Expect key size %v is valid, but returned error: %v", keySize, err) 208 } 209 } 210 // boundary tests 211 for _, keySize := range []int{15, 17, 23, 25, 31, 33} { 212 store := &kocha.SessionCookieStore{ 213 SecretKey: strings.Repeat("a", keySize), 214 SigningKey: "a", 215 } 216 if err := store.Validate(); err == nil { 217 t.Errorf("Expect key size %v is invalid, but doesn't returned error", keySize) 218 } 219 } 220 }