mirror of
https://github.com/resmoio/kubernetes-event-exporter.git
synced 2026-08-24 01:06:22 +00:00
358 lines
6.6 KiB
Go
358 lines
6.6 KiB
Go
package exporter
|
|
|
|
import (
|
|
"github.com/opsgenie/kubernetes-event-exporter/pkg/kube"
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func TestEmptyRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
var r Rule
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestBasicRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "kube-system"
|
|
r := Rule{
|
|
Namespace: "kube-system",
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestBasicNoMatchRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "default"
|
|
r := Rule{
|
|
Namespace: "kube-system",
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestBasicRegexRule(t *testing.T) {
|
|
ev1 := &kube.EnhancedEvent{}
|
|
ev1.Namespace = "kube-system"
|
|
|
|
ev2 := &kube.EnhancedEvent{}
|
|
ev2.Namespace = "kube-public"
|
|
|
|
ev3 := &kube.EnhancedEvent{}
|
|
ev3.Namespace = "default"
|
|
|
|
r := Rule{
|
|
Namespace: "kube-*",
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev1))
|
|
assert.True(t, r.MatchesEvent(ev2))
|
|
assert.False(t, r.MatchesEvent(ev3))
|
|
}
|
|
|
|
func TestLabelRegexRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"version": "alpha-123",
|
|
}
|
|
|
|
r := Rule{
|
|
Labels: map[string]string{
|
|
"version": "alpha",
|
|
},
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestOneLabelMatchesRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
}
|
|
|
|
r := Rule{
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
},
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestOneLabelDoesNotMatchRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "lab",
|
|
}
|
|
|
|
r := Rule{
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestTwoLabelMatchesRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "beta",
|
|
}
|
|
|
|
r := Rule{
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "beta",
|
|
},
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestTwoLabelRequiredRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
}
|
|
|
|
r := Rule{
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "beta",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestTwoLabelRequiredOneMissingRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"age": "very-old",
|
|
"version": "beta",
|
|
}
|
|
|
|
r := Rule{
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "beta",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestOneAnnotationMatchesRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Annotations = map[string]string{
|
|
"name": "source",
|
|
"service": "event-exporter",
|
|
}
|
|
|
|
r := Rule{
|
|
Annotations: map[string]string{
|
|
"name": "sou*",
|
|
},
|
|
}
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestOneAnnotationDoesNotMatchRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Annotations = map[string]string{
|
|
"name": "source",
|
|
}
|
|
|
|
r := Rule{
|
|
Annotations: map[string]string{
|
|
"name": "test*",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestTwoAnnotationsMatchesRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Annotations = map[string]string{
|
|
"name": "source",
|
|
"service": "event-exporter",
|
|
}
|
|
|
|
r := Rule{
|
|
Annotations: map[string]string{
|
|
"name": "sou.*",
|
|
"service": "event*",
|
|
},
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestTwoAnnotationsRequiredOneMissingRule(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Annotations = map[string]string{
|
|
"service": "event-exporter",
|
|
}
|
|
|
|
r := Rule{
|
|
Annotations: map[string]string{
|
|
"name": "sou*",
|
|
"service": "event*",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestComplexRuleNoMatch(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
}
|
|
|
|
r := Rule{
|
|
Namespace: "kube-system",
|
|
Type: "Warning",
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestComplexRuleMatches(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "kube-system"
|
|
ev.InvolvedObject.Kind = "Pod"
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
}
|
|
ev.InvolvedObject.Annotations = map[string]string{
|
|
"service": "event-exporter",
|
|
}
|
|
|
|
r := Rule{
|
|
Namespace: "kube-system",
|
|
Kind: "Pod",
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
},
|
|
Annotations: map[string]string{
|
|
"service": "event*",
|
|
},
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestComplexRuleAnnotationsNoMatch(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "kube-system"
|
|
ev.InvolvedObject.Kind = "Pod"
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
}
|
|
ev.InvolvedObject.Annotations = map[string]string{
|
|
"service": "event*",
|
|
}
|
|
|
|
r := Rule{
|
|
Namespace: "kube-system",
|
|
Kind: "Pod",
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
},
|
|
Annotations: map[string]string{
|
|
"name": "test*",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestComplexRuleMatchesRegexp(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "kube-system"
|
|
ev.InvolvedObject.Kind = "Pod"
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
}
|
|
|
|
r := Rule{
|
|
Namespace: "kube*",
|
|
Kind: "Po*",
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha|beta",
|
|
},
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestComplexRuleNoMatchRegexp(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "kube-system"
|
|
ev.Type = "Pod"
|
|
ev.InvolvedObject.Labels = map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha",
|
|
}
|
|
|
|
r := Rule{
|
|
Namespace: "kube*",
|
|
Type: "Deployment|ReplicaSet",
|
|
Labels: map[string]string{
|
|
"env": "prod",
|
|
"version": "alpha|beta",
|
|
},
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestMessageRegexp(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "default"
|
|
ev.Type = "Pod"
|
|
ev.Message = "Successfully pulled image \"nginx:latest\""
|
|
|
|
r := Rule{
|
|
Type: "Pod",
|
|
Message: "pulled.*nginx.*",
|
|
}
|
|
|
|
assert.True(t, r.MatchesEvent(ev))
|
|
}
|
|
|
|
func TestCount(t *testing.T) {
|
|
ev := &kube.EnhancedEvent{}
|
|
ev.Namespace = "default"
|
|
ev.Type = "Pod"
|
|
ev.Message = "Successfully pulled image \"nginx:latest\""
|
|
ev.Count = 5
|
|
|
|
r := Rule{
|
|
Type: "Pod",
|
|
Message: "pulled.*nginx.*",
|
|
MinCount: 30,
|
|
}
|
|
|
|
assert.False(t, r.MatchesEvent(ev))
|
|
}
|