1package sessions 2 3import ( 4 "encoding/base64" 5 "net/http" 6 "net/http/httptest" 7 "testing" 8) 9 10// Test for GH-8 for CookieStore 11func TestGH8CookieStore(t *testing.T) { 12 originalPath := "/" 13 store := NewCookieStore() 14 store.Options.Path = originalPath 15 req, err := http.NewRequest("GET", "http://www.example.com", nil) 16 if err != nil { 17 t.Fatal("failed to create request", err) 18 } 19 20 session, err := store.New(req, "hello") 21 if err != nil { 22 t.Fatal("failed to create session", err) 23 } 24 25 store.Options.Path = "/foo" 26 if session.Options.Path != originalPath { 27 t.Fatalf("bad session path: got %q, want %q", session.Options.Path, originalPath) 28 } 29} 30 31// Test for GH-8 for FilesystemStore 32func TestGH8FilesystemStore(t *testing.T) { 33 originalPath := "/" 34 store := NewFilesystemStore("") 35 store.Options.Path = originalPath 36 req, err := http.NewRequest("GET", "http://www.example.com", nil) 37 if err != nil { 38 t.Fatal("failed to create request", err) 39 } 40 41 session, err := store.New(req, "hello") 42 if err != nil { 43 t.Fatal("failed to create session", err) 44 } 45 46 store.Options.Path = "/foo" 47 if session.Options.Path != originalPath { 48 t.Fatalf("bad session path: got %q, want %q", session.Options.Path, originalPath) 49 } 50} 51 52// Test for GH-2. 53func TestGH2MaxLength(t *testing.T) { 54 store := NewFilesystemStore("", []byte("some key")) 55 req, err := http.NewRequest("GET", "http://www.example.com", nil) 56 if err != nil { 57 t.Fatal("failed to create request", err) 58 } 59 w := httptest.NewRecorder() 60 61 session, err := store.New(req, "my session") 62 if err != nil { 63 t.Fatal("failed to create session", err) 64 } 65 66 session.Values["big"] = make([]byte, base64.StdEncoding.DecodedLen(4096*2)) 67 err = session.Save(req, w) 68 if err == nil { 69 t.Fatal("expected an error, got nil") 70 } 71 72 store.MaxLength(4096 * 3) // A bit more than the value size to account for encoding overhead. 73 err = session.Save(req, w) 74 if err != nil { 75 t.Fatal("failed to Save:", err) 76 } 77} 78 79// Test delete filesystem store with max-age: -1 80func TestGH8FilesystemStoreDelete(t *testing.T) { 81 store := NewFilesystemStore("", []byte("some key")) 82 req, err := http.NewRequest("GET", "http://www.example.com", nil) 83 if err != nil { 84 t.Fatal("failed to create request", err) 85 } 86 w := httptest.NewRecorder() 87 88 session, err := store.New(req, "hello") 89 if err != nil { 90 t.Fatal("failed to create session", err) 91 } 92 93 err = session.Save(req, w) 94 if err != nil { 95 t.Fatal("failed to save session", err) 96 } 97 98 session.Options.MaxAge = -1 99 err = session.Save(req, w) 100 if err != nil { 101 t.Fatal("failed to delete session", err) 102 } 103} 104 105// Test delete filesystem store with max-age: 0 106func TestGH8FilesystemStoreDelete2(t *testing.T) { 107 store := NewFilesystemStore("", []byte("some key")) 108 req, err := http.NewRequest("GET", "http://www.example.com", nil) 109 if err != nil { 110 t.Fatal("failed to create request", err) 111 } 112 w := httptest.NewRecorder() 113 114 session, err := store.New(req, "hello") 115 if err != nil { 116 t.Fatal("failed to create session", err) 117 } 118 119 err = session.Save(req, w) 120 if err != nil { 121 t.Fatal("failed to save session", err) 122 } 123 124 session.Options.MaxAge = 0 125 err = session.Save(req, w) 126 if err != nil { 127 t.Fatal("failed to delete session", err) 128 } 129} 130