Skip to content

Commit

Permalink
Switch to generic functions
Browse files Browse the repository at this point in the history
  • Loading branch information
arybolovlev committed Jan 8, 2024
1 parent 74d6e59 commit 464b76a
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 127 deletions.
12 changes: 0 additions & 12 deletions api/v1alpha2/project_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,6 @@

package v1alpha2

import (
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)

func (p *Project) NeedToAddFinalizer(finalizer string) bool {
return p.ObjectMeta.DeletionTimestamp.IsZero() && !controllerutil.ContainsFinalizer(p, finalizer)
}

func (p *Project) IsDeletionCandidate(finalizer string) bool {
return !p.ObjectMeta.DeletionTimestamp.IsZero() && controllerutil.ContainsFinalizer(p, finalizer)
}

func (p *Project) IsCreationCandidate() bool {
return p.Status.ID == ""
}
113 changes: 0 additions & 113 deletions api/v1alpha2/project_helpers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,125 +5,12 @@ package v1alpha2

import (
"testing"
"time"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

const (
projectFinalizer = "project.app.terraform.io/finalizer"
)

func TestNeedToAddFinalizer(t *testing.T) {
t.Parallel()

cases := map[string]struct {
project Project
expected bool
}{
"HasFinalizerDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: &metav1.Time{Time: time.Now()},
Finalizers: []string{projectFinalizer},
},
},
false,
},
"HasFinalizerNoDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: nil,
Finalizers: []string{projectFinalizer},
},
},
false,
},
"DoesNotHaveFinalizerDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: &metav1.Time{Time: time.Now()},
Finalizers: []string{},
},
},
false,
},
"DoesNotHaveFinalizerNoDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: nil,
Finalizers: []string{},
},
},
true,
},
}

for n, c := range cases {
t.Run(n, func(t *testing.T) {
out := c.project.NeedToAddFinalizer(projectFinalizer)
if out != c.expected {
t.Fatalf("Error matching output and expected: %#v vs %#v", out, c.expected)
}
})
}
}

func TestIsDeletionCandidate(t *testing.T) {
t.Parallel()

cases := map[string]struct {
project Project
expected bool
}{
"HasFinalizerDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: &metav1.Time{Time: time.Now()},
Finalizers: []string{projectFinalizer},
},
},
true,
},
"HasFinalizerNoDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: nil,
Finalizers: []string{projectFinalizer},
},
},
false,
},
"DoesNotHaveFinalizerDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: &metav1.Time{Time: time.Now()},
Finalizers: []string{},
},
},
false,
},
"DoesNotHaveFinalizerNoDeletionTimestamp": {
Project{
ObjectMeta: metav1.ObjectMeta{
DeletionTimestamp: nil,
Finalizers: []string{},
},
},
false,
},
}

for n, c := range cases {
t.Run(n, func(t *testing.T) {
out := c.project.IsDeletionCandidate(projectFinalizer)
if out != c.expected {
t.Fatalf("Error matching output and expected: %#v vs %#v", out, c.expected)
}
})
}
}

func TestIsCreationCandidate(t *testing.T) {
t.Parallel()

Expand Down
4 changes: 2 additions & 2 deletions controllers/project_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func (r *ProjectReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
}
p.log.Info("Spec Validation", "msg", "spec is valid")

if p.instance.NeedToAddFinalizer(projectFinalizer) {
if needToAddFinalizer(&p.instance, projectFinalizer) {
err := r.addFinalizer(ctx, &p.instance)
if err != nil {
p.log.Error(err, "Project Controller", "msg", fmt.Sprintf("failed to add finalizer %s to the object", projectFinalizer))
Expand Down Expand Up @@ -299,7 +299,7 @@ func (r *ProjectReconciler) reconcileProject(ctx context.Context, p *projectInst
}()

// verify whether the Kubernetes object has been marked as deleted and if so delete the project
if p.instance.IsDeletionCandidate(projectFinalizer) {
if isDeletionCandidate(&p.instance, projectFinalizer) {
p.log.Info("Reconcile Project", "msg", "object marked as deleted, need to delete project first")
r.Recorder.Event(&p.instance, corev1.EventTypeNormal, "ReconcileProject", "Object marked as deleted, need to delete project first")
return r.deleteProject(ctx, p)
Expand Down

0 comments on commit 464b76a

Please sign in to comment.