Provisioning: Add Standalone Job Controller Without Job Processing (#109610)
* Add standalone job controller * Add makefile * Add limit on the current implementation * Move job controllers to app package * Add TLS flags
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
||||
provisioning "github.com/grafana/grafana/apps/provisioning/pkg/apis/provisioning/v0alpha1"
|
||||
provisioningfake "github.com/grafana/grafana/apps/provisioning/pkg/generated/clientset/versioned/fake"
|
||||
provisioninginformers "github.com/grafana/grafana/apps/provisioning/pkg/generated/informers/externalversions"
|
||||
)
|
||||
|
||||
func TestJobController_New(t *testing.T) {
|
||||
client := provisioningfake.NewSimpleClientset()
|
||||
informerFactory := provisioninginformers.NewSharedInformerFactory(client, time.Second)
|
||||
jobInformer := informerFactory.Provisioning().V0alpha1().Jobs()
|
||||
|
||||
controller, err := NewJobController(jobInformer)
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, controller)
|
||||
assert.NotNil(t, controller.notifications)
|
||||
}
|
||||
|
||||
func TestJobController_InsertNotifications(t *testing.T) {
|
||||
client := provisioningfake.NewSimpleClientset()
|
||||
informerFactory := provisioninginformers.NewSharedInformerFactory(client, time.Second)
|
||||
jobInformer := informerFactory.Provisioning().V0alpha1().Jobs()
|
||||
|
||||
controller, err := NewJobController(jobInformer)
|
||||
require.NoError(t, err)
|
||||
|
||||
notifications := controller.InsertNotifications()
|
||||
assert.NotNil(t, notifications)
|
||||
|
||||
// Test that notification is sent
|
||||
controller.sendNotification()
|
||||
|
||||
select {
|
||||
case <-notifications:
|
||||
// Success - notification received
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("Expected notification but didn't receive one")
|
||||
}
|
||||
}
|
||||
|
||||
func TestJobController_NotificationOnJobCreate(t *testing.T) {
|
||||
client := provisioningfake.NewSimpleClientset()
|
||||
informerFactory := provisioninginformers.NewSharedInformerFactory(client, time.Second)
|
||||
jobInformer := informerFactory.Provisioning().V0alpha1().Jobs()
|
||||
|
||||
controller, err := NewJobController(jobInformer)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Start informer and wait for cache sync
|
||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
|
||||
defer cancel()
|
||||
|
||||
informerFactory.Start(ctx.Done())
|
||||
informerFactory.WaitForCacheSync(ctx.Done())
|
||||
|
||||
// Get notifications channel
|
||||
notifications := controller.InsertNotifications()
|
||||
|
||||
// Create a job - this should trigger a notification
|
||||
_, err = client.ProvisioningV0alpha1().Jobs("default").Create(ctx, &provisioning.Job{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test-job",
|
||||
Namespace: "default",
|
||||
},
|
||||
}, metav1.CreateOptions{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Wait for notification
|
||||
select {
|
||||
case <-notifications:
|
||||
// Success - notification received
|
||||
case <-time.After(time.Second * 2):
|
||||
t.Fatal("Expected notification but didn't receive one")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user