Skip to content
This repository has been archived by the owner on Jun 19, 2022. It is now read-only.

Commit

Permalink
More UTs
Browse files Browse the repository at this point in the history
  • Loading branch information
grac3gao committed Dec 22, 2020
1 parent 1ff9dd1 commit a654a7a
Show file tree
Hide file tree
Showing 4 changed files with 366 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ func (r *Reconciler) ReconcileScaledObject(ctx context.Context, ra *appsv1.Deplo
}

// If deployment has replicaUnavailable error, it potentially has authentication configuration issues.
// If deployment has authentication configuration issues, directly return the status and stop reconciling the ScaledObject.
if replicaAvailable := src.Status.PropagateDeploymentAvailability(existing); !replicaAvailable {
podList, err := authcheck.GetPodList(ctx, psresources.GetLabelSelector(r.ControllerAgentName, src.Name), r.KubeClientSet, src.Namespace)
if err != nil {
Expand All @@ -114,6 +115,7 @@ func (r *Reconciler) ReconcileScaledObject(ctx context.Context, ra *appsv1.Deplo
if authenticationCheckMessage := authcheck.GetTerminationLogFromPodList(podList); authenticationCheckMessage != "" {
src.Status.MarkDeployedUnknown(authcheck.AuthenticationCheckUnknownReason, authenticationCheckMessage)
}
return nil
}

// Now we reconcile the ScaledObject.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -979,6 +979,173 @@ func TestAllCases(t *testing.T) {
PostConditions: []func(*testing.T, *TableRow){
OnlySubscriptions(testSubscriptionID),
},
}, {
Name: "propagate availability adapter with termination log message",
Objects: []runtime.Object{
reconcilertestingv1.NewPullSubscription(sourceName, testNS,
reconcilertestingv1.WithPullSubscriptionUID(sourceUID),
reconcilertestingv1.WithPullSubscriptionObjectMetaGeneration(generation),
reconcilertestingv1.WithPullSubscriptionSpec(pubsubv1.PullSubscriptionSpec{
PubSubSpec: gcpduckv1.PubSubSpec{
Secret: &secret,
Project: testProject,
},
Topic: testTopicID,
}),
reconcilertestingv1.WithPullSubscriptionSink(sinkGVK, sinkName),
reconcilertestingv1.WithPullSubscriptionTransformer(transformerGVK, transformerName),
reconcilertestingv1.WithPullSubscriptionSetDefaults,
),
newSink(),
newTransformer(),
newSecret(),
newMinimumReplicasUnavailableAdapter(context.Background(), "old"+testImage, nil),
&corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod-1",
Namespace: testNS,
Labels: resources.GetLabels(controllerAgentName, sourceName),
},
Status: corev1.PodStatus{
ContainerStatuses: []corev1.ContainerStatus{{
LastTerminationState: corev1.ContainerState{
Terminated: &corev1.ContainerStateTerminated{
Message: "checking authentication",
},
}}},
},
},
},
OtherTestData: map[string]interface{}{
"pre": []PubsubAction{
Topic(testTopicID),
},
},
Key: testNS + "/" + sourceName,
WantEvents: []string{
Eventf(corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", sourceName),
Eventf(corev1.EventTypeNormal, "PullSubscriptionReconciled", `PullSubscription reconciled: "%s/%s"`, testNS, sourceName),
},
WantUpdates: []clientgotesting.UpdateActionImpl{{
ActionImpl: clientgotesting.ActionImpl{
Namespace: testNS,
Verb: "update",
Resource: receiveAdapterGVR(),
},
Object: newMinimumReplicasUnavailableAdapter(context.Background(), testImage, transformerURI),
}},
WantPatches: []clientgotesting.PatchActionImpl{
patchFinalizers(testNS, sourceName, resourceGroup),
},
WantStatusUpdates: []clientgotesting.UpdateActionImpl{{
Object: reconcilertestingv1.NewPullSubscription(sourceName, testNS,
reconcilertestingv1.WithPullSubscriptionUID(sourceUID),
reconcilertestingv1.WithPullSubscriptionObjectMetaGeneration(generation),
reconcilertestingv1.WithPullSubscriptionSpec(pubsubv1.PullSubscriptionSpec{
PubSubSpec: gcpduckv1.PubSubSpec{
Secret: &secret,
Project: testProject,
},
Topic: testTopicID,
}),
reconcilertestingv1.WithInitPullSubscriptionConditions,
reconcilertestingv1.WithPullSubscriptionProjectID(testProject),
reconcilertestingv1.WithPullSubscriptionSink(sinkGVK, sinkName),
reconcilertestingv1.WithPullSubscriptionTransformer(transformerGVK, transformerName),
reconcilertestingv1.WithPullSubscriptionMarkSubscribed(testSubscriptionID),
reconcilertestingv1.WithPullSubscriptionMarkDeployedUnknown("AuthenticationCheckPending", "checking authentication"),
reconcilertestingv1.WithPullSubscriptionMarkSink(sinkURI),
reconcilertestingv1.WithPullSubscriptionMarkTransformer(transformerURI),
reconcilertestingv1.WithPullSubscriptionStatusObservedGeneration(generation),
reconcilertestingv1.WithPullSubscriptionSetDefaults,
),
}},
PostConditions: []func(*testing.T, *TableRow){
OnlySubscriptions(testSubscriptionID),
},
}, {
Name: "propagate availability adapter with mount failure message",
Objects: []runtime.Object{
reconcilertestingv1.NewPullSubscription(sourceName, testNS,
reconcilertestingv1.WithPullSubscriptionUID(sourceUID),
reconcilertestingv1.WithPullSubscriptionObjectMetaGeneration(generation),
reconcilertestingv1.WithPullSubscriptionSpec(pubsubv1.PullSubscriptionSpec{
PubSubSpec: gcpduckv1.PubSubSpec{
Secret: &secret,
Project: testProject,
},
Topic: testTopicID,
}),
reconcilertestingv1.WithPullSubscriptionSink(sinkGVK, sinkName),
reconcilertestingv1.WithPullSubscriptionTransformer(transformerGVK, transformerName),
reconcilertestingv1.WithPullSubscriptionSetDefaults,
),
newSink(),
newTransformer(),
newSecret(),
newMinimumReplicasUnavailableAdapter(context.Background(), "old"+testImage, nil),
&corev1.Event{
ObjectMeta: metav1.ObjectMeta{
Name: "event-1",
Namespace: testNS,
},
Message: "couldn't find key testing-key in Secret testnamespace/testing-secret",
},
&corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: "pod-1",
Namespace: testNS,
Labels: resources.GetLabels(controllerAgentName, sourceName),
},
},
},
OtherTestData: map[string]interface{}{
"pre": []PubsubAction{
Topic(testTopicID),
},
},
Key: testNS + "/" + sourceName,
WantEvents: []string{
Eventf(corev1.EventTypeNormal, "FinalizerUpdate", "Updated %q finalizers", sourceName),
Eventf(corev1.EventTypeNormal, "PullSubscriptionReconciled", `PullSubscription reconciled: "%s/%s"`, testNS, sourceName),
},
WantUpdates: []clientgotesting.UpdateActionImpl{{
ActionImpl: clientgotesting.ActionImpl{
Namespace: testNS,
Verb: "update",
Resource: receiveAdapterGVR(),
},
Object: newMinimumReplicasUnavailableAdapter(context.Background(), testImage, transformerURI),
}},
WantPatches: []clientgotesting.PatchActionImpl{
patchFinalizers(testNS, sourceName, resourceGroup),
},
WantStatusUpdates: []clientgotesting.UpdateActionImpl{{
Object: reconcilertestingv1.NewPullSubscription(sourceName, testNS,
reconcilertestingv1.WithPullSubscriptionUID(sourceUID),
reconcilertestingv1.WithPullSubscriptionObjectMetaGeneration(generation),
reconcilertestingv1.WithPullSubscriptionSpec(pubsubv1.PullSubscriptionSpec{
PubSubSpec: gcpduckv1.PubSubSpec{
Secret: &secret,
Project: testProject,
},
Topic: testTopicID,
}),
reconcilertestingv1.WithInitPullSubscriptionConditions,
reconcilertestingv1.WithPullSubscriptionProjectID(testProject),
reconcilertestingv1.WithPullSubscriptionSink(sinkGVK, sinkName),
reconcilertestingv1.WithPullSubscriptionTransformer(transformerGVK, transformerName),
reconcilertestingv1.WithPullSubscriptionMarkSubscribed(testSubscriptionID),
reconcilertestingv1.WithPullSubscriptionMarkDeployedUnknown("AuthenticationCheckPending", "couldn't find key testing-key in Secret testnamespace/testing-secret"),
reconcilertestingv1.WithPullSubscriptionMarkSink(sinkURI),
reconcilertestingv1.WithPullSubscriptionMarkTransformer(transformerURI),
reconcilertestingv1.WithPullSubscriptionStatusObservedGeneration(generation),
reconcilertestingv1.WithPullSubscriptionSetDefaults,
),
}},
PostConditions: []func(*testing.T, *TableRow){
OnlySubscriptions(testSubscriptionID),
},
}, {
Name: "successfully deleted subscription",
Objects: []runtime.Object{
Expand Down Expand Up @@ -1116,6 +1283,14 @@ func newReceiveAdapter(ctx context.Context, image string, transformer *apis.URL)
return resources.MakeReceiveAdapter(ctx, args)
}

// newMinimumReplicasUnavailableAdapter is the adapter based on keda configurations.
func newMinimumReplicasUnavailableAdapter(ctx context.Context, image string, transformer *apis.URL) runtime.Object {
obj := newReceiveAdapter(ctx, image, transformer)
ra := obj.(*v1.Deployment)
WithDeploymentMinimumReplicasUnavailable()(ra)
return obj
}

func newAvailableReceiveAdapter(ctx context.Context, image string, transformer *apis.URL) runtime.Object {
obj := newReceiveAdapter(ctx, image, transformer)
ra := obj.(*v1.Deployment)
Expand Down
Loading

0 comments on commit a654a7a

Please sign in to comment.