// Copyright 2024-2026 the Pinniped contributors. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package totp import ( "testing" "time" "github.com/stretchr/testify/require" ) func TestGenerateOTPCode(t *testing.T) { tests := []struct { name string token string when time.Time wantCode string wantRemainingLifetimeSeconds int64 }{ //nolint:gosec // not a real credential { name: "Use a token from online example", token: "JBSWY3DPEHPK3PXP", // https://github.com/pquerna/otp/blob/3357de7c04813a328d6a1e4a514854213e0f8ce8/totp/totp.go#L180 when: time.Unix(1715205169, 0), wantCode: "780919", wantRemainingLifetimeSeconds: 11, }, //nolint:gosec // not a real credential { name: "Use a token that was randomly generated", token: "EDAYKXL3TEYZNQ3O4N5KPSUAQQLZYUJG", when: time.Unix(1715225917, 0), wantCode: "920615", wantRemainingLifetimeSeconds: 23, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { t.Parallel() actualCode, actualRemainingLifetimeSeconds := GenerateOTPCode(t, test.token, test.when) require.Equal(t, test.wantCode, actualCode) require.Equal(t, test.wantRemainingLifetimeSeconds, actualRemainingLifetimeSeconds) }) } }