mirror of
https://github.com/sablierapp/sablier.git
synced 2025-12-21 13:23:03 +01:00
269 lines
8.2 KiB
Go
269 lines
8.2 KiB
Go
package traefik_test
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/sablierapp/sablier/plugins/traefik"
|
|
)
|
|
|
|
var fals bool = false
|
|
var tru bool = true
|
|
|
|
func TestConfig_BuildRequest(t *testing.T) {
|
|
type fields struct {
|
|
SablierURL string
|
|
Names string
|
|
Group string
|
|
SessionDuration string
|
|
Dynamic *traefik.DynamicConfiguration
|
|
Blocking *traefik.BlockingConfiguration
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
want *http.Request
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "dynamic session with required values",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
Dynamic: &traefik.DynamicConfiguration{},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with default values",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache&session_duration=1m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with group",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Group: "default",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&group=default&session_duration=1m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with theme values",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
Theme: "hacker-terminal",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache&session_duration=1m&theme=hacker-terminal", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with theme and display name values",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
Theme: "hacker-terminal",
|
|
DisplayName: "Hello World!",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=Hello+World%21&names=nginx&names=apache&session_duration=1m&theme=hacker-terminal", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with invalid session duration",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "invalid",
|
|
Dynamic: &traefik.DynamicConfiguration{},
|
|
},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "dynamic session with refresh frequency",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
RefreshFrequency: "1m",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache&refresh_frequency=1m&session_duration=1m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with invalid refresh frequency",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
RefreshFrequency: "invalid",
|
|
},
|
|
},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "dynamic session with show details to true",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
ShowDetails: &tru,
|
|
RefreshFrequency: "1m",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache&refresh_frequency=1m&session_duration=1m&show_details=true", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session with show details to false",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
ShowDetails: &fals,
|
|
RefreshFrequency: "1m",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache&refresh_frequency=1m&session_duration=1m&show_details=false", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "dynamic session without show details set",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{
|
|
ShowDetails: nil,
|
|
RefreshFrequency: "1m",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/dynamic?display_name=sablier-middleware&names=nginx&names=apache&refresh_frequency=1m&session_duration=1m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "blocking session with required values",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
Blocking: &traefik.BlockingConfiguration{},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/blocking?names=nginx&names=apache", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "blocking session with default values",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Blocking: &traefik.BlockingConfiguration{},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/blocking?names=nginx&names=apache&session_duration=1m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "blocking session with group",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Group: "default",
|
|
SessionDuration: "1m",
|
|
Blocking: &traefik.BlockingConfiguration{},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/blocking?group=default&session_duration=1m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "blocking session with timeout value",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Blocking: &traefik.BlockingConfiguration{
|
|
Timeout: "5m",
|
|
},
|
|
},
|
|
want: createRequest("GET", "http://sablier:10000/api/strategies/blocking?names=nginx&names=apache&session_duration=1m&timeout=5m", nil),
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "blocking session with invalid timeout value",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Blocking: &traefik.BlockingConfiguration{
|
|
Timeout: "invalid",
|
|
},
|
|
},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "both strategies defined",
|
|
fields: fields{
|
|
SablierURL: "http://sablier:10000",
|
|
Names: "nginx , apache",
|
|
SessionDuration: "1m",
|
|
Dynamic: &traefik.DynamicConfiguration{},
|
|
Blocking: &traefik.BlockingConfiguration{},
|
|
},
|
|
want: nil,
|
|
wantErr: true,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
c := &traefik.Config{
|
|
SablierURL: tt.fields.SablierURL,
|
|
Names: tt.fields.Names,
|
|
Group: tt.fields.Group,
|
|
SessionDuration: tt.fields.SessionDuration,
|
|
Dynamic: tt.fields.Dynamic,
|
|
Blocking: tt.fields.Blocking,
|
|
}
|
|
|
|
got, err := c.BuildRequest("sablier-middleware")
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("Config.BuildRequest() error = %v, wantErr %v", err, tt.wantErr)
|
|
return
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("Config.BuildRequest() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func createRequest(method string, url string, body io.Reader) *http.Request {
|
|
request, err := http.NewRequest(method, url, body)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return request
|
|
}
|