@@ -0,0 +1,121 @@
1+package validation
2+
3+import (
4+ "testing"
5+ "time"
6+
7+ "github.com/oauth2-proxy/oauth2-proxy/pkg/apis/options"
8+ . "github.com/onsi/gomega"
9+)
10+
11+func Test_validateSessionCookieMinimal(t *testing.T) {
12+ const (
13+ passAuthorizationMsg = "pass_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set"
14+ setAuthorizationMsg = "set_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set"
15+ passAccessTokenMsg = "pass_access_token requires oauth tokens in sessions. session_cookie_minimal cannot be set"
16+ cookieRefreshMsg = "cookie_refresh > 0 requires oauth tokens in sessions. session_cookie_minimal cannot be set"
17+ )
18+
19+ testCases := map[string]struct {
20+ opts *options.Options
21+ errStrings []string
22+ }{
23+ "No minimal cookie session": {
24+ opts: &options.Options{
25+ Session: options.SessionOptions{
26+ Cookie: options.CookieStoreOptions{
27+ Minimal: false,
28+ },
29+ },
30+ },
31+ errStrings: []string{},
32+ },
33+ "No minimal cookie session & passAuthorization": {
34+ opts: &options.Options{
35+ Session: options.SessionOptions{
36+ Cookie: options.CookieStoreOptions{
37+ Minimal: false,
38+ },
39+ },
40+ PassAuthorization: true,
41+ },
42+ errStrings: []string{},
43+ },
44+ "Minimal cookie session no conflicts": {
45+ opts: &options.Options{
46+ Session: options.SessionOptions{
47+ Cookie: options.CookieStoreOptions{
48+ Minimal: true,
49+ },
50+ },
51+ },
52+ errStrings: []string{},
53+ },
54+ "PassAuthorization conflict": {
55+ opts: &options.Options{
56+ Session: options.SessionOptions{
57+ Cookie: options.CookieStoreOptions{
58+ Minimal: true,
59+ },
60+ },
61+ PassAuthorization: true,
62+ },
63+ errStrings: []string{passAuthorizationMsg},
64+ },
65+ "SetAuthorization conflict": {
66+ opts: &options.Options{
67+ Session: options.SessionOptions{
68+ Cookie: options.CookieStoreOptions{
69+ Minimal: true,
70+ },
71+ },
72+ SetAuthorization: true,
73+ },
74+ errStrings: []string{setAuthorizationMsg},
75+ },
76+ "PassAccessToken conflict": {
77+ opts: &options.Options{
78+ Session: options.SessionOptions{
79+ Cookie: options.CookieStoreOptions{
80+ Minimal: true,
81+ },
82+ },
83+ PassAccessToken: true,
84+ },
85+ errStrings: []string{passAccessTokenMsg},
86+ },
87+ "CookieRefresh conflict": {
88+ opts: &options.Options{
89+ Cookie: options.Cookie{
90+ Refresh: time.Hour,
91+ },
92+ Session: options.SessionOptions{
93+ Cookie: options.CookieStoreOptions{
94+ Minimal: true,
95+ },
96+ },
97+ },
98+ errStrings: []string{cookieRefreshMsg},
99+ },
100+ "Multiple conflicts": {
101+ opts: &options.Options{
102+ Session: options.SessionOptions{
103+ Cookie: options.CookieStoreOptions{
104+ Minimal: true,
105+ },
106+ },
107+ PassAuthorization: true,
108+ PassAccessToken: true,
109+ },
110+ errStrings: []string{passAuthorizationMsg, passAccessTokenMsg},
111+ },
112+ }
113+
114+ for testName, tc := range testCases {
115+ t.Run(testName, func(t *testing.T) {
116+ errStrings := validateSessionCookieMinimal(tc.opts)
117+ g := NewWithT(t)
118+ g.Expect(errStrings).To(ConsistOf(tc.errStrings))
119+ })
120+ }
121+}