|
|
@ -9,6 +9,7 @@ import ( |
|
|
|
"github.com/ViaQ/logerr/log" |
|
|
|
"github.com/ViaQ/logerr/log" |
|
|
|
lokiv1beta1 "github.com/ViaQ/loki-operator/api/v1beta1" |
|
|
|
lokiv1beta1 "github.com/ViaQ/loki-operator/api/v1beta1" |
|
|
|
"github.com/ViaQ/loki-operator/internal/external/k8s/k8sfakes" |
|
|
|
"github.com/ViaQ/loki-operator/internal/external/k8s/k8sfakes" |
|
|
|
|
|
|
|
"github.com/ViaQ/loki-operator/internal/manifests" |
|
|
|
routev1 "github.com/openshift/api/route/v1" |
|
|
|
routev1 "github.com/openshift/api/route/v1" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
"github.com/stretchr/testify/require" |
|
|
|
|
|
|
|
|
|
|
@ -70,65 +71,82 @@ func TestLokiStackController_RegistersCustomResourceForCreateOrUpdate(t *testing |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func TestLokiStackController_RegisterOwnedResourcesForUpdateOrDeleteOnly(t *testing.T) { |
|
|
|
func TestLokiStackController_RegisterOwnedResourcesForUpdateOrDeleteOnly(t *testing.T) { |
|
|
|
b := &k8sfakes.FakeBuilder{} |
|
|
|
|
|
|
|
k := &k8sfakes.FakeClient{} |
|
|
|
k := &k8sfakes.FakeClient{} |
|
|
|
c := &LokiStackReconciler{Client: k, Scheme: scheme} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b.ForReturns(b) |
|
|
|
|
|
|
|
b.OwnsReturns(b) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
err := c.buildController(b) |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Require Owns-Calls for all owned resources
|
|
|
|
|
|
|
|
require.Equal(t, 9, b.OwnsCallCount()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Require owned resources
|
|
|
|
// Require owned resources
|
|
|
|
type test struct { |
|
|
|
type test struct { |
|
|
|
obj client.Object |
|
|
|
obj client.Object |
|
|
|
pred builder.OwnsOption |
|
|
|
index int |
|
|
|
|
|
|
|
flags manifests.FeatureFlags |
|
|
|
|
|
|
|
pred builder.OwnsOption |
|
|
|
} |
|
|
|
} |
|
|
|
table := []test{ |
|
|
|
table := []test{ |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &corev1.ConfigMap{}, |
|
|
|
obj: &corev1.ConfigMap{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 0, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &corev1.ServiceAccount{}, |
|
|
|
obj: &corev1.ServiceAccount{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 1, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &corev1.Service{}, |
|
|
|
obj: &corev1.Service{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 2, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &appsv1.Deployment{}, |
|
|
|
obj: &appsv1.Deployment{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 3, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &appsv1.StatefulSet{}, |
|
|
|
obj: &appsv1.StatefulSet{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 4, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &rbacv1.ClusterRole{}, |
|
|
|
obj: &rbacv1.ClusterRole{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 5, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &rbacv1.ClusterRoleBinding{}, |
|
|
|
obj: &rbacv1.ClusterRoleBinding{}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
index: 6, |
|
|
|
|
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &networkingv1.Ingress{}, |
|
|
|
obj: &networkingv1.Ingress{}, |
|
|
|
|
|
|
|
index: 7, |
|
|
|
|
|
|
|
flags: manifests.FeatureFlags{ |
|
|
|
|
|
|
|
EnableGatewayRoute: false, |
|
|
|
|
|
|
|
}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
{ |
|
|
|
{ |
|
|
|
obj: &routev1.Route{}, |
|
|
|
obj: &routev1.Route{}, |
|
|
|
|
|
|
|
index: 7, |
|
|
|
|
|
|
|
flags: manifests.FeatureFlags{ |
|
|
|
|
|
|
|
EnableGatewayRoute: true, |
|
|
|
|
|
|
|
}, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
pred: updateOrDeleteOnlyPred, |
|
|
|
}, |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
for i, tst := range table { |
|
|
|
for _, tst := range table { |
|
|
|
|
|
|
|
b := &k8sfakes.FakeBuilder{} |
|
|
|
|
|
|
|
b.ForReturns(b) |
|
|
|
|
|
|
|
b.OwnsReturns(b) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c := &LokiStackReconciler{Client: k, Scheme: scheme, Flags: tst.flags} |
|
|
|
|
|
|
|
err := c.buildController(b) |
|
|
|
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Require Owns-Calls for all owned resources
|
|
|
|
|
|
|
|
require.Equal(t, 8, b.OwnsCallCount()) |
|
|
|
|
|
|
|
|
|
|
|
// Require Owns-call options to have delete predicate only
|
|
|
|
// Require Owns-call options to have delete predicate only
|
|
|
|
obj, opts := b.OwnsArgsForCall(i) |
|
|
|
obj, opts := b.OwnsArgsForCall(tst.index) |
|
|
|
require.Equal(t, tst.obj, obj) |
|
|
|
require.Equal(t, tst.obj, obj) |
|
|
|
require.Equal(t, tst.pred, opts[0]) |
|
|
|
require.Equal(t, tst.pred, opts[0]) |
|
|
|
} |
|
|
|
} |
|
|
|