...

Source file src/github.com/gin-gonic/contrib/sessions/sessions_test.go

Documentation: github.com/gin-gonic/contrib/sessions

     1  package sessions
     2  
     3  import (
     4  	"github.com/gin-gonic/gin"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"strings"
     8  	"testing"
     9  )
    10  
    11  type storeFactory func(*testing.T) Store
    12  
    13  const sessionName = "mysession"
    14  
    15  const ok = "ok"
    16  
    17  func sessionGetSet(t *testing.T, newStore storeFactory) {
    18  	r := gin.Default()
    19  	r.Use(Sessions(sessionName, newStore(t)))
    20  
    21  	r.GET("/set", func(c *gin.Context) {
    22  		session := Default(c)
    23  		session.Set("key", ok)
    24  		session.Save()
    25  		c.String(200, ok)
    26  	})
    27  
    28  	r.GET("/get", func(c *gin.Context) {
    29  		session := Default(c)
    30  		if session.Get("key") != ok {
    31  			t.Error("Session writing failed")
    32  		}
    33  		session.Save()
    34  		c.String(200, ok)
    35  	})
    36  
    37  	res1 := httptest.NewRecorder()
    38  	req1, _ := http.NewRequest("GET", "/set", nil)
    39  	r.ServeHTTP(res1, req1)
    40  
    41  	res2 := httptest.NewRecorder()
    42  	req2, _ := http.NewRequest("GET", "/get", nil)
    43  	req2.Header.Set("Cookie", res1.Header().Get("Set-Cookie"))
    44  	r.ServeHTTP(res2, req2)
    45  }
    46  
    47  func sessionDeleteKey(t *testing.T, newStore storeFactory) {
    48  	r := gin.Default()
    49  	r.Use(Sessions(sessionName, newStore(t)))
    50  
    51  	r.GET("/set", func(c *gin.Context) {
    52  		session := Default(c)
    53  		session.Set("key", ok)
    54  		session.Save()
    55  		c.String(200, ok)
    56  	})
    57  
    58  	r.GET("/delete", func(c *gin.Context) {
    59  		session := Default(c)
    60  		session.Delete("key")
    61  		session.Save()
    62  		c.String(200, ok)
    63  	})
    64  
    65  	r.GET("/get", func(c *gin.Context) {
    66  		session := Default(c)
    67  		if session.Get("key") != nil {
    68  			t.Error("Session deleting failed")
    69  		}
    70  		session.Save()
    71  		c.String(200, ok)
    72  	})
    73  
    74  	res1 := httptest.NewRecorder()
    75  	req1, _ := http.NewRequest("GET", "/set", nil)
    76  	r.ServeHTTP(res1, req1)
    77  
    78  	res2 := httptest.NewRecorder()
    79  	req2, _ := http.NewRequest("GET", "/delete", nil)
    80  	req2.Header.Set("Cookie", res1.Header().Get("Set-Cookie"))
    81  	r.ServeHTTP(res2, req2)
    82  
    83  	res3 := httptest.NewRecorder()
    84  	req3, _ := http.NewRequest("GET", "/get", nil)
    85  	req3.Header.Set("Cookie", res2.Header().Get("Set-Cookie"))
    86  	r.ServeHTTP(res3, req3)
    87  }
    88  
    89  func sessionFlashes(t *testing.T, newStore storeFactory) {
    90  	r := gin.Default()
    91  	store := newStore(t)
    92  	store.Options(Options{
    93  		Domain: "localhost",
    94  	})
    95  	r.Use(Sessions(sessionName, store))
    96  
    97  	r.GET("/set", func(c *gin.Context) {
    98  		session := Default(c)
    99  		session.AddFlash(ok)
   100  		session.Save()
   101  		c.String(200, ok)
   102  	})
   103  
   104  	r.GET("/flash", func(c *gin.Context) {
   105  		session := Default(c)
   106  		l := len(session.Flashes())
   107  		if l != 1 {
   108  			t.Error("Flashes count does not equal 1. Equals ", l)
   109  		}
   110  		session.Save()
   111  		c.String(200, ok)
   112  	})
   113  
   114  	r.GET("/check", func(c *gin.Context) {
   115  		session := Default(c)
   116  		l := len(session.Flashes())
   117  		if l != 0 {
   118  			t.Error("flashes count is not 0 after reading. Equals ", l)
   119  		}
   120  		session.Save()
   121  		c.String(200, ok)
   122  	})
   123  
   124  	res1 := httptest.NewRecorder()
   125  	req1, _ := http.NewRequest("GET", "/set", nil)
   126  	r.ServeHTTP(res1, req1)
   127  
   128  	res2 := httptest.NewRecorder()
   129  	req2, _ := http.NewRequest("GET", "/flash", nil)
   130  	req2.Header.Set("Cookie", res1.Header().Get("Set-Cookie"))
   131  	r.ServeHTTP(res2, req2)
   132  
   133  	res3 := httptest.NewRecorder()
   134  	req3, _ := http.NewRequest("GET", "/check", nil)
   135  	req3.Header.Set("Cookie", res2.Header().Get("Set-Cookie"))
   136  	r.ServeHTTP(res3, req3)
   137  }
   138  
   139  func sessionClear(t *testing.T, newStore storeFactory) {
   140  	data := map[string]string{
   141  		"key": "val",
   142  		"foo": "bar",
   143  	}
   144  	r := gin.Default()
   145  	store := newStore(t)
   146  	r.Use(Sessions(sessionName, store))
   147  
   148  	r.GET("/set", func(c *gin.Context) {
   149  		session := Default(c)
   150  		for k, v := range data {
   151  			session.Set(k, v)
   152  		}
   153  		session.Clear()
   154  		session.Save()
   155  		c.String(200, ok)
   156  	})
   157  
   158  	r.GET("/check", func(c *gin.Context) {
   159  		session := Default(c)
   160  		for k, v := range data {
   161  			if session.Get(k) == v {
   162  				t.Fatal("Session clear failed")
   163  			}
   164  		}
   165  		session.Save()
   166  		c.String(200, ok)
   167  	})
   168  
   169  	res1 := httptest.NewRecorder()
   170  	req1, _ := http.NewRequest("GET", "/set", nil)
   171  	r.ServeHTTP(res1, req1)
   172  
   173  	res2 := httptest.NewRecorder()
   174  	req2, _ := http.NewRequest("GET", "/check", nil)
   175  	req2.Header.Set("Cookie", res1.Header().Get("Set-Cookie"))
   176  	r.ServeHTTP(res2, req2)
   177  }
   178  
   179  func sessionOptions(t *testing.T, newStore storeFactory) {
   180  	r := gin.Default()
   181  	store := newStore(t)
   182  	store.Options(Options{
   183  		Domain: "localhost",
   184  	})
   185  	r.Use(Sessions(sessionName, store))
   186  
   187  	r.GET("/domain", func(c *gin.Context) {
   188  		session := Default(c)
   189  		session.Set("key", ok)
   190  		session.Options(Options{
   191  			Path: "/foo/bar/bat",
   192  		})
   193  		session.Save()
   194  		c.String(200, ok)
   195  	})
   196  	r.GET("/path", func(c *gin.Context) {
   197  		session := Default(c)
   198  		session.Set("key", ok)
   199  		session.Save()
   200  		c.String(200, ok)
   201  	})
   202  	res1 := httptest.NewRecorder()
   203  	req1, _ := http.NewRequest("GET", "/domain", nil)
   204  	r.ServeHTTP(res1, req1)
   205  
   206  	res2 := httptest.NewRecorder()
   207  	req2, _ := http.NewRequest("GET", "/path", nil)
   208  	r.ServeHTTP(res2, req2)
   209  
   210  	s := strings.Split(res1.Header().Get("Set-Cookie"), ";")
   211  	if s[1] != " Path=/foo/bar/bat" {
   212  		t.Error("Error writing path with options:", s[1])
   213  	}
   214  
   215  	s = strings.Split(res2.Header().Get("Set-Cookie"), ";")
   216  	if s[1] != " Domain=localhost" {
   217  		t.Error("Error writing domain with options:", s[1])
   218  	}
   219  }
   220  

View as plain text