Skip to content

Commit

Permalink
ready tracker test for provider
Browse files Browse the repository at this point in the history
Signed-off-by: Sertac Ozercan <sozercan@gmail.com>
  • Loading branch information
sozercan committed Oct 1, 2021
1 parent c4fe153 commit 6634aab
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 13 deletions.
88 changes: 75 additions & 13 deletions pkg/readiness/ready_tracker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,15 @@ import (
"time"

"github.com/onsi/gomega"
externaldatav1alpha1 "github.com/open-policy-agent/frameworks/constraint/pkg/apis/externaldata/v1alpha1"
"github.com/open-policy-agent/frameworks/constraint/pkg/apis/templates/v1beta1"
opa "github.com/open-policy-agent/frameworks/constraint/pkg/client"
"github.com/open-policy-agent/frameworks/constraint/pkg/client/drivers/local"
frameworksexternaldata "github.com/open-policy-agent/frameworks/constraint/pkg/externaldata"
podstatus "github.com/open-policy-agent/gatekeeper/apis/status/v1beta1"
"github.com/open-policy-agent/gatekeeper/pkg/controller"
"github.com/open-policy-agent/gatekeeper/pkg/controller/config/process"
"github.com/open-policy-agent/gatekeeper/pkg/externaldata"
"github.com/open-policy-agent/gatekeeper/pkg/mutation"
mutationtypes "github.com/open-policy-agent/gatekeeper/pkg/mutation/types"
"github.com/open-policy-agent/gatekeeper/pkg/readiness"
Expand Down Expand Up @@ -96,8 +99,13 @@ func setupOpa(t *testing.T) *opa.Client {
return client
}

func setupController(mgr manager.Manager, wm *watch.Manager, opa *opa.Client, mutationSystem *mutation.System) error {
tracker, err := readiness.SetupTracker(mgr, mutationSystem != nil, false)
func setupController(
mgr manager.Manager,
wm *watch.Manager,
opa *opa.Client,
mutationSystem *mutation.System,
providerCache *frameworksexternaldata.ProviderCache) error {
tracker, err := readiness.SetupTracker(mgr, mutationSystem != nil, providerCache != nil)
if err != nil {
return fmt.Errorf("setting up tracker: %w", err)
}
Expand All @@ -121,6 +129,7 @@ func setupController(mgr manager.Manager, wm *watch.Manager, opa *opa.Client, mu
GetPod: func(ctx context.Context) (*corev1.Pod, error) { return pod, nil },
ProcessExcluder: processExcluder,
MutationSystem: mutationSystem,
ProviderCache: providerCache,
}
ctx := context.Background()
if err := controller.AddToManager(ctx, mgr, opts); err != nil {
Expand Down Expand Up @@ -153,7 +162,7 @@ func Test_AssignMetadata(t *testing.T) {

mutationSystem := mutation.NewSystem(mutation.SystemOpts{})

if err := setupController(mgr, wm, opaClient, mutationSystem); err != nil {
if err := setupController(mgr, wm, opaClient, mutationSystem, nil); err != nil {
t.Fatalf("setupControllers: %v", err)
}

Expand All @@ -173,8 +182,8 @@ func Test_AssignMetadata(t *testing.T) {
// Verify that the AssignMetadata is present in the cache
for _, am := range testAssignMetadata {
id := mutationtypes.MakeID(am)
exptectedMutator := mutationSystem.Get(id)
g.Expect(exptectedMutator).NotTo(gomega.BeNil(), "expected mutator was not found")
expectedMutator := mutationSystem.Get(id)
g.Expect(expectedMutator).NotTo(gomega.BeNil(), "expected mutator was not found")
}
}

Expand Down Expand Up @@ -202,7 +211,7 @@ func Test_ModifySet(t *testing.T) {

mutationSystem := mutation.NewSystem(mutation.SystemOpts{})

if err := setupController(mgr, wm, opaClient, mutationSystem); err != nil {
if err := setupController(mgr, wm, opaClient, mutationSystem, nil); err != nil {
t.Fatalf("setupControllers: %v", err)
}

Expand All @@ -222,8 +231,8 @@ func Test_ModifySet(t *testing.T) {
// Verify that the ModifySet is present in the cache
for _, am := range testModifySet {
id := mutationtypes.MakeID(am)
exptectedMutator := mutationSystem.Get(id)
g.Expect(exptectedMutator).NotTo(gomega.BeNil(), "expected mutator was not found")
expectedMutator := mutationSystem.Get(id)
g.Expect(expectedMutator).NotTo(gomega.BeNil(), "expected mutator was not found")
}
}

Expand Down Expand Up @@ -251,7 +260,7 @@ func Test_Assign(t *testing.T) {

mutationSystem := mutation.NewSystem(mutation.SystemOpts{})

if err := setupController(mgr, wm, opaClient, mutationSystem); err != nil {
if err := setupController(mgr, wm, opaClient, mutationSystem, nil); err != nil {
t.Fatalf("setupControllers: %v", err)
}

Expand All @@ -271,8 +280,61 @@ func Test_Assign(t *testing.T) {
// Verify that the Assign is present in the cache
for _, am := range testAssign {
id := mutationtypes.MakeID(am)
exptectedMutator := mutationSystem.Get(id)
g.Expect(exptectedMutator).NotTo(gomega.BeNil(), "expected mutator was not found")
expectedMutator := mutationSystem.Get(id)
g.Expect(expectedMutator).NotTo(gomega.BeNil(), "expected mutator was not found")
}
}

func Test_Provider(t *testing.T) {
g := gomega.NewWithT(t)

defer func() {
externalDataEnabled := false
externaldata.ExternalDataEnabled = &externalDataEnabled
}()

externalDataEnabled := true
externaldata.ExternalDataEnabled = &externalDataEnabled

providerCache := frameworksexternaldata.NewCache()

os.Setenv("POD_NAME", "no-pod")
podstatus.DisablePodOwnership()

// Apply fixtures *before* the controllers are setup.
err := applyFixtures("testdata")
g.Expect(err).NotTo(gomega.HaveOccurred(), "applying fixtures")

// Wire up the rest.
mgr, wm := setupManager(t)
opaClient := setupOpa(t)

if err := setupController(mgr, wm, opaClient, nil, providerCache); err != nil {
t.Fatalf("setupControllers: %v", err)
}

ctx, cancelFunc := context.WithCancel(context.Background())
mgrStopped := StartTestManager(ctx, mgr, g)
defer func() {
cancelFunc()
mgrStopped.Wait()
}()

g.Eventually(func() (bool, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
return probeIsReady(ctx)
}, 300*time.Second, 1*time.Second).Should(gomega.BeTrue())

// Verify that the Provider is present in the cache
for _, tp := range testProvider {
entry, err := providerCache.Get(tp.Name)
g.Expect(err).NotTo(gomega.HaveOccurred())

g.Expect(entry.Spec).Should(gomega.Equal(externaldatav1alpha1.ProviderSpec{
URL: "http://demo",
Timeout: 1,
}))
}
}

Expand All @@ -297,7 +359,7 @@ func Test_Tracker(t *testing.T) {
mgr, wm := setupManager(t)
opaClient := setupOpa(t)

if err := setupController(mgr, wm, opaClient, nil); err != nil {
if err := setupController(mgr, wm, opaClient, nil, nil); err != nil {
t.Fatalf("setupControllers: %v", err)
}

Expand Down Expand Up @@ -376,7 +438,7 @@ func Test_Tracker_UnregisteredCachedData(t *testing.T) {
// Wire up the rest.
mgr, wm := setupManager(t)
opaClient := setupOpa(t)
if err := setupController(mgr, wm, opaClient, nil); err != nil {
if err := setupController(mgr, wm, opaClient, nil, nil); err != nil {
t.Fatalf("setupControllers: %v", err)
}

Expand Down
7 changes: 7 additions & 0 deletions pkg/readiness/testdata/99-provider.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
apiVersion: externaldata.gatekeeper.sh/v1alpha1
kind: Provider
metadata:
name: demo
spec:
url: http://demo
timeout: 1
21 changes: 21 additions & 0 deletions pkg/readiness/testdata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ limitations under the License.
package readiness_test

import (
externaldatav1alpha1 "github.com/open-policy-agent/frameworks/constraint/pkg/apis/externaldata/v1alpha1"
"github.com/open-policy-agent/frameworks/constraint/pkg/core/templates"
mutationsv1alpha1 "github.com/open-policy-agent/gatekeeper/apis/mutations/v1alpha1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand Down Expand Up @@ -54,6 +55,10 @@ var testAssign = []*mutationsv1alpha1.Assign{
makeAssign("demo"),
}

var testProvider = []*externaldatav1alpha1.Provider{
makeProvider("demo"),
}

func makeTemplate(name string) *templates.ConstraintTemplate {
return &templates.ConstraintTemplate{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -114,3 +119,19 @@ func makeAssign(name string) *mutationsv1alpha1.Assign {
},
}
}

func makeProvider(name string) *externaldatav1alpha1.Provider {
return &externaldatav1alpha1.Provider{
TypeMeta: metav1.TypeMeta{
APIVersion: "externaldata.gatekeeper.sh/v1alpha1",
Kind: "Provider",
},
ObjectMeta: metav1.ObjectMeta{
Name: name,
},
Spec: externaldatav1alpha1.ProviderSpec{
URL: "http://demo",
Timeout: 1,
},
}
}

0 comments on commit 6634aab

Please sign in to comment.