mirror of
https://github.com/int128/kubelogin.git
synced 2026-02-14 08:29:51 +00:00
163 lines
5.3 KiB
Go
163 lines
5.3 KiB
Go
package authcode
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/int128/kubelogin/mocks/github.com/int128/kubelogin/pkg/infrastructure/browser_mock"
|
|
"github.com/int128/kubelogin/mocks/github.com/int128/kubelogin/pkg/oidc/client_mock"
|
|
"github.com/int128/kubelogin/pkg/oidc"
|
|
"github.com/int128/kubelogin/pkg/oidc/client"
|
|
"github.com/int128/kubelogin/pkg/testing/logger"
|
|
"github.com/stretchr/testify/mock"
|
|
)
|
|
|
|
func TestBrowser_Do(t *testing.T) {
|
|
timeout := 5 * time.Second
|
|
|
|
t.Run("Success", func(t *testing.T) {
|
|
ctx, cancel := context.WithTimeout(context.TODO(), timeout)
|
|
defer cancel()
|
|
o := &BrowserOption{
|
|
BindAddress: []string{"127.0.0.1:8000"},
|
|
SkipOpenBrowser: true,
|
|
AuthenticationTimeout: 10 * time.Second,
|
|
LocalServerCertFile: "/path/to/local-server-cert",
|
|
LocalServerKeyFile: "/path/to/local-server-key",
|
|
OpenURLAfterAuthentication: "https://example.com/success.html",
|
|
RedirectURLHostname: "localhost",
|
|
AuthRequestExtraParams: map[string]string{"ttl": "86400", "reauth": "true"},
|
|
}
|
|
mockClient := client_mock.NewMockInterface(t)
|
|
mockClient.EXPECT().
|
|
SupportedPKCEMethods().
|
|
Return(nil)
|
|
mockClient.EXPECT().
|
|
GetTokenByAuthCode(mock.Anything, mock.Anything, mock.Anything).
|
|
Run(func(_ context.Context, in client.GetTokenByAuthCodeInput, readyChan chan<- string) {
|
|
if diff := cmp.Diff(o.BindAddress, in.BindAddress); diff != "" {
|
|
t.Errorf("BindAddress mismatch (-want +got):\n%s", diff)
|
|
}
|
|
if diff := cmp.Diff(BrowserRedirectHTML("https://example.com/success.html"), in.LocalServerSuccessHTML); diff != "" {
|
|
t.Errorf("LocalServerSuccessHTML mismatch (-want +got):\n%s", diff)
|
|
}
|
|
if diff := cmp.Diff(o.RedirectURLHostname, in.RedirectURLHostname); diff != "" {
|
|
t.Errorf("RedirectURLHostname mismatch (-want +got):\n%s", diff)
|
|
}
|
|
if diff := cmp.Diff(o.AuthRequestExtraParams, in.AuthRequestExtraParams); diff != "" {
|
|
t.Errorf("AuthRequestExtraParams mismatch (-want +got):\n%s", diff)
|
|
}
|
|
if diff := cmp.Diff(o.LocalServerKeyFile, in.LocalServerKeyFile); diff != "" {
|
|
t.Errorf("LocalServerKeyFile mismatch (-want +got):\n%s", diff)
|
|
}
|
|
if diff := cmp.Diff(o.LocalServerCertFile, in.LocalServerCertFile); diff != "" {
|
|
t.Errorf("LocalServerCertFile mismatch (-want +got):\n%s", diff)
|
|
}
|
|
readyChan <- "LOCAL_SERVER_URL"
|
|
}).
|
|
Return(&oidc.TokenSet{
|
|
IDToken: "YOUR_ID_TOKEN",
|
|
RefreshToken: "YOUR_REFRESH_TOKEN",
|
|
}, nil)
|
|
u := Browser{
|
|
Logger: logger.New(t),
|
|
}
|
|
got, err := u.Do(ctx, o, mockClient)
|
|
if err != nil {
|
|
t.Errorf("Do returned error: %+v", err)
|
|
}
|
|
want := &oidc.TokenSet{
|
|
IDToken: "YOUR_ID_TOKEN",
|
|
RefreshToken: "YOUR_REFRESH_TOKEN",
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("mismatch (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
|
|
t.Run("OpenBrowser", func(t *testing.T) {
|
|
ctx, cancel := context.WithTimeout(context.TODO(), timeout)
|
|
defer cancel()
|
|
o := &BrowserOption{
|
|
BindAddress: []string{"127.0.0.1:8000"},
|
|
AuthenticationTimeout: 10 * time.Second,
|
|
}
|
|
mockClient := client_mock.NewMockInterface(t)
|
|
mockClient.EXPECT().
|
|
SupportedPKCEMethods().
|
|
Return(nil)
|
|
mockClient.EXPECT().
|
|
GetTokenByAuthCode(mock.Anything, mock.Anything, mock.Anything).
|
|
Run(func(_ context.Context, _ client.GetTokenByAuthCodeInput, readyChan chan<- string) {
|
|
readyChan <- "LOCAL_SERVER_URL"
|
|
}).
|
|
Return(&oidc.TokenSet{
|
|
IDToken: "YOUR_ID_TOKEN",
|
|
RefreshToken: "YOUR_REFRESH_TOKEN",
|
|
}, nil)
|
|
mockBrowser := browser_mock.NewMockInterface(t)
|
|
mockBrowser.EXPECT().
|
|
Open("LOCAL_SERVER_URL").
|
|
Return(nil)
|
|
u := Browser{
|
|
Logger: logger.New(t),
|
|
Browser: mockBrowser,
|
|
}
|
|
got, err := u.Do(ctx, o, mockClient)
|
|
if err != nil {
|
|
t.Errorf("Do returned error: %+v", err)
|
|
}
|
|
want := &oidc.TokenSet{
|
|
IDToken: "YOUR_ID_TOKEN",
|
|
RefreshToken: "YOUR_REFRESH_TOKEN",
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("mismatch (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
|
|
t.Run("OpenBrowserCommand", func(t *testing.T) {
|
|
ctx, cancel := context.WithTimeout(context.TODO(), timeout)
|
|
defer cancel()
|
|
o := &BrowserOption{
|
|
BindAddress: []string{"127.0.0.1:8000"},
|
|
BrowserCommand: "firefox",
|
|
AuthenticationTimeout: 10 * time.Second,
|
|
}
|
|
mockClient := client_mock.NewMockInterface(t)
|
|
mockClient.EXPECT().
|
|
SupportedPKCEMethods().
|
|
Return(nil)
|
|
mockClient.EXPECT().
|
|
GetTokenByAuthCode(mock.Anything, mock.Anything, mock.Anything).
|
|
Run(func(_ context.Context, _ client.GetTokenByAuthCodeInput, readyChan chan<- string) {
|
|
readyChan <- "LOCAL_SERVER_URL"
|
|
}).
|
|
Return(&oidc.TokenSet{
|
|
IDToken: "YOUR_ID_TOKEN",
|
|
RefreshToken: "YOUR_REFRESH_TOKEN",
|
|
}, nil)
|
|
mockBrowser := browser_mock.NewMockInterface(t)
|
|
mockBrowser.EXPECT().
|
|
OpenCommand(mock.Anything, "LOCAL_SERVER_URL", "firefox").
|
|
Return(nil)
|
|
u := Browser{
|
|
Logger: logger.New(t),
|
|
Browser: mockBrowser,
|
|
}
|
|
got, err := u.Do(ctx, o, mockClient)
|
|
if err != nil {
|
|
t.Errorf("Do returned error: %+v", err)
|
|
}
|
|
want := &oidc.TokenSet{
|
|
IDToken: "YOUR_ID_TOKEN",
|
|
RefreshToken: "YOUR_REFRESH_TOKEN",
|
|
}
|
|
if diff := cmp.Diff(want, got); diff != "" {
|
|
t.Errorf("mismatch (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
}
|