package cert

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/consts"
	"github.com/tidbcloud/infra-provider/regional-server/pkg/namer"
)

func TestTiDBCertificatesWithDurationConfig(t *testing.T) {
	n := namer.NewNamer().
		WithTiDBNamespace("tidb-ns").
		WithClusterName("cluster-1").
		WithClusterServerDNSNames("identity", "example.com")

	opts := []Option{WithDurationConfig(DurationConfig{
		CertificateDuration: 144 * time.Hour,
		RenewBefore:         24 * time.Hour,
	})}

	serverCert := TiDBServerCert(n, true, false, opts...)
	require.Equal(t, 144*time.Hour, serverCert.Spec.Duration.Duration)
	require.Equal(t, 24*time.Hour, serverCert.Spec.RenewBefore.Duration)
	require.Equal(t, PCAIssuerName, serverCert.Spec.IssuerRef.Name)

	clientCert := TiDBClientCert(n, opts...)
	require.Equal(t, 144*time.Hour, clientCert.Spec.Duration.Duration)
	require.Equal(t, 24*time.Hour, clientCert.Spec.RenewBefore.Duration)
	require.Equal(t, PCAIssuerName, clientCert.Spec.IssuerRef.Name)
}

func TestTiDBCertificatesKeepDefaultDurations(t *testing.T) {
	n := namer.NewNamer().
		WithTiDBNamespace("tidb-ns").
		WithClusterName("cluster-1").
		WithClusterServerDNSNames("identity", "example.com")

	serverCert := TiDBServerCert(n, true, false)
	require.Equal(t, consts.CertificateDuration, serverCert.Spec.Duration.Duration)
	require.Equal(t, consts.RenewBefore, serverCert.Spec.RenewBefore.Duration)

	clientCert := TiDBClientCert(n)
	require.Equal(t, consts.CertificateDuration, clientCert.Spec.Duration.Duration)
	require.Equal(t, consts.RenewBefore, clientCert.Spec.RenewBefore.Duration)
}
