diff --git a/pkg/storage/etcd/store.go b/pkg/storage/etcd/store.go index 12776fc6..d64136d6 100644 --- a/pkg/storage/etcd/store.go +++ b/pkg/storage/etcd/store.go @@ -183,10 +183,11 @@ type objectStoreCluster[T metav1.Object] struct { func NewObjectStoreCluster[T metav1.Object](client clientv3.KV, gvk schema.GroupVersionKind, gr schema.GroupResource) api.GenericClusterIface[T] { return &objectStoreCluster[T]{ store: &objectStoreNamespaced[T]{ - namespaced: false, - etcdclient: client, - gvk: gvk, - gr: gr, + ResourceVersion: versioning.NewVersioning(), + namespaced: false, + etcdclient: client, + gvk: gvk, + gr: gr, }, } } diff --git a/pkg/storage/etcd/store_test.go b/pkg/storage/etcd/store_test.go new file mode 100644 index 00000000..00446f09 --- /dev/null +++ b/pkg/storage/etcd/store_test.go @@ -0,0 +1,21 @@ +package etcd + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +func TestClusterStoreUseResourceVersionNoPanic(t *testing.T) { + gvk := schema.GroupVersionKind{Group: "wgpolicyk8s.io", Version: "v1alpha2", Kind: "ClusterPolicyReport"} + gr := schema.GroupResource{Group: "wgpolicyk8s.io", Resource: "clusterpolicyreports"} + + // A nil KV client is fine: UseResourceVersion only touches the in-memory + // versioning struct and never talks to etcd. + store := NewObjectStoreCluster[metav1.Object](nil, gvk, gr) + + if got := store.UseResourceVersion(); got == "" { + t.Fatalf("expected a non-empty resource version, got %q", got) + } +}