mirror of https://github.com/portainer/portainer
109 lines
4.0 KiB
Go
109 lines
4.0 KiB
Go
package cli
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
corev1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
kfake "k8s.io/client-go/kubernetes/fake"
|
|
)
|
|
|
|
// TestGetEvents tests the GetEvents method
|
|
// It creates a fake Kubernetes client and passes it to the GetEvents method
|
|
// It then logs the fetched events and validated the data returned
|
|
func TestGetEvents(t *testing.T) {
|
|
t.Run("can get events for resource id when admin", func(t *testing.T) {
|
|
kcl := &KubeClient{
|
|
cli: kfake.NewSimpleClientset(),
|
|
instanceID: "instance",
|
|
IsKubeAdmin: true,
|
|
}
|
|
event := corev1.Event{
|
|
InvolvedObject: corev1.ObjectReference{UID: "resourceId"},
|
|
Action: "something",
|
|
ObjectMeta: metav1.ObjectMeta{Namespace: "default", Name: "myEvent"},
|
|
EventTime: metav1.NowMicro(),
|
|
Type: "warning",
|
|
Message: "This event has a very serious warning",
|
|
}
|
|
_, err := kcl.cli.CoreV1().Events("default").Create(context.TODO(), &event, metav1.CreateOptions{})
|
|
if err != nil {
|
|
t.Fatalf("Failed to create Event: %v", err)
|
|
}
|
|
|
|
events, err := kcl.GetEvents("default", "resourceId")
|
|
|
|
if err != nil {
|
|
t.Fatalf("Failed to fetch Cron Jobs: %v", err)
|
|
}
|
|
t.Logf("Fetched Events: %v", events)
|
|
require.Equal(t, 1, len(events), "Expected to return 1 event")
|
|
assert.Equal(t, event.Message, events[0].Message, "Expected Message to be equal to event message created")
|
|
assert.Equal(t, event.Type, events[0].Type, "Expected Type to be equal to event type created")
|
|
assert.Equal(t, event.EventTime.UTC(), events[0].EventTime, "Expected EventTime to be saved as a string from event time created")
|
|
})
|
|
t.Run("can get kubernetes events for non admin namespace when non admin", func(t *testing.T) {
|
|
kcl := &KubeClient{
|
|
cli: kfake.NewSimpleClientset(),
|
|
instanceID: "instance",
|
|
IsKubeAdmin: false,
|
|
NonAdminNamespaces: []string{"nonAdmin"},
|
|
}
|
|
event := corev1.Event{
|
|
InvolvedObject: corev1.ObjectReference{UID: "resourceId"},
|
|
Action: "something",
|
|
ObjectMeta: metav1.ObjectMeta{Namespace: "nonAdmin", Name: "myEvent"},
|
|
EventTime: metav1.NowMicro(),
|
|
Type: "warning",
|
|
Message: "This event has a very serious warning",
|
|
}
|
|
_, err := kcl.cli.CoreV1().Events("nonAdmin").Create(context.TODO(), &event, metav1.CreateOptions{})
|
|
if err != nil {
|
|
t.Fatalf("Failed to create Event: %v", err)
|
|
}
|
|
|
|
events, err := kcl.GetEvents("nonAdmin", "resourceId")
|
|
|
|
if err != nil {
|
|
t.Fatalf("Failed to fetch Cron Jobs: %v", err)
|
|
}
|
|
t.Logf("Fetched Events: %v", events)
|
|
require.Equal(t, 1, len(events), "Expected to return 1 event")
|
|
assert.Equal(t, event.Message, events[0].Message, "Expected Message to be equal to event message created")
|
|
assert.Equal(t, event.Type, events[0].Type, "Expected Type to be equal to event type created")
|
|
assert.Equal(t, event.EventTime.UTC(), events[0].EventTime, "Expected EventTime to be saved as a string from event time created")
|
|
})
|
|
|
|
t.Run("cannot get kubernetes events for admin namespace when non admin", func(t *testing.T) {
|
|
kcl := &KubeClient{
|
|
cli: kfake.NewSimpleClientset(),
|
|
instanceID: "instance",
|
|
IsKubeAdmin: false,
|
|
NonAdminNamespaces: []string{"nonAdmin"},
|
|
}
|
|
event := corev1.Event{
|
|
InvolvedObject: corev1.ObjectReference{UID: "resourceId"},
|
|
Action: "something",
|
|
ObjectMeta: metav1.ObjectMeta{Namespace: "admin", Name: "myEvent"},
|
|
EventTime: metav1.NowMicro(),
|
|
Type: "warning",
|
|
Message: "This event has a very serious warning",
|
|
}
|
|
_, err := kcl.cli.CoreV1().Events("admin").Create(context.TODO(), &event, metav1.CreateOptions{})
|
|
if err != nil {
|
|
t.Fatalf("Failed to create Event: %v", err)
|
|
}
|
|
|
|
events, err := kcl.GetEvents("admin", "resourceId")
|
|
|
|
if err != nil {
|
|
t.Fatalf("Failed to fetch Cron Jobs: %v", err)
|
|
}
|
|
t.Logf("Fetched Events: %v", events)
|
|
assert.Equal(t, 0, len(events), "Expected to return 0 events")
|
|
})
|
|
}
|