122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
package validation
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/oauth2-proxy/oauth2-proxy/pkg/apis/options"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
)
 | 
						|
 | 
						|
func Test_validateSessionCookieMinimal(t *testing.T) {
 | 
						|
	const (
 | 
						|
		passAuthorizationMsg = "pass_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set"
 | 
						|
		setAuthorizationMsg  = "set_authorization_header requires oauth tokens in sessions. session_cookie_minimal cannot be set"
 | 
						|
		passAccessTokenMsg   = "pass_access_token requires oauth tokens in sessions. session_cookie_minimal cannot be set"
 | 
						|
		cookieRefreshMsg     = "cookie_refresh > 0 requires oauth tokens in sessions. session_cookie_minimal cannot be set"
 | 
						|
	)
 | 
						|
 | 
						|
	testCases := map[string]struct {
 | 
						|
		opts       *options.Options
 | 
						|
		errStrings []string
 | 
						|
	}{
 | 
						|
		"No minimal cookie session": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: false,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		},
 | 
						|
		"No minimal cookie session & passAuthorization": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: false,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				PassAuthorization: true,
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		},
 | 
						|
		"Minimal cookie session no conflicts": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: true,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			errStrings: []string{},
 | 
						|
		},
 | 
						|
		"PassAuthorization conflict": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: true,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				PassAuthorization: true,
 | 
						|
			},
 | 
						|
			errStrings: []string{passAuthorizationMsg},
 | 
						|
		},
 | 
						|
		"SetAuthorization conflict": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: true,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				SetAuthorization: true,
 | 
						|
			},
 | 
						|
			errStrings: []string{setAuthorizationMsg},
 | 
						|
		},
 | 
						|
		"PassAccessToken conflict": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: true,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				PassAccessToken: true,
 | 
						|
			},
 | 
						|
			errStrings: []string{passAccessTokenMsg},
 | 
						|
		},
 | 
						|
		"CookieRefresh conflict": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Cookie: options.Cookie{
 | 
						|
					Refresh: time.Hour,
 | 
						|
				},
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: true,
 | 
						|
					},
 | 
						|
				},
 | 
						|
			},
 | 
						|
			errStrings: []string{cookieRefreshMsg},
 | 
						|
		},
 | 
						|
		"Multiple conflicts": {
 | 
						|
			opts: &options.Options{
 | 
						|
				Session: options.SessionOptions{
 | 
						|
					Cookie: options.CookieStoreOptions{
 | 
						|
						Minimal: true,
 | 
						|
					},
 | 
						|
				},
 | 
						|
				PassAuthorization: true,
 | 
						|
				PassAccessToken:   true,
 | 
						|
			},
 | 
						|
			errStrings: []string{passAuthorizationMsg, passAccessTokenMsg},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for testName, tc := range testCases {
 | 
						|
		t.Run(testName, func(t *testing.T) {
 | 
						|
			errStrings := validateSessionCookieMinimal(tc.opts)
 | 
						|
			g := NewWithT(t)
 | 
						|
			g.Expect(errStrings).To(ConsistOf(tc.errStrings))
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |