Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
loki/operator/internal/manifests/query-frontend_test.go

162 lines
3.8 KiB

package manifests
import (
"testing"
v1 "github.com/grafana/loki/operator/apis/config/v1"
lokiv1 "github.com/grafana/loki/operator/apis/loki/v1"
"github.com/stretchr/testify/require"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
)
func TestNewQueryFrontendDeployment_SelectorMatchesLabels(t *testing.T) {
ss := NewQueryFrontendDeployment(Options{
Name: "abcd",
Namespace: "efgh",
Stack: lokiv1.LokiStackSpec{
Template: &lokiv1.LokiTemplateSpec{
QueryFrontend: &lokiv1.LokiComponentSpec{
Replicas: 1,
},
},
},
})
l := ss.Spec.Template.GetObjectMeta().GetLabels()
for key, value := range ss.Spec.Selector.MatchLabels {
require.Contains(t, l, key)
require.Equal(t, l[key], value)
}
}
func TestNewQueryFrontendDeployment_HasTemplateConfigHashAnnotation(t *testing.T) {
ss := NewQueryFrontendDeployment(Options{
Name: "abcd",
Namespace: "efgh",
ConfigSHA1: "deadbeef",
Stack: lokiv1.LokiStackSpec{
Template: &lokiv1.LokiTemplateSpec{
QueryFrontend: &lokiv1.LokiComponentSpec{
Replicas: 1,
},
},
},
})
expected := "loki.grafana.com/config-hash"
annotations := ss.Spec.Template.Annotations
require.Contains(t, annotations, expected)
require.Equal(t, annotations[expected], "deadbeef")
}
func TestConfigureQueryFrontendDeploymentForMode(t *testing.T) {
type tt struct {
desc string
opts *Options
dpl *appsv1.Deployment
want *appsv1.Deployment
}
tc := []tt{
{
desc: "static mode",
opts: &Options{
Stack: lokiv1.LokiStackSpec{
Tenants: &lokiv1.TenantsSpec{
Mode: lokiv1.Static,
},
},
},
dpl: &appsv1.Deployment{},
want: &appsv1.Deployment{},
},
{
desc: "dynamic mode",
opts: &Options{
Stack: lokiv1.LokiStackSpec{
Tenants: &lokiv1.TenantsSpec{
Mode: lokiv1.Dynamic,
},
},
},
dpl: &appsv1.Deployment{},
want: &appsv1.Deployment{},
},
{
desc: "openshift-logging mode",
opts: &Options{
Name: "test",
Namespace: "test-ns",
Stack: lokiv1.LokiStackSpec{
Tenants: &lokiv1.TenantsSpec{
Mode: lokiv1.OpenshiftLogging,
},
},
Gates: v1.FeatureGates{
ServiceMonitorTLSEndpoints: true,
},
},
dpl: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: corev1.PodTemplateSpec{
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Args: []string{
"-target=query-frontend",
},
},
},
},
},
},
},
want: &appsv1.Deployment{
Spec: appsv1.DeploymentSpec{
Template: corev1.PodTemplateSpec{
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Args: []string{
"-target=query-frontend",
"-frontend.tail-proxy-url=https://test-querier-http.test-ns.svc.cluster.local:3100",
"-frontend.tail-tls-config.tls-ca-path=/var/run/ca/service-ca.crt",
},
VolumeMounts: []corev1.VolumeMount{
{
Name: "test-ca-bundle",
ReadOnly: true,
MountPath: "/var/run/ca",
},
},
},
},
Volumes: []corev1.Volume{
{
Name: "test-ca-bundle",
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
DefaultMode: &defaultConfigMapMode,
LocalObjectReference: corev1.LocalObjectReference{
Name: "test-ca-bundle",
},
},
},
},
},
},
},
},
},
},
}
for _, tc := range tc {
tc := tc
t.Run(tc.desc, func(t *testing.T) {
t.Parallel()
err := configureQueryFrontendDeploymentForMode(tc.dpl, tc.opts.Stack.Tenants.Mode, tc.opts)
require.NoError(t, err)
require.Equal(t, tc.want, tc.dpl)
})
}
}