Ctrl K
ComunidadGuías…

pkg/ownership/cachesource/membership_bench_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package cachesource

import (
	"fmt"
	"testing"

	"k8s.io/apimachinery/pkg/types"

	"github.com/skyhook-io/radar/pkg/ownership"
	"github.com/skyhook-io/radar/pkg/ownership/ownershiptest"
	"github.com/skyhook-io/radar/pkg/resourceid"
)

// BenchmarkRecordingManagers is one search for the managers recording an object among 300
// Applications of 40 entries each, a few of them unreadable.
func BenchmarkRecordingManagers(b *testing.B) {
	w := ownershiptest.World{Resources: ownershiptest.Resources(), Collection: map[resourceid.GroupKind]ownershiptest.Collection{}}
	for _, k := range ownershiptest.Kinds {
		w.Collection[k.GroupKind] = ownershiptest.Collection{OnDemand: !k.Typed}
	}
	for i := range 300 {
		o := ownershiptest.Object{
			Ref:        resourceid.Ref{Group: ownership.ArgoApplication.Group, Kind: ownership.ArgoApplication.Kind, Namespace: "argocd", Name: fmt.Sprint("app-", i)},
			APIVersion: "argoproj.io/v1alpha1", UID: types.UID(fmt.Sprint("uid-app-", i)), ResourceVersion: "1",
			Membership: ownership.MembersRecorded, DestinationNamespace: fmt.Sprint("team-", i%50),
		}
		if i%100 == 0 {
			o.Membership = ownership.MembersUnreadable
		}
		for j := range 40 {
			o.Members = append(o.Members, resourceid.Ref{Group: "apps", Kind: "Deployment", Namespace: o.DestinationNamespace, Name: fmt.Sprintf("app-%d-service-%d", i, j)})
		}
		w.Objects = append(w.Objects, o)
	}
	s := begin(b, render(b, w).source())
	target := resourceid.Ref{Group: "apps", Kind: "Deployment", Namespace: "team-7", Name: "app-7-service-3"}
	if got := s.RecordingManagers(target); len(got.Managers) != 1 || len(got.Unreadable) != 3 || len(got.Gaps) != 0 {
		b.Fatalf("RecordingManagers = %+v", got)
	}
	b.ReportAllocs()
	b.ResetTimer()
	for range b.N {
		s.RecordingManagers(target)
	}
}

// BenchmarkManagerThroughAChain is one drawer's answer for a Pod whose
// Deployment is one of 10,000 an Application lists, the Pod carrying the
// Application's instance label, so the answer walks to the Deployment; a
// fresh view per answer, as each request opens one.
func BenchmarkManagerThroughAChain(b *testing.B) {
	bld := ownershiptest.NewBuilder()
	var members []resourceid.Ref
	var pod resourceid.Ref
	for i := range 10000 {
		d := bld.Add("apps", "Deployment", "shop", fmt.Sprint("web-", i))
		members = append(members, d.Ref)
		if i == 7 {
			rs := bld.Add("apps", "ReplicaSet", "shop", "web-7-1", d.OwnerRef(true))
			pod = bld.Meta(bld.Add("", "Pod", "shop", "web-7-1-a", rs.OwnerRef(true)), map[string]string{"argocd.argoproj.io/instance": "shop"}, nil).Ref
		}
	}
	bld.Manager(ownership.ArgoApplication, "argocd", "shop", ownership.MembersRecorded, "shop", members...)
	bld.Manager(ownership.ArgoApplication, "argocd", "broken", ownership.MembersUnreadable, "shop")
	s := begin(b, render(b, bld.World()).source())
	if got := ownership.NewView(s, ownership.Unrestricted()).Manager(pod); got.State != ownership.ManagerListed || got.Via == nil {
		b.Fatalf("Manager = %+v", got)
	}
	b.ReportAllocs()
	b.ResetTimer()
	for range b.N {
		ownership.NewView(s, ownership.Unrestricted()).Manager(pod)
	}
}