From ee9d6f21bdfa9a02adb11a8a435625c10681c7b2 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Fri, 30 Sep 2022 14:17:11 +0200 Subject: [PATCH] etcd: add SequenceKey function --- kvdb/etcd/bucket.go | 7 +++++++ kvdb/etcd/bucket_test.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 kvdb/etcd/bucket_test.go diff --git a/kvdb/etcd/bucket.go b/kvdb/etcd/bucket.go index b51c673f7..033f49ca2 100644 --- a/kvdb/etcd/bucket.go +++ b/kvdb/etcd/bucket.go @@ -130,3 +130,10 @@ func ValueKey(key string, buckets ...string) string { return string(makeValueKey(bucket, []byte(key))) } + +// SequenceKey is a helper function used in tests or external tools to create a +// sequence key from the passed bucket list. +func SequenceKey(buckets ...string) string { + id := makeBucketID([]byte(BucketKey(buckets...))) + return string(makeSequenceKey(id[:])) +} diff --git a/kvdb/etcd/bucket_test.go b/kvdb/etcd/bucket_test.go new file mode 100644 index 000000000..3582b6e28 --- /dev/null +++ b/kvdb/etcd/bucket_test.go @@ -0,0 +1,34 @@ +//go:build kvdb_etcd +// +build kvdb_etcd + +package etcd + +import ( + "crypto/sha256" + "testing" + + "github.com/stretchr/testify/require" +) + +// TestBucketKey tests that a key for a bucket can be created correctly. +func TestBucketKey(t *testing.T) { + rootID := sha256.Sum256([]byte("@")) + key := append(rootID[:], []byte("foo")...) + key = append(key, 0xff) + require.Equal(t, string(key), BucketKey("foo")) +} + +// TestBucketVal tests that a key for a bucket value can be created correctly. +func TestBucketVal(t *testing.T) { + rootID := sha256.Sum256([]byte("@")) + key := append(rootID[:], []byte("foo")...) + key = append(key, 0xff) + + keyID := sha256.Sum256(key) + require.Equal(t, string(keyID[:]), BucketVal("foo")) +} + +// TestSequenceKey tests that a key for a sequence can be created correctly. +func TestSequenceKey(t *testing.T) { + require.Contains(t, SequenceKey("foo", "bar", "baz"), "$seq$") +}