pkg/k8score/dynamic_cache_discovery_test.go
Rama main · réplica de lectura del repositorio original.
package k8score
import (
"testing"
"time"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
dynamicfake "k8s.io/client-go/dynamic/fake"
)
func TestDiscoverAllCRDsDefersDeprecatedCrossplaneUsage(t *testing.T) {
legacyUsage := schema.GroupVersionResource{
Group: "apiextensions.crossplane.io", Version: "v1beta1", Resource: "usages",
}
currentUsage := schema.GroupVersionResource{
Group: "protection.crossplane.io", Version: "v1beta1", Resource: "usages",
}
discovery := &ResourceDiscovery{
resources: []APIResource{
{
Group: legacyUsage.Group, Version: legacyUsage.Version, Kind: "Usage", Name: legacyUsage.Resource,
IsCRD: true, Verbs: []string{"get", "list", "watch"},
},
{
Group: currentUsage.Group, Version: currentUsage.Version, Kind: "Usage", Name: currentUsage.Resource,
IsCRD: true, Verbs: []string{"get", "list", "watch"},
},
},
resourceMap: make(map[string]APIResource),
gvrMap: make(map[string]schema.GroupVersionResource),
lastRefresh: time.Now(),
cacheTTL: time.Hour,
}
dynamicClient := dynamicfake.NewSimpleDynamicClientWithCustomListKinds(
runtime.NewScheme(),
map[schema.GroupVersionResource]string{
legacyUsage: "UsageList",
currentUsage: "UsageList",
},
)
cache, err := NewDynamicResourceCache(DynamicCacheConfig{
DynamicClient: dynamicClient,
Discovery: discovery,
})
if err != nil {
t.Fatalf("NewDynamicResourceCache failed: %v", err)
}
t.Cleanup(cache.Stop)
cache.DiscoverAllCRDs()
select {
case <-cache.discoveryDone:
case <-time.After(5 * time.Second):
t.Fatal("DiscoverAllCRDs did not complete")
}
if cache.hasCoveringInformer(legacyUsage, "") {
t.Fatal("deprecated apiextensions.crossplane.io Usage was eagerly watched")
}
if !cache.hasCoveringInformer(currentUsage, "") {
t.Fatal("protection.crossplane.io Usage was not eagerly watched")
}
if err := cache.EnsureWatching(legacyUsage); err != nil {
t.Fatalf("deprecated Usage should remain available on demand: %v", err)
}
if !cache.WaitForSync(legacyUsage, 5*time.Second) {
t.Fatal("deprecated Usage on-demand informer did not sync")
}
}