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  }