|
|
|
@@ -19,19 +19,40 @@ const ( |
|
|
|
|
|
|
|
DefaultCNPort = 3100 |
|
|
|
DefaultOVPort = 3101 |
|
|
|
DefaultSessionSecret = "user-migration-e2e-session-secret" |
|
|
|
DefaultCNDBFileName = "cn.db" |
|
|
|
DefaultOVDBFileName = "ov.db" |
|
|
|
DefaultCNLogFileName = "cn.log" |
|
|
|
DefaultOVLogFileName = "ov.log" |
|
|
|
DefaultCNSessionName = "cn_session" |
|
|
|
DefaultOVSessionName = "ov_session" |
|
|
|
DefaultSyncAPIKey = "e2e-sync-key" |
|
|
|
DefaultRootUsername = "root" |
|
|
|
DefaultRootPassword = "Password123!" |
|
|
|
defaultNodeReadyTimout = 45 * time.Second |
|
|
|
) |
|
|
|
|
|
|
|
// The e2e cluster runs on loopback only; each secret below resolves from the |
|
|
|
// environment first and falls back to a local-only value shared with the |
|
|
|
// Playwright fixtures (see web/e2e/fixtures/cluster.ts). |
|
|
|
func RootPassword() string { |
|
|
|
if password := strings.TrimSpace(os.Getenv("E2E_ROOT_PASSWORD")); password != "" { |
|
|
|
return password |
|
|
|
} |
|
|
|
return "e2e-local-root-pass" |
|
|
|
} |
|
|
|
|
|
|
|
func SessionSecret() string { |
|
|
|
if secret := strings.TrimSpace(os.Getenv("E2E_SESSION_SECRET")); secret != "" { |
|
|
|
return secret |
|
|
|
} |
|
|
|
return "e2e-local-session-secret" |
|
|
|
} |
|
|
|
|
|
|
|
func SyncAPIKey() string { |
|
|
|
if key := strings.TrimSpace(os.Getenv("E2E_SYNC_API_KEY")); key != "" { |
|
|
|
return key |
|
|
|
} |
|
|
|
return "e2e-local-sync-key" |
|
|
|
} |
|
|
|
|
|
|
|
type NodeProcess struct { |
|
|
|
Name string |
|
|
|
Port int |
|
|
|
@@ -115,11 +136,11 @@ func PrepareEnvironment(repoRoot, artifactRoot, binaryPath, scenarioName string) |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
|
if err := SetupRoot(cnClient, DefaultRootUsername, DefaultRootPassword); err != nil { |
|
|
|
if err := SetupRoot(cnClient, DefaultRootUsername, RootPassword()); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("setup CN root: %w", err) |
|
|
|
} |
|
|
|
if err := SetupRoot(ovClient, DefaultRootUsername, DefaultRootPassword); err != nil { |
|
|
|
if err := SetupRoot(ovClient, DefaultRootUsername, RootPassword()); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("setup OV root: %w", err) |
|
|
|
} |
|
|
|
@@ -151,25 +172,25 @@ func PrepareEnvironment(repoRoot, artifactRoot, binaryPath, scenarioName string) |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
|
if err := Login(cnClient, DefaultRootUsername, DefaultRootPassword); err != nil { |
|
|
|
if err := Login(cnClient, DefaultRootUsername, RootPassword()); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("login CN root: %w", err) |
|
|
|
} |
|
|
|
if err := Login(ovClient, DefaultRootUsername, DefaultRootPassword); err != nil { |
|
|
|
if err := Login(ovClient, DefaultRootUsername, RootPassword()); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("login OV root: %w", err) |
|
|
|
} |
|
|
|
|
|
|
|
if err := ConfigureCNRegionSync(cnClient, cluster.CN.BaseURL, cluster.OV.BaseURL, DefaultSyncAPIKey); err != nil { |
|
|
|
if err := ConfigureCNRegionSync(cnClient, cluster.CN.BaseURL, cluster.OV.BaseURL, SyncAPIKey()); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("configure CN region sync: %w", err) |
|
|
|
} |
|
|
|
if err := ConfigureOVRegionSync(ovClient, cluster.CN.BaseURL, DefaultSyncAPIKey); err != nil { |
|
|
|
if err := ConfigureOVRegionSync(ovClient, cluster.CN.BaseURL, SyncAPIKey()); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("configure OV region sync: %w", err) |
|
|
|
} |
|
|
|
|
|
|
|
if err := WaitOptionApplied(cluster.OV.BaseURL, DefaultSyncAPIKey, 5, 20*time.Second); err != nil { |
|
|
|
if err := WaitOptionApplied(cluster.OV.BaseURL, SyncAPIKey(), 5, 20*time.Second); err != nil { |
|
|
|
_ = cluster.Stop() |
|
|
|
return nil, fmt.Errorf("wait OV migration API ready: %w", err) |
|
|
|
} |
|
|
|
@@ -272,7 +293,7 @@ func (c *Cluster) startNode(name string, port int, dbPath, sessionName, nodeType |
|
|
|
cmd.Env = mergeEnv(os.Environ(), map[string]string{ |
|
|
|
"PORT": fmt.Sprintf("%d", port), |
|
|
|
"SQLITE_PATH": dbPath, |
|
|
|
"SESSION_SECRET": DefaultSessionSecret, |
|
|
|
"SESSION_SECRET": SessionSecret(), |
|
|
|
"SESSION_NAME": sessionName, |
|
|
|
"SESSION_SECURE": "false", |
|
|
|
"SESSION_SAMESITE": "strict", |
|
|
|
|