mirror of
https://github.com/vmware-tanzu/pinniped.git
synced 2026-01-03 11:45:45 +00:00
WIP passing lifetime through to storage, unit tests are failing
Signed-off-by: Ryan Richard <rrichard@vmware.com>
This commit is contained in:
committed by
Ryan Richard
parent
c001bb876e
commit
b0c354637d
@@ -11,6 +11,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -22,7 +23,8 @@ import (
|
||||
|
||||
//nolint:gosec // ignore lint warnings that these are credentials
|
||||
const (
|
||||
SecretLabelKey = "storage.pinniped.dev/type"
|
||||
SecretLabelKey = "storage.pinniped.dev/type"
|
||||
SecretLifetimeAnnotationKey = "storage.pinniped.dev/garbage-collect-after"
|
||||
|
||||
secretNameFormat = "pinniped-storage-%s-%s"
|
||||
secretTypeFormat = "storage.pinniped.dev/%s"
|
||||
@@ -45,12 +47,14 @@ type Storage interface {
|
||||
|
||||
type JSON interface{} // document that we need valid JSON types
|
||||
|
||||
func New(resource string, secrets corev1client.SecretInterface) Storage {
|
||||
func New(resource string, secrets corev1client.SecretInterface, clock func() time.Time, lifetime time.Duration) Storage {
|
||||
return &secretsStorage{
|
||||
resource: resource,
|
||||
secretType: corev1.SecretType(fmt.Sprintf(secretTypeFormat, resource)),
|
||||
secretVersion: []byte(secretVersion),
|
||||
secrets: secrets,
|
||||
clock: clock,
|
||||
lifetime: lifetime,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +63,8 @@ type secretsStorage struct {
|
||||
secretType corev1.SecretType
|
||||
secretVersion []byte
|
||||
secrets corev1client.SecretInterface
|
||||
clock func() time.Time
|
||||
lifetime time.Duration
|
||||
}
|
||||
|
||||
func (s *secretsStorage) Create(ctx context.Context, signature string, data JSON, additionalLabels map[string]string) (string, error) {
|
||||
@@ -162,12 +168,16 @@ func (s *secretsStorage) toSecret(signature, resourceVersion string, data JSON,
|
||||
for labelName, labelValue := range additionalLabels {
|
||||
labels[labelName] = labelValue
|
||||
}
|
||||
annotations := map[string]string{
|
||||
SecretLifetimeAnnotationKey: s.clock().Add(s.lifetime).UTC().String(),
|
||||
}
|
||||
|
||||
return &corev1.Secret{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: s.getName(signature),
|
||||
ResourceVersion: resourceVersion,
|
||||
Labels: labels,
|
||||
Annotations: annotations,
|
||||
OwnerReferences: nil,
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/ory/fosite/compose"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -45,6 +46,9 @@ func TestStorage(t *testing.T) {
|
||||
|
||||
validateSecretName := validation.NameIsDNSSubdomain // matches k/k
|
||||
|
||||
var fakeNow = time.Date(2030, time.January, 1, 0, 0, 0, 0, time.UTC)
|
||||
var fakeDuration = time.Minute * 10
|
||||
|
||||
const (
|
||||
namespace = "test-ns"
|
||||
authorizationCode1 = "81qE408EKL-e99gcXo3UnXBz9W05yGm92_hBmvXeadM.R5h38Bmw7yOaWNy0ypB3feh9toM-3T2zlwMXQyeE9B0"
|
||||
@@ -119,6 +123,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "access-tokens",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"create-and-get"}`),
|
||||
@@ -137,6 +146,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "access-tokens",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"create-and-get"}`),
|
||||
@@ -179,6 +193,11 @@ func TestStorage(t *testing.T) {
|
||||
"label1": "value1",
|
||||
"label2": "value2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"create-and-get"}`),
|
||||
@@ -199,6 +218,11 @@ func TestStorage(t *testing.T) {
|
||||
"label1": "value1",
|
||||
"label2": "value2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"create-and-get"}`),
|
||||
@@ -221,6 +245,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "pandas-are-best",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"snorlax"}`),
|
||||
@@ -256,6 +285,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "pandas-are-best",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"snorlax"}`),
|
||||
@@ -278,6 +312,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "stores",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"pants"}`),
|
||||
@@ -327,6 +366,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "stores",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"shirts"}`),
|
||||
@@ -345,6 +389,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "stores",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"shirts"}`),
|
||||
@@ -367,6 +416,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "seals",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal"}`),
|
||||
@@ -402,6 +456,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "seals",
|
||||
"additionalLabel": "matching-value",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal"}`),
|
||||
@@ -418,6 +477,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "seals",
|
||||
"additionalLabel": "matching-value",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"happy-seal"}`),
|
||||
@@ -434,6 +498,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "seals", // same type as above
|
||||
"additionalLabel": "non-matching-value", // different value for the same label
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal2"}`),
|
||||
@@ -450,6 +519,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "walruses", // different type from above
|
||||
"additionalLabel": "matching-value", // same value for the same label as above
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal3"}`),
|
||||
@@ -479,6 +553,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "seals", // same type as above
|
||||
"additionalLabel": "non-matching-value", // different value for the same label
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal2"}`),
|
||||
@@ -496,6 +575,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "walruses", // different type from above
|
||||
"additionalLabel": "matching-value", // same value for the same label as above
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal3"}`),
|
||||
@@ -519,6 +603,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "seals",
|
||||
"additionalLabel": "matching-value",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal"}`),
|
||||
@@ -549,6 +638,11 @@ func TestStorage(t *testing.T) {
|
||||
"storage.pinniped.dev/type": "seals",
|
||||
"additionalLabel": "matching-value",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"sad-seal"}`),
|
||||
@@ -602,6 +696,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"twizzlers"}`),
|
||||
@@ -637,6 +736,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"twizzlers"}`),
|
||||
@@ -659,6 +763,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies-are-bad",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"twizzlers"}`),
|
||||
@@ -694,6 +803,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies-are-bad",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"twizzlers"}`),
|
||||
@@ -716,6 +830,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"twizzlers"}`),
|
||||
@@ -751,6 +870,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`{"Data":"twizzlers"}`),
|
||||
@@ -773,6 +897,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`}}bad data{{`),
|
||||
@@ -807,6 +936,11 @@ func TestStorage(t *testing.T) {
|
||||
Labels: map[string]string{
|
||||
"storage.pinniped.dev/type": "candies",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"storage.pinniped.dev/garbage-collect-after": metav1.Time{
|
||||
Time: fakeNow.Add(fakeDuration),
|
||||
}.String(),
|
||||
},
|
||||
},
|
||||
Data: map[string][]byte{
|
||||
"pinniped-storage-data": []byte(`}}bad data{{`),
|
||||
@@ -828,7 +962,7 @@ func TestStorage(t *testing.T) {
|
||||
tt.mocks(t, client)
|
||||
}
|
||||
secrets := client.CoreV1().Secrets(namespace)
|
||||
storage := New(tt.resource, secrets)
|
||||
storage := New(tt.resource, secrets, func() time.Time { return fakeNow }, fakeDuration)
|
||||
|
||||
err := tt.run(t, storage)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user