mirror of
https://github.com/oauth2-proxy/oauth2-proxy.git
synced 2024-11-24 08:52:25 +02:00
1c1106721e
Moves the logic for redirecting to HTTPs to a middleware package and adds tests for this logic. Also makes the functionality more useful, previously it always redirected to the HTTPS address of the proxy, which may not have been intended, now it will redirect based on if a port is provided in the URL (assume public facing 80 to 443 or 4180 to 8443 for example)
40 lines
784 B
Go
40 lines
784 B
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/oauth2-proxy/oauth2-proxy/pkg/apis/options"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGracefulShutdown(t *testing.T) {
|
|
opts := options.NewOptions()
|
|
stop := make(chan struct{}, 1)
|
|
srv := Server{Handler: http.DefaultServeMux, Opts: opts, stop: stop}
|
|
var wg sync.WaitGroup
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
srv.ServeHTTP()
|
|
}()
|
|
|
|
stop <- struct{}{} // emulate catching signals
|
|
|
|
// An idiomatic for sync.WaitGroup with timeout
|
|
c := make(chan struct{})
|
|
go func() {
|
|
defer close(c)
|
|
wg.Wait()
|
|
}()
|
|
select {
|
|
case <-c:
|
|
case <-time.After(1 * time.Second):
|
|
t.Fatal("Server should return gracefully but timeout has occurred")
|
|
}
|
|
|
|
assert.Len(t, stop, 0) // check if stop chan is empty
|
|
}
|