mirror of https://github.com/ory/hydra
159 lines
4.7 KiB
Go
159 lines
4.7 KiB
Go
// Copyright © 2022 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package cli_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/ory/hydra/v2/cmd"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/ory/hydra/v2/cmd/cli"
|
|
"github.com/ory/hydra/v2/internal/testhelpers"
|
|
"github.com/ory/x/cmdx"
|
|
)
|
|
|
|
func newJanitorCmd() *cobra.Command {
|
|
return cmd.NewRootCmd()
|
|
}
|
|
|
|
func TestJanitorHandler_PurgeTokenNotAfter(t *testing.T) {
|
|
ctx := t.Context()
|
|
|
|
for k, v := range testhelpers.NotAfterTestCycles {
|
|
t.Run(fmt.Sprintf("case=%s", k), func(t *testing.T) {
|
|
jt := testhelpers.NewConsentJanitorTestHelper(t.Name())
|
|
reg := jt.GetRegistry(t)
|
|
|
|
// setup test
|
|
t.Run("step=setup-access", jt.AccessTokenNotAfterSetup(ctx, reg.ClientManager(), reg.OAuth2Storage()))
|
|
t.Run("step=setup-refresh", jt.RefreshTokenNotAfterSetup(ctx, reg.ClientManager(), reg.OAuth2Storage()))
|
|
|
|
// run the cleanup routine
|
|
t.Run("step=cleanup", func(t *testing.T) {
|
|
cmdx.ExecNoErr(t, newJanitorCmd(),
|
|
"janitor",
|
|
fmt.Sprintf("--%s=%s", cli.KeepIfYounger, v.String()),
|
|
fmt.Sprintf("--%s=%s", cli.AccessLifespan, jt.GetAccessTokenLifespan().String()),
|
|
fmt.Sprintf("--%s=%s", cli.RefreshLifespan, jt.GetRefreshTokenLifespan().String()),
|
|
fmt.Sprintf("--%s", cli.OnlyTokens),
|
|
reg.Config().DSN(),
|
|
)
|
|
})
|
|
|
|
// validate test
|
|
notAfter := time.Now().Round(time.Second).Add(-v)
|
|
t.Run("step=validate-access", jt.AccessTokenNotAfterValidate(ctx, notAfter, reg.OAuth2Storage()))
|
|
t.Run("step=validate-refresh", jt.RefreshTokenNotAfterValidate(ctx, notAfter, reg.OAuth2Storage()))
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestJanitorHandler_Arguments(t *testing.T) {
|
|
cmdx.ExecNoErr(t, cmd.NewRootCmd(),
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
"memory",
|
|
)
|
|
cmdx.ExecNoErr(t, cmd.NewRootCmd(),
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyTokens),
|
|
"memory",
|
|
)
|
|
cmdx.ExecNoErr(t, cmd.NewRootCmd(),
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyGrants),
|
|
"memory",
|
|
)
|
|
|
|
_, _, err := cmdx.ExecCtx(context.Background(), cmd.NewRootCmd(), nil,
|
|
"janitor",
|
|
"memory")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "Janitor requires at least one of --tokens, --requests or --grants to be set")
|
|
|
|
cmdx.ExecNoErr(t, cmd.NewRootCmd(),
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
fmt.Sprintf("--%s=%s", cli.Limit, "1000"),
|
|
fmt.Sprintf("--%s=%s", cli.BatchSize, "100"),
|
|
"memory",
|
|
)
|
|
|
|
_, _, err = cmdx.ExecCtx(context.Background(), cmd.NewRootCmd(), nil,
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
fmt.Sprintf("--%s=%s", cli.Limit, "0"),
|
|
"memory")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "Values for --limit and --batch-size should both be greater than 0")
|
|
|
|
_, _, err = cmdx.ExecCtx(context.Background(), cmd.NewRootCmd(), nil,
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
fmt.Sprintf("--%s=%s", cli.Limit, "-100"),
|
|
"memory")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "Values for --limit and --batch-size should both be greater than 0")
|
|
|
|
_, _, err = cmdx.ExecCtx(context.Background(), cmd.NewRootCmd(), nil,
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
fmt.Sprintf("--%s=%s", cli.BatchSize, "0"),
|
|
"memory")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "Values for --limit and --batch-size should both be greater than 0")
|
|
|
|
_, _, err = cmdx.ExecCtx(context.Background(), cmd.NewRootCmd(), nil,
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
fmt.Sprintf("--%s=%s", cli.BatchSize, "-100"),
|
|
"memory")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "Values for --limit and --batch-size should both be greater than 0")
|
|
|
|
_, _, err = cmdx.ExecCtx(context.Background(), cmd.NewRootCmd(), nil,
|
|
"janitor",
|
|
fmt.Sprintf("--%s", cli.OnlyRequests),
|
|
fmt.Sprintf("--%s=%s", cli.Limit, "100"),
|
|
fmt.Sprintf("--%s=%s", cli.BatchSize, "1000"),
|
|
"memory")
|
|
require.Error(t, err)
|
|
require.Contains(t, err.Error(), "Value for --batch-size must not be greater than value for --limit")
|
|
}
|
|
|
|
func TestJanitorHandler_PurgeGrantNotAfter(t *testing.T) {
|
|
ctx := t.Context()
|
|
|
|
for k, v := range testhelpers.NotAfterTestCycles {
|
|
t.Run(fmt.Sprintf("case=%s", k), func(t *testing.T) {
|
|
jt := testhelpers.NewConsentJanitorTestHelper(t.Name())
|
|
reg := jt.GetRegistry(t)
|
|
|
|
// setup test
|
|
t.Run("step=setup", jt.GrantNotAfterSetup(ctx, reg.GrantManager()))
|
|
|
|
// run the cleanup routine
|
|
t.Run("step=cleanup", func(t *testing.T) {
|
|
cmdx.ExecNoErr(t, newJanitorCmd(),
|
|
"janitor",
|
|
fmt.Sprintf("--%s=%s", cli.KeepIfYounger, v.String()),
|
|
fmt.Sprintf("--%s", cli.OnlyGrants),
|
|
reg.Config().DSN(),
|
|
)
|
|
})
|
|
|
|
// validate test
|
|
notAfter := time.Now().Round(time.Second).Add(-v)
|
|
t.Run("step=validate-access", jt.GrantNotAfterValidate(ctx, notAfter, reg.GrantManager()))
|
|
})
|
|
}
|
|
}
|