github.com/gogf/gf@v1.16.9/net/ghttp/ghttp_unit_session_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package ghttp_test 8 9 import ( 10 "fmt" 11 "testing" 12 "time" 13 14 "github.com/gogf/gf/frame/g" 15 "github.com/gogf/gf/net/ghttp" 16 "github.com/gogf/gf/test/gtest" 17 ) 18 19 func Test_Session_Cookie(t *testing.T) { 20 p, _ := ports.PopRand() 21 s := g.Server(p) 22 s.BindHandler("/set", func(r *ghttp.Request) { 23 r.Session.Set(r.GetString("k"), r.GetString("v")) 24 }) 25 s.BindHandler("/get", func(r *ghttp.Request) { 26 r.Response.Write(r.Session.Get(r.GetString("k"))) 27 }) 28 s.BindHandler("/remove", func(r *ghttp.Request) { 29 r.Session.Remove(r.GetString("k")) 30 }) 31 s.BindHandler("/clear", func(r *ghttp.Request) { 32 r.Session.Clear() 33 }) 34 s.SetPort(p) 35 s.SetDumpRouterMap(false) 36 s.Start() 37 defer s.Shutdown() 38 39 time.Sleep(100 * time.Millisecond) 40 gtest.C(t, func(t *gtest.T) { 41 client := g.Client() 42 client.SetBrowserMode(true) 43 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 44 r1, e1 := client.Get("/set?k=key1&v=100") 45 if r1 != nil { 46 defer r1.Close() 47 } 48 t.Assert(e1, nil) 49 t.Assert(r1.ReadAllString(), "") 50 51 t.Assert(client.GetContent("/set?k=key2&v=200"), "") 52 53 t.Assert(client.GetContent("/get?k=key1"), "100") 54 t.Assert(client.GetContent("/get?k=key2"), "200") 55 t.Assert(client.GetContent("/get?k=key3"), "") 56 t.Assert(client.GetContent("/remove?k=key1"), "") 57 t.Assert(client.GetContent("/remove?k=key3"), "") 58 t.Assert(client.GetContent("/remove?k=key4"), "") 59 t.Assert(client.GetContent("/get?k=key1"), "") 60 t.Assert(client.GetContent("/get?k=key2"), "200") 61 t.Assert(client.GetContent("/clear"), "") 62 t.Assert(client.GetContent("/get?k=key2"), "") 63 }) 64 } 65 66 func Test_Session_Header(t *testing.T) { 67 p, _ := ports.PopRand() 68 s := g.Server(p) 69 s.BindHandler("/set", func(r *ghttp.Request) { 70 r.Session.Set(r.GetString("k"), r.GetString("v")) 71 }) 72 s.BindHandler("/get", func(r *ghttp.Request) { 73 r.Response.Write(r.Session.Get(r.GetString("k"))) 74 }) 75 s.BindHandler("/remove", func(r *ghttp.Request) { 76 r.Session.Remove(r.GetString("k")) 77 }) 78 s.BindHandler("/clear", func(r *ghttp.Request) { 79 r.Session.Clear() 80 }) 81 s.SetPort(p) 82 s.SetDumpRouterMap(false) 83 s.Start() 84 defer s.Shutdown() 85 86 time.Sleep(100 * time.Millisecond) 87 gtest.C(t, func(t *gtest.T) { 88 client := g.Client() 89 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 90 response, e1 := client.Get("/set?k=key1&v=100") 91 if response != nil { 92 defer response.Close() 93 } 94 sessionId := response.GetCookie(s.GetSessionIdName()) 95 t.Assert(e1, nil) 96 t.AssertNE(sessionId, nil) 97 t.Assert(response.ReadAllString(), "") 98 99 client.SetHeader(s.GetSessionIdName(), sessionId) 100 101 t.Assert(client.GetContent("/set?k=key2&v=200"), "") 102 103 t.Assert(client.GetContent("/get?k=key1"), "100") 104 t.Assert(client.GetContent("/get?k=key2"), "200") 105 t.Assert(client.GetContent("/get?k=key3"), "") 106 t.Assert(client.GetContent("/remove?k=key1"), "") 107 t.Assert(client.GetContent("/remove?k=key3"), "") 108 t.Assert(client.GetContent("/remove?k=key4"), "") 109 t.Assert(client.GetContent("/get?k=key1"), "") 110 t.Assert(client.GetContent("/get?k=key2"), "200") 111 t.Assert(client.GetContent("/clear"), "") 112 t.Assert(client.GetContent("/get?k=key2"), "") 113 }) 114 } 115 116 func Test_Session_StorageFile(t *testing.T) { 117 sessionId := "" 118 p, _ := ports.PopRand() 119 s := g.Server(p) 120 s.BindHandler("/set", func(r *ghttp.Request) { 121 r.Session.Set(r.GetString("k"), r.GetString("v")) 122 r.Response.Write(r.GetString("k"), "=", r.GetString("v")) 123 }) 124 s.BindHandler("/get", func(r *ghttp.Request) { 125 r.Response.Write(r.Session.Get(r.GetString("k"))) 126 }) 127 s.SetPort(p) 128 s.SetDumpRouterMap(false) 129 s.Start() 130 defer s.Shutdown() 131 132 time.Sleep(100 * time.Millisecond) 133 134 gtest.C(t, func(t *gtest.T) { 135 client := g.Client() 136 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 137 response, e1 := client.Get("/set?k=key&v=100") 138 if response != nil { 139 defer response.Close() 140 } 141 sessionId = response.GetCookie(s.GetSessionIdName()) 142 t.Assert(e1, nil) 143 t.AssertNE(sessionId, nil) 144 t.Assert(response.ReadAllString(), "key=100") 145 }) 146 time.Sleep(time.Second) 147 gtest.C(t, func(t *gtest.T) { 148 client := g.Client() 149 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 150 client.SetHeader(s.GetSessionIdName(), sessionId) 151 t.Assert(client.GetContent("/get?k=key"), "100") 152 t.Assert(client.GetContent("/get?k=key1"), "") 153 }) 154 } 155 156 func Test_Session_Custom_Id(t *testing.T) { 157 var ( 158 sessionId = "1234567890" 159 key = "key" 160 value = "value" 161 p, _ = ports.PopRand() 162 s = g.Server(p) 163 ) 164 s.BindHandler("/id", func(r *ghttp.Request) { 165 if err := r.Session.SetId(sessionId); err != nil { 166 r.Response.WriteExit(err.Error()) 167 } 168 if err := r.Session.Set(key, value); err != nil { 169 r.Response.WriteExit(err.Error()) 170 } 171 r.Response.WriteExit(r.Session.Id()) 172 }) 173 s.BindHandler("/value", func(r *ghttp.Request) { 174 r.Response.WriteExit(r.Session.Get(key)) 175 }) 176 s.SetPort(p) 177 s.SetDumpRouterMap(false) 178 s.Start() 179 defer s.Shutdown() 180 181 time.Sleep(100 * time.Millisecond) 182 183 gtest.C(t, func(t *gtest.T) { 184 client := g.Client() 185 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 186 r, err := client.Get("/id") 187 t.Assert(err, nil) 188 defer r.Close() 189 t.Assert(r.ReadAllString(), sessionId) 190 t.Assert(r.GetCookie(s.GetSessionIdName()), sessionId) 191 }) 192 gtest.C(t, func(t *gtest.T) { 193 client := g.Client() 194 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 195 client.SetHeader(s.GetSessionIdName(), sessionId) 196 t.Assert(client.GetContent("/value"), value) 197 }) 198 }