Enforce naming convention for browser based tests
This allows us to target browser based tests with the regex: go test -v -race -count 1 -timeout 0 ./test/integration -run '/_Browser' New tests that call browsertest.Open will automatically be forced to follow this convention. Signed-off-by: Monis Khan <mok@vmware.com>
This commit is contained in:
parent
c4ae5cfebb
commit
b8202d89d9
@ -170,7 +170,7 @@ func deserializeWhoAmIRequest(t *testing.T, data string, apiGroupSuffix string)
|
|||||||
return obj.(*identityv1alpha1.WhoAmIRequest)
|
return obj.(*identityv1alpha1.WhoAmIRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCLILoginOIDC(t *testing.T) {
|
func TestCLILoginOIDC_Browser(t *testing.T) {
|
||||||
env := testlib.IntegrationEnv(t)
|
env := testlib.IntegrationEnv(t)
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
||||||
|
@ -45,10 +45,10 @@ func TestUnsuccessfulCredentialRequest_Parallel(t *testing.T) {
|
|||||||
require.Equal(t, "authentication failed", *response.Status.Message)
|
require.Equal(t, "authentication failed", *response.Status.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSuccessfulCredentialRequest cannot run in parallel because runPinnipedLoginOIDC uses a fixed port
|
// TestSuccessfulCredentialRequest_Browser cannot run in parallel because runPinnipedLoginOIDC uses a fixed port
|
||||||
// for its localhost listener via --listen-port=env.CLIUpstreamOIDC.CallbackURL.Port() per oidcLoginCommand.
|
// for its localhost listener via --listen-port=env.CLIUpstreamOIDC.CallbackURL.Port() per oidcLoginCommand.
|
||||||
// Since ports are global to the process, tests using oidcLoginCommand must be run serially.
|
// Since ports are global to the process, tests using oidcLoginCommand must be run serially.
|
||||||
func TestSuccessfulCredentialRequest(t *testing.T) {
|
func TestSuccessfulCredentialRequest_Browser(t *testing.T) {
|
||||||
env := testlib.IntegrationEnv(t).WithCapability(testlib.ClusterSigningKeyIsAvailable)
|
env := testlib.IntegrationEnv(t).WithCapability(testlib.ClusterSigningKeyIsAvailable)
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 6*time.Minute)
|
ctx, cancel := context.WithTimeout(context.Background(), 6*time.Minute)
|
||||||
|
@ -47,8 +47,8 @@ import (
|
|||||||
"go.pinniped.dev/test/testlib/browsertest"
|
"go.pinniped.dev/test/testlib/browsertest"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestE2EFullIntegration tests a full integration scenario that combines the supervisor, concierge, and CLI.
|
// TestE2EFullIntegration_Browser tests a full integration scenario that combines the supervisor, concierge, and CLI.
|
||||||
func TestE2EFullIntegration(t *testing.T) { // nolint:gocyclo
|
func TestE2EFullIntegration_Browser(t *testing.T) { // nolint:gocyclo
|
||||||
env := testlib.IntegrationEnv(t)
|
env := testlib.IntegrationEnv(t)
|
||||||
|
|
||||||
ctx, cancelFunc := context.WithTimeout(context.Background(), 10*time.Minute)
|
ctx, cancelFunc := context.WithTimeout(context.Background(), 10*time.Minute)
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// safe to run in parallel with serial tests since it only interacts with a test local server, see main_test.go.
|
// safe to run in parallel with serial tests since it only interacts with a test local server, see main_test.go.
|
||||||
func TestFormPostHTML_Parallel(t *testing.T) {
|
func TestFormPostHTML_Browser_Parallel(t *testing.T) {
|
||||||
_ = testlib.IntegrationEnv(t)
|
_ = testlib.IntegrationEnv(t)
|
||||||
|
|
||||||
// Run a mock callback handler, simulating the one running in the CLI.
|
// Run a mock callback handler, simulating the one running in the CLI.
|
||||||
|
@ -47,7 +47,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// nolint:gocyclo
|
// nolint:gocyclo
|
||||||
func TestSupervisorLogin(t *testing.T) {
|
func TestSupervisorLogin_Browser(t *testing.T) {
|
||||||
env := testlib.IntegrationEnv(t)
|
env := testlib.IntegrationEnv(t)
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
|
@ -6,6 +6,7 @@ package browsertest
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -20,10 +21,16 @@ const (
|
|||||||
operationPollingInterval = 100 * time.Millisecond
|
operationPollingInterval = 100 * time.Millisecond
|
||||||
)
|
)
|
||||||
|
|
||||||
// Open a webdriver-driven browser and returns an *agouti.Page to control it. The browser will be automatically
|
// Open a webdriver-driven browser and returns an *agouti.Page to control it. The browser will be automatically
|
||||||
// closed at the end of the current test. It is configured for test purposes with the correct HTTP proxy and
|
// closed at the end of the current test. It is configured for test purposes with the correct HTTP proxy and
|
||||||
// in a mode that ignore certificate errors.
|
// in a mode that ignore certificate errors.
|
||||||
func Open(t *testing.T) *agouti.Page {
|
func Open(t *testing.T) *agouti.Page {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
// make it trivial to run all browser based tests via:
|
||||||
|
// go test -v -race -count 1 -timeout 0 ./test/integration -run '/_Browser'
|
||||||
|
require.Contains(t, rootTestName(t), "_Browser", "browser based tests must contain the string _Browser in their name")
|
||||||
|
|
||||||
t.Logf("opening browser driver")
|
t.Logf("opening browser driver")
|
||||||
env := testlib.IntegrationEnv(t)
|
env := testlib.IntegrationEnv(t)
|
||||||
caps := agouti.NewCapabilities()
|
caps := agouti.NewCapabilities()
|
||||||
@ -58,6 +65,25 @@ func Open(t *testing.T) *agouti.Page {
|
|||||||
return page
|
return page
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func rootTestName(t *testing.T) string {
|
||||||
|
switch names := strings.SplitN(t.Name(), "/", 3); len(names) {
|
||||||
|
case 0:
|
||||||
|
panic("impossible")
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
return names[0]
|
||||||
|
|
||||||
|
case 2, 3:
|
||||||
|
if strings.HasPrefix(names[0], "TestIntegration") {
|
||||||
|
return names[1]
|
||||||
|
}
|
||||||
|
return names[0]
|
||||||
|
|
||||||
|
default:
|
||||||
|
panic("impossible")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// WaitForVisibleElements expects the page to contain all the the elements specified by the selectors. It waits for this
|
// WaitForVisibleElements expects the page to contain all the the elements specified by the selectors. It waits for this
|
||||||
// to occur and times out, failing the test, if they never appear.
|
// to occur and times out, failing the test, if they never appear.
|
||||||
func WaitForVisibleElements(t *testing.T, page *agouti.Page, selectors ...string) {
|
func WaitForVisibleElements(t *testing.T, page *agouti.Page, selectors ...string) {
|
||||||
|
Loading…
Reference in New Issue
Block a user