Skip to content

Commit

Permalink
Fix/controller tests (#41)
Browse files Browse the repository at this point in the history
* chore: reenable tests

* fix: Wrap get in eventually

* Fix: Found the culprits Eventually

* chore: Add empty readme

* chore: fix issues with golangcilint

Signed-off-by: Lennard Eijsackers <lennardeijsackers92@gmail.com>

* fix: Manually install kubebuilder from correct URL. see: kubernetes-sigs/kubebuilder#2311

Signed-off-by: Lennard Eijsackers <lennardeijsackers92@gmail.com>
  • Loading branch information
Blokje5 committed Aug 23, 2021
1 parent 2be54e5 commit f1f8875
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 65 deletions.
8 changes: 5 additions & 3 deletions .github/workflows/branch.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ jobs:
- name: Setup GO
uses: actions/setup-go@v2
- name: Install Kubebuilder
uses: RyanSiu1995/kubebuilder-action@v1.2
with:
version: 2.3.1
run: |
os=$(go env GOOS)
arch=$(go env GOARCH)
curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/v2.3.1/kubebuilder_2.3.1_${os}_${arch}.tar.gz | tar -xz -C /tmp/
sudo mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder
- name: Run Tests
run: make test
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# KubeETL
111 changes: 58 additions & 53 deletions controllers/dataset_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,56 +18,6 @@ import (
var _ = Describe("DataSetReconciler", func() {
const timeout = time.Second * 5
const interval = time.Second * 1
var wfKey types.NamespacedName
var argoWfKey types.NamespacedName
var argoWf wfv1.Workflow

BeforeEach(func() {
ctx := context.Background()

wfKey = types.NamespacedName{
Name: "default-workflow",
Namespace: "default",
}

wfSpec := api.WorkflowSpec{
ArgoWorkflowSpec: wfv1.WorkflowSpec{},
}

wf := api.Workflow{
ObjectMeta: metav1.ObjectMeta{
Name: wfKey.Name,
Namespace: wfKey.Namespace,
},
Spec: wfSpec,
}

Expect(k8sClient.Create(ctx, &wf)).Should(Succeed())

argoWfKey = types.NamespacedName{
Name: "default-argo-workflow",
Namespace: "default",
}
argoWfSpec := wfv1.WorkflowSpec{}

argoWf = wfv1.Workflow{
ObjectMeta: metav1.ObjectMeta{
Name: argoWfKey.Name,
Namespace: argoWfKey.Namespace,
},
Spec: argoWfSpec,
}
Expect(k8sClient.Create(ctx, &argoWf)).Should(Succeed())
})

AfterEach(func() {
var wf api.Workflow
ctx := context.Background()
Expect(k8sClient.Get(ctx, wfKey, &wf)).Should(Succeed())
Expect(k8sClient.Delete(ctx, &wf)).Should(Succeed())
Expect(k8sClient.Get(ctx, argoWfKey, &argoWf)).Should(Succeed())
Expect(k8sClient.Delete(ctx, &argoWf)).Should(Succeed())
})

Context("DataSet with Unknown HealthCheck", func() {
It("Should set DataSet health to Unknown for a unknown Workflow", func() {
Expand Down Expand Up @@ -111,6 +61,57 @@ var _ = Describe("DataSetReconciler", func() {
})

Context("Dataset with Known HealthCheck", func() {
var wfKey types.NamespacedName
var argoWfKey types.NamespacedName
var argoWf wfv1.Workflow

BeforeEach(func() {
ctx := context.Background()

wfKey = types.NamespacedName{
Name: "default-workflow",
Namespace: "default",
}

wfSpec := api.WorkflowSpec{
ArgoWorkflowSpec: wfv1.WorkflowSpec{},
}

wf := api.Workflow{
ObjectMeta: metav1.ObjectMeta{
Name: wfKey.Name,
Namespace: wfKey.Namespace,
},
Spec: wfSpec,
}

Expect(k8sClient.Create(ctx, &wf)).Should(Succeed())

argoWfKey = types.NamespacedName{
Name: "default-argo-workflow",
Namespace: "default",
}
argoWfSpec := wfv1.WorkflowSpec{}

argoWf = wfv1.Workflow{
ObjectMeta: metav1.ObjectMeta{
Name: argoWfKey.Name,
Namespace: argoWfKey.Namespace,
},
Spec: argoWfSpec,
}
Expect(k8sClient.Create(ctx, &argoWf)).Should(Succeed())
})

AfterEach(func() {
var wf api.Workflow
ctx := context.Background()
Expect(k8sClient.Get(ctx, wfKey, &wf)).Should(Succeed())
Expect(k8sClient.Delete(ctx, &wf)).Should(Succeed())
Expect(k8sClient.Get(ctx, argoWfKey, &argoWf)).Should(Succeed())
Expect(k8sClient.Delete(ctx, &argoWf)).Should(Succeed())
})

It("Should use an existing Workflow as DataSet healthcheck indicator", func() {
ctx := context.Background()
key := types.NamespacedName{
Expand Down Expand Up @@ -138,22 +139,26 @@ var _ = Describe("DataSetReconciler", func() {
Expect(k8sClient.Create(ctx, &created)).Should(Succeed())

By("Setting the DataSet Healthcheck label on the WorkFlow")
EventuallyWithOffset(5, func() bool {
Eventually(func() bool {
res := &api.Workflow{}
err := k8sClient.Get(ctx, wfKey, res)
if err != nil {
return false
}

return labels.HasLabel(res.Labels, healthcheckLabel)
}, timeout, interval)
}, timeout, interval).Should(BeTrue())

By("Updating the status if the workflow executed")
// First fake Workflow controller behaviour
argoWf.Status.Phase = wfv1.NodeFailed
wf := &api.Workflow{}
Expect(k8sClient.Update(ctx, &argoWf)).Should(Succeed())
Expect(k8sClient.Get(ctx, wfKey, wf)).Should(Succeed())

Eventually(func() bool {
err := k8sClient.Get(ctx, wfKey, wf)
return err == nil
}).Should(BeTrue())
wf.Status.ArgoWorkflowRef = &corev1.ObjectReference{
Name: argoWfKey.Name,
Namespace: argoWfKey.Namespace,
Expand Down
20 changes: 11 additions & 9 deletions controllers/suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,18 @@ limitations under the License.
package controllers

import (
"path/filepath"
"testing"

wfv1 "github.com/argoproj/argo/v2/pkg/apis/workflow/v1alpha1"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/rest"
"path/filepath"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/envtest"
"sigs.k8s.io/controller-runtime/pkg/envtest/printer"
"sigs.k8s.io/controller-runtime/pkg/log/zap"

apiv1alpha1 "github.com/dataworkz/kubeetl/api/v1alpha1"
Expand All @@ -35,14 +38,13 @@ var cfg *rest.Config
var k8sClient client.Client
var testEnv *envtest.Environment

// TODO: commented because test are failing
//func TestAPIs(t *testing.T) {
// RegisterFailHandler(Fail)
//
// RunSpecsWithDefaultAndCustomReporters(t,
// "Controller Suite",
// []Reporter{printer.NewlineReporter{}})
//}
func TestAPIs(t *testing.T) {
RegisterFailHandler(Fail)

RunSpecsWithDefaultAndCustomReporters(t,
"Controller Suite",
[]Reporter{printer.NewlineReporter{}})
}

var _ = BeforeSuite(func(done Done) {
ctrl.SetLogger(zap.New(zap.UseDevMode(true), zap.WriteTo(GinkgoWriter)))
Expand Down

0 comments on commit f1f8875

Please sign in to comment.