Commit 5c602d36 authored by Eric Chiang's avatar Eric Chiang

server: fix expiry test flake

Ensure compared times are within a second of one another instead of
rounding, which can flake if the two times are different enough to
do round to different values.

Tested using the golang.org/x/tools/cmd/stress tool.

The following set of commands fail without this patch:

    $ go get golang.org/x/tools/cmd/stress
    $ go test -o server.test github.com/coreos/dex/server
    $ stress ./server.test -test.run=TestOAuth2CodeFlow
    219 runs so far, 0 failures
    425 runs so far, 0 failures
    618 runs so far, 0 failures
    802 runs so far, 0 failures
    ^C

Closes #699
parent ff748a2f
...@@ -137,7 +137,7 @@ func TestOAuth2CodeFlow(t *testing.T) { ...@@ -137,7 +137,7 @@ func TestOAuth2CodeFlow(t *testing.T) {
clientSecret := "testclientsecret" clientSecret := "testclientsecret"
requestedScopes := []string{oidc.ScopeOpenID, "email", "offline_access"} requestedScopes := []string{oidc.ScopeOpenID, "email", "offline_access"}
t0 := time.Now().Round(time.Second) t0 := time.Now()
// Always have the time function used by the server return the same time so // Always have the time function used by the server return the same time so
// we can predict expected values of "expires_in" fields exactly. // we can predict expected values of "expires_in" fields exactly.
...@@ -171,7 +171,11 @@ func TestOAuth2CodeFlow(t *testing.T) { ...@@ -171,7 +171,11 @@ func TestOAuth2CodeFlow(t *testing.T) {
handleToken: func(ctx context.Context, p *oidc.Provider, config *oauth2.Config, token *oauth2.Token) error { handleToken: func(ctx context.Context, p *oidc.Provider, config *oauth2.Config, token *oauth2.Token) error {
expectedExpiry := now().Add(idTokensValidFor) expectedExpiry := now().Add(idTokensValidFor)
if !token.Expiry.Round(time.Second).Equal(expectedExpiry) { timeEq := func(t1, t2 time.Time, within time.Duration) bool {
return t1.Sub(t2) < within
}
if !timeEq(token.Expiry, expectedExpiry, time.Second) {
return fmt.Errorf("expected expired_in to be %s, got %s", expectedExpiry, token.Expiry) return fmt.Errorf("expected expired_in to be %s, got %s", expectedExpiry, token.Expiry)
} }
...@@ -183,7 +187,7 @@ func TestOAuth2CodeFlow(t *testing.T) { ...@@ -183,7 +187,7 @@ func TestOAuth2CodeFlow(t *testing.T) {
if err != nil { if err != nil {
return fmt.Errorf("failed to verify id token: %v", err) return fmt.Errorf("failed to verify id token: %v", err)
} }
if !idToken.Expiry.Round(time.Second).Equal(expectedExpiry) { if !timeEq(idToken.Expiry, expectedExpiry, time.Second) {
return fmt.Errorf("expected id token expiry to be %s, got %s", expectedExpiry, token.Expiry) return fmt.Errorf("expected id token expiry to be %s, got %s", expectedExpiry, token.Expiry)
} }
return nil return nil
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment