juanfont/headscale · error
running mock OIDC server: %w
Error message
running mock OIDC server: %w
What it means
Top-level wrap around mockOIDC() for the internal 'headscale mockoidc' command: the mock OpenID Connect server used in integration testing failed to start or run. The wrapped error identifies the stage — missing env config (client id/issuer), bad listening address, or a runtime failure of the embedded OIDC provider.
Source
Thrown at cmd/headscale/cli/mockoidc.go:42
errMockOidcUsersNotDefined = errors.New("MOCKOIDC_USERS not defined")
)
const refreshTTL = 60 * time.Minute
var accessTTL = 2 * time.Minute
func init() {
rootCmd.AddCommand(mockOidcCmd)
}
var mockOidcCmd = &cobra.Command{
Use: "mockoidc",
Short: "Runs a mock OIDC server for testing",
Long: "This internal command runs a OpenID Connect for testing purposes",
RunE: func(cmd *cobra.Command, args []string) error {
err := mockOIDC()
if err != nil {
return fmt.Errorf("running mock OIDC server: %w", err)
}
return nil
},
}
func mockOIDC() error {
clientID := os.Getenv("MOCKOIDC_CLIENT_ID")
if clientID == "" {
return errMockOidcClientIDNotDefined
}
clientSecret := os.Getenv("MOCKOIDC_CLIENT_SECRET")
if clientSecret == "" {
return errMockOidcClientSecretNotDefined
}
addrStr := os.Getenv("MOCKOIDC_ADDR")View on GitHub (pinned to 565fd254d0)
Solutions
- Set the required env vars — at minimum MOCKOIDC_CLIENT_ID (check mockoidc.go for the full list: issuer, addr, client secret)
- Free the configured listen port (kill stale mockoidc processes)
- Run it inside the integration environment that normally configures it, rather than ad hoc
Example fix
# before headscale mockoidc # after export MOCKOIDC_CLIENT_ID=test-client headscale mockoidc
Defensive patterns
Strategy: validation
Validate before calling
for _, k := range []string{"MOCKOIDC_CLIENT_ID" /* + issuer/addr per mockoidc.go */} {
if os.Getenv(k) == "" {
log.Fatalf("required env %s not set", k)
}
} Try / catch
if err := mockOIDC(); err != nil {
log.Fatalf("mock oidc failed: %v", err) // fail the harness fast, surface wrapped cause
} Prevention
- Export all MOCKOIDC_* vars in the integration harness before launch
- Allocate a dedicated port for the mock server to avoid conflicts
- Run the mock server only within the test environment that provisions it
When it happens
Trigger: Running 'headscale mockoidc' without the required environment variables (e.g., MOCKOIDC_CLIENT_ID unset yields errMockOidcClientIDNotDefined), with an invalid issuer URL, or when its listen port is already taken.
Common situations: Integration test harness misconfiguration (env vars not exported); port conflicts when a previous mock server did not shut down; running the command outside the test container where /etc/headscale networking assumptions do not hold.
Related errors
AI-assisted analysis of juanfont/headscale@565fd254d0 (2026-08-15).
Data as JSON: /api/errors/346941d515ed1a26.
Report an issue: GitHub.