1
0
mirror of https://github.com/coreos/prometheus-operator.git synced 2026-02-05 15:46:31 +01:00
Files
prometheus-operator/test/e2e/scrapeconfig_test.go
Simon Pasquier 8116f769c1 chore: update documentation for the 'scheme' field
This commit also clarifies the meaning of the 'url' field in the Prober
spec which isn't a "true" URL.

Signed-off-by: Simon Pasquier <spasquie@redhat.com>
2025-10-10 16:09:57 +02:00

5012 lines
123 KiB
Go

// Copyright 2023 The prometheus-operator Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package e2e
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
v1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/utils/ptr"
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
monitoringv1alpha1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1alpha1"
)
// testScrapeConfigCreation tests multiple ScrapeConfig definitions.
func testScrapeConfigCreation(t *testing.T) {
skipPrometheusTests(t)
t.Parallel()
fiveMins := monitoringv1.Duration("5m")
tests := []struct {
name string
spec monitoringv1alpha1.ScrapeConfigSpec
expectedError bool
}{
{
name: "empty-scrape-config",
spec: monitoringv1alpha1.ScrapeConfigSpec{},
},
{
name: "static-config",
spec: monitoringv1alpha1.ScrapeConfigSpec{
StaticConfigs: []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"target1:9090", "target2:9090"},
Labels: map[string]string{
"label1": "value1",
"label2": "value2",
},
},
},
},
},
{
name: "http-sd-config",
spec: monitoringv1alpha1.ScrapeConfigSpec{
HTTPSDConfigs: []monitoringv1alpha1.HTTPSDConfig{
{
URL: "http://localhost:8080/file.json",
RefreshInterval: &fiveMins,
},
},
},
},
{
name: "file-sd-config",
spec: monitoringv1alpha1.ScrapeConfigSpec{
FileSDConfigs: []monitoringv1alpha1.FileSDConfig{
{
Files: []monitoringv1alpha1.SDFile{
"/etc/prometheus/sd/file.json",
"/etc/prometheus/sd/file.yaml",
},
RefreshInterval: &fiveMins,
},
},
},
},
{
name: "kubernetes-sd-config-node-role",
spec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: monitoringv1alpha1.KubernetesRoleNode,
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Label: ptr.To("component=executor"),
},
},
},
},
},
},
{
name: "dns-sd-config",
spec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{
"demo.do.prometheus.io",
},
RefreshInterval: &fiveMins,
Type: ptr.To(monitoringv1alpha1.DNSRecordType("A")),
Port: ptr.To(int32(9100)),
},
},
},
},
{
name: "invalid-dns-sd-config-with-empty-name",
spec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{""},
RefreshInterval: &fiveMins,
Type: ptr.To(monitoringv1alpha1.DNSRecordType("A")),
Port: ptr.To(int32(9100)),
},
},
},
expectedError: true,
},
{
name: "invalid-scaleway-sd-config-with-empty-tagfilter",
spec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
AccessKey: "ak",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
TagsFilter: []string{}, // empty
},
},
},
expectedError: true,
},
{
name: "invalid-scaleway-sd-config-with-empty-string-tagfilter",
spec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
AccessKey: "ak",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
TagsFilter: []string{""},
},
},
},
expectedError: true,
},
{
name: "invalid-scaleway-sd-config-tagfilter-items-repeat",
spec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
AccessKey: "ak",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
TagsFilter: []string{"do", "do"}, // repeat
},
},
},
expectedError: true,
},
{
name: "invalid-sd-config",
spec: monitoringv1alpha1.ScrapeConfigSpec{
FileSDConfigs: []monitoringv1alpha1.FileSDConfig{
{
Files: []monitoringv1alpha1.SDFile{
"/etc/prometheus/sd/file.invalid",
},
RefreshInterval: &fiveMins,
},
},
},
expectedError: true,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
t.Parallel()
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(context.Background(), t, testCtx)
sc := framework.MakeBasicScrapeConfig(ns, "scrape-config")
sc.Spec = test.spec
_, err := framework.MonClientV1alpha1.ScrapeConfigs(ns).Create(context.Background(), sc, metav1.CreateOptions{})
if test.expectedError {
require.Error(t, err)
require.Truef(t, apierrors.IsInvalid(err), "expected Invalid error but got %v", err)
return
}
require.NoError(t, err)
require.Falsef(t, test.expectedError, "expected error but got nil")
})
}
}
// testScrapeConfigLifecycle tests 3 things:
// 1. Creating a ScrapeConfig and checking that 2 targets appear in Prometheus
// 2. Updating that ScrapeConfig by adding a target and checking that 3 targets appear in Prometheus
// 3. Deleting that ScrapeConfig and checking that 0 targets appear in Prometheus.
func testScrapeConfigLifecycle(t *testing.T) {
skipPrometheusTests(t)
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(context.Background(), t, testCtx)
framework.SetupPrometheusRBAC(context.Background(), t, testCtx, ns)
_, err := framework.CreateOrUpdatePrometheusOperator(
context.Background(),
ns,
[]string{ns},
nil,
[]string{ns},
nil,
false,
true, // clusterrole
true,
)
require.NoError(t, err)
p := framework.MakeBasicPrometheus(ns, "prom", "group", 1)
p.Spec.ScrapeConfigSelector = &metav1.LabelSelector{
MatchLabels: map[string]string{
"role": "scrapeconfig",
},
}
_, err = framework.CreatePrometheusAndWaitUntilReady(context.Background(), ns, p)
require.NoError(t, err)
// 1. Create a ScrapeConfig and check that its targets appear in Prometheus
sc := framework.MakeBasicScrapeConfig(ns, "scrape-config")
sc.Spec.StaticConfigs = []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"target1:9090", "target2:9090"},
},
}
_, err = framework.CreateScrapeConfig(context.Background(), ns, sc)
require.NoError(t, err)
// Check that the targets appear in Prometheus
err = framework.WaitForActiveTargets(context.Background(), ns, "prometheus-operated", 2)
require.NoError(t, err)
// 2. Update the ScrapeConfig and add a target. Then, check that 3 targets appear in Prometheus.
sc, err = framework.GetScrapeConfig(context.Background(), ns, "scrape-config")
require.NoError(t, err)
sc.Spec.StaticConfigs = []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"target1:9090", "target2:9090", "target3:9090"},
},
}
_, err = framework.UpdateScrapeConfig(context.Background(), ns, sc)
require.NoError(t, err)
// Check that the targets appear in Prometheus
err = framework.WaitForActiveTargets(context.Background(), ns, "prometheus-operated", 3)
require.NoError(t, err)
// 3. Remove the ScrapeConfig and check that the targets disappear in Prometheus
err = framework.DeleteScrapeConfig(context.Background(), ns, "scrape-config")
require.NoError(t, err)
// Check that the targets disappeared in Prometheus
err = framework.WaitForActiveTargets(context.Background(), ns, "prometheus-operated", 0)
require.NoError(t, err)
}
func testScrapeConfigLifecycleInDifferentNS(t *testing.T) {
skipPrometheusTests(t)
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
// The ns where the prometheus CR will reside
promns := framework.CreateNamespace(context.Background(), t, testCtx)
// The ns where the scrapeConfig will reside
scns := framework.CreateNamespace(context.Background(), t, testCtx)
framework.SetupPrometheusRBAC(context.Background(), t, testCtx, promns)
framework.SetupPrometheusRBAC(context.Background(), t, testCtx, scns)
_, err := framework.CreateOrUpdatePrometheusOperator(
context.Background(),
promns,
[]string{scns},
nil,
[]string{promns},
nil,
false,
true, // clusterrole
true,
)
require.NoError(t, err)
// Make a prometheus object in promns which will select any ScrapeConfig resource with
// "group": "sc" and/or "kubernetes.io/metadata.name": <scns>
p := framework.MakeBasicPrometheus(promns, "prom", scns, 1)
p.Spec.ScrapeConfigNamespaceSelector = &metav1.LabelSelector{
MatchLabels: map[string]string{
"kubernetes.io/metadata.name": scns,
},
}
p.Spec.ScrapeConfigSelector = &metav1.LabelSelector{
MatchLabels: map[string]string{
"group": "sc",
},
}
// Make the Prometheus selection surface thin
p.Spec.PodMonitorSelector = nil
p.Spec.PodMonitorNamespaceSelector = nil
p.Spec.ServiceMonitorSelector = nil
p.Spec.ServiceMonitorNamespaceSelector = nil
p.Spec.RuleSelector = nil
p.Spec.RuleNamespaceSelector = nil
_, err = framework.CreatePrometheusAndWaitUntilReady(context.Background(), promns, p)
require.NoError(t, err)
// 1. Create a ScrapeConfig in scns and check that its targets appear in Prometheus
sc := framework.MakeBasicScrapeConfig(scns, "scrape-config")
sc.ObjectMeta.Labels = map[string]string{
"group": "sc",
}
sc.Spec.StaticConfigs = []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"target1:9090", "target2:9090"},
},
}
_, err = framework.CreateScrapeConfig(context.Background(), scns, sc)
require.NoError(t, err)
// Check that the targets appear in Prometheus
err = framework.WaitForActiveTargets(context.Background(), promns, "prometheus-operated", 2)
require.NoError(t, err)
// 2. Update the ScrapeConfig and add a target. Then, check that 3 targets appear in Prometheus.
sc, err = framework.GetScrapeConfig(context.Background(), scns, "scrape-config")
require.NoError(t, err)
sc.Spec.StaticConfigs = []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"target1:9090", "target2:9090", "target3:9090"},
},
}
_, err = framework.UpdateScrapeConfig(context.Background(), scns, sc)
require.NoError(t, err)
// Check that the targets appear in Prometheus
err = framework.WaitForActiveTargets(context.Background(), promns, "prometheus-operated", 3)
require.NoError(t, err)
// 3. Remove the ScrapeConfig and check that the targets disappear in Prometheus
err = framework.DeleteScrapeConfig(context.Background(), scns, "scrape-config")
require.NoError(t, err)
// Check that the targets disappeared in Prometheus
err = framework.WaitForActiveTargets(context.Background(), promns, "prometheus-operated", 0)
require.NoError(t, err)
}
// testPromOperatorStartsWithoutScrapeConfigCRD deletes the ScrapeConfig CRD from the cluster and then starts
// prometheus-operator to check that it doesn't crash.
func testPromOperatorStartsWithoutScrapeConfigCRD(t *testing.T) {
skipPrometheusAllNSTests(t)
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(context.Background(), t, testCtx)
framework.SetupPrometheusRBAC(context.Background(), t, testCtx, ns)
err := framework.DeleteCRD(context.Background(), "scrapeconfigs.monitoring.coreos.com")
require.NoError(t, err)
_, err = framework.CreateOrUpdatePrometheusOperator(context.Background(), ns, []string{ns}, nil, []string{ns}, nil, false, true, false)
require.NoError(t, err)
time.Sleep(10 * time.Second)
// Check if Prometheus Operator ever restarted.
opts := metav1.ListOptions{LabelSelector: fields.SelectorFromSet(fields.Set(map[string]string{
"app.kubernetes.io/name": "prometheus-operator",
})).String()}
pl, err := framework.KubeClient.CoreV1().Pods(ns).List(context.Background(), opts)
require.NoError(t, err)
require.Lenf(t, pl.Items, 1, "expected 1 Prometheus Operator pods, but got %v", len(pl.Items))
restarts, err := framework.GetPodRestartCount(context.Background(), ns, pl.Items[0].GetName())
require.NoError(t, err)
require.Emptyf(t, restarts, "expected to get 1 container but got %d", len(restarts))
for _, restart := range restarts {
require.Emptyf(t, restart, "expected Prometheus Operator to never restart during entire test execution but got %d restarts", restart)
}
// re-create Prometheus-Operator to reinstall the CRDs
_, err = framework.CreateOrUpdatePrometheusOperator(context.Background(), ns, []string{ns}, nil, []string{ns}, nil, false, true, true)
require.NoError(t, err)
}
// testScrapeConfigKubernetesNodeRole tests whether Kubernetes node monitoring works as expected.
func testScrapeConfigKubernetesNodeRole(t *testing.T) {
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(context.Background(), t, testCtx)
// Create cluster role and cluster role binding for "prometheus" service account
// so that it has access to 'node' resource cluster scope
framework.SetupPrometheusRBACGlobal(context.Background(), t, testCtx, ns)
_, err := framework.CreateOrUpdatePrometheusOperator(context.Background(), ns, []string{ns}, nil, []string{ns}, nil, false, true, true)
require.NoError(t, err)
// For prometheus to be able to scrape nodes it needs to able to authenticate
// using mTLS certificates issued for the ServiceAccount "prometheus"
secretName := "scraping-tls"
createServiceAccountSecret(t, "prometheus", ns)
createMutualTLSSecret(t, secretName, ns)
sc := framework.MakeBasicScrapeConfig(ns, "scrape-config")
sc.Spec.Scheme = ptr.To(monitoringv1.SchemeHTTPS)
sc.Spec.Authorization = &monitoringv1.SafeAuthorization{
Credentials: &v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "prometheus-sa-secret",
},
Key: "token",
},
}
sc.Spec.TLSConfig = &monitoringv1.SafeTLSConfig{
// since we cannot validate server name in cert
InsecureSkipVerify: ptr.To(true),
CA: monitoringv1.SecretOrConfigMap{
Secret: &v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: secretName,
},
Key: "ca.crt",
},
},
Cert: monitoringv1.SecretOrConfigMap{
Secret: &v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: secretName,
},
Key: "cert.pem",
},
},
KeySecret: &v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: secretName,
},
Key: "key.pem",
},
}
sc.Spec.KubernetesSDConfigs = []monitoringv1alpha1.KubernetesSDConfig{
{
Role: monitoringv1alpha1.KubernetesRoleNode,
},
}
_, err = framework.CreateScrapeConfig(context.Background(), ns, sc)
require.NoError(t, err)
p := framework.MakeBasicPrometheus(ns, "prom", "group", 1)
p.Spec.ScrapeConfigSelector = &metav1.LabelSelector{
MatchLabels: map[string]string{
"role": "scrapeconfig",
},
}
_, err = framework.CreatePrometheusAndWaitUntilReady(context.Background(), ns, p)
require.NoError(t, err)
// Check that the targets appear in Prometheus and does proper scrapping
nodes, err := framework.Nodes(context.Background())
require.NoError(t, err)
err = framework.WaitForHealthyTargets(context.Background(), ns, "prometheus-operated", len(nodes))
require.NoError(t, err)
// Remove the ScrapeConfig
err = framework.DeleteScrapeConfig(context.Background(), ns, "scrape-config")
require.NoError(t, err)
// Check that the targets disappeared in Prometheus
err = framework.WaitForActiveTargets(context.Background(), ns, "prometheus-operated", 0)
require.NoError(t, err)
}
// testScrapeConfigDNSSDConfig tests whether DNS SD based monitoring works as expected.
func testScrapeConfigDNSSDConfig(t *testing.T) {
t.Skip("DNS service discovery tests are disabled until we find a replacement for node.demo.do.prometheus.io")
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(context.Background(), t, testCtx)
framework.SetupPrometheusRBAC(context.Background(), t, testCtx, ns)
_, err := framework.CreateOrUpdatePrometheusOperator(context.Background(), ns, []string{ns}, nil, []string{ns}, nil, false, true, true)
require.NoError(t, err)
sc := framework.MakeBasicScrapeConfig(ns, "scrape-config")
sc.Spec.DNSSDConfigs = []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"node.demo.do.prometheus.io"},
Type: ptr.To(monitoringv1alpha1.DNSRecordType("A")),
Port: ptr.To(int32(9100)),
},
}
_, err = framework.CreateScrapeConfig(context.Background(), ns, sc)
require.NoError(t, err)
p := framework.MakeBasicPrometheus(ns, "prom", "group", 1)
p.Spec.ScrapeConfigSelector = &metav1.LabelSelector{
MatchLabels: map[string]string{
"role": "scrapeconfig",
},
}
_, err = framework.CreatePrometheusAndWaitUntilReady(context.Background(), ns, p)
require.NoError(t, err)
// Check that the targets appear in Prometheus and does proper scrapping
err = framework.WaitForHealthyTargets(context.Background(), ns, "prometheus-operated", 1)
require.NoError(t, err)
// Remove the ScrapeConfig
err = framework.DeleteScrapeConfig(context.Background(), ns, "scrape-config")
require.NoError(t, err)
// Check that the targets disappeared in Prometheus
err = framework.WaitForActiveTargets(context.Background(), ns, "prometheus-operated", 0)
require.NoError(t, err)
}
type scrapeCRDTestCase struct {
name string
scrapeConfigSpec monitoringv1alpha1.ScrapeConfigSpec
expectedError bool
}
func testScrapeConfigCRDValidations(t *testing.T) {
t.Parallel()
t.Run("ScrapeConfig", func(t *testing.T) {
runScrapeConfigCRDValidation(t, ScrapeConfigCRDTestCases)
})
t.Run("KubernetesSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, K8STestCases)
})
t.Run("DNSSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, DNSSDTestCases)
})
t.Run("EC2SD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, EC2SDTestCases)
})
t.Run("StaticConfig", func(t *testing.T) {
runScrapeConfigCRDValidation(t, staticConfigTestCases)
})
t.Run("ConsulSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, ConsulSDTestCases)
})
t.Run("FileSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, FileSDTestCases)
})
t.Run("HTTPSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, HTTPSDTestCases)
})
t.Run("DigitalOceanSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, DigitalOceanSDTestCases)
})
t.Run("IonosSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, IonosSDTestCases)
})
t.Run("LightSailSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, LightSailSDTestCases)
})
t.Run("AzureSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, AzureSDTestCases)
})
t.Run("OVHCloudSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, OVHCloudSDTestCases)
})
t.Run("GCESD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, GCESDTestCases)
})
t.Run("OpenStackSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, OpenStackSDTestCases)
})
t.Run("KumaSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, KumaSDTestCases)
})
t.Run("ScalewaySD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, ScalewaySDTestCases)
})
t.Run("DockerSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, DockerSDTestCases)
})
t.Run("DockerSwarmSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, DockerSwarmSDTestCases)
})
t.Run("HetznerSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, HetznerSDTestCases)
})
t.Run("LinodeSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, LinodeSDTestCases)
})
t.Run("NomadSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, NomadSDTestCases)
})
t.Run("PuppetDBSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, PuppetDBSDTestCases)
})
t.Run("EurekaSD", func(t *testing.T) {
runScrapeConfigCRDValidation(t, EurekaSDTestCases)
})
}
func runScrapeConfigCRDValidation(t *testing.T, testCases []scrapeCRDTestCase) {
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
t.Parallel()
testCtx := framework.NewTestCtx(t)
defer testCtx.Cleanup(t)
ns := framework.CreateNamespace(context.Background(), t, testCtx)
sc := &monitoringv1alpha1.ScrapeConfig{
ObjectMeta: metav1.ObjectMeta{
Name: "test",
Namespace: ns,
Annotations: map[string]string{},
},
Spec: test.scrapeConfigSpec,
}
_, err := framework.MonClientV1alpha1.ScrapeConfigs(ns).Create(context.Background(), sc, metav1.CreateOptions{})
if test.expectedError {
require.True(t, apierrors.IsInvalid(err))
return
}
require.NoError(t, err)
})
}
}
var ConsulSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Server",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Invalid Server with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "",
},
},
},
expectedError: true,
},
{
name: "Invalid missing Server",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Valid PathPrefix",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
PathPrefix: ptr.To("valid-server"),
},
},
},
expectedError: false,
},
{
name: "Invalid PathPrefix with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
PathPrefix: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid missing PathPrefix",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid Datacenter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Datacenter: ptr.To("valid-server"),
},
},
},
expectedError: false,
},
{
name: "Invalid Datacenter with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Datacenter: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid missing Datacenter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid Namespace",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Namespace: ptr.To("valid-server"),
},
},
},
expectedError: false,
},
{
name: "Invalid Namespace with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Namespace: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid missing Namespace",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid Partition",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Partition: ptr.To("valid-server"),
},
},
},
expectedError: false,
},
{
name: "Invalid Partition with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Partition: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid missing Partition",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid HTTP Scheme",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Scheme: ptr.To(monitoringv1.SchemeHTTP),
},
},
},
expectedError: false,
},
{
name: "Valid HTTPS Scheme",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Scheme: ptr.To(monitoringv1.SchemeHTTPS),
},
},
},
expectedError: false,
},
{
name: "Invalid Scheme with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Scheme: ptr.To(monitoringv1.Scheme("")),
},
},
},
expectedError: true,
},
{
name: "Valid missing Scheme",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid Services",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Services: []string{"foo", "bar"},
},
},
},
expectedError: false,
},
{
name: "Invalid Services with repeating values",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Services: []string{"foo", "foo"},
},
},
},
expectedError: true,
},
{
name: "Valid missing Services",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid Services with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Services: []string{},
},
},
},
expectedError: false,
},
{
name: "Valid Tags",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Tags: []string{"foo", "bar"},
},
},
},
expectedError: false,
},
{
name: "Invalid Tags with repeating values",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
Tags: []string{"foo", "foo"},
},
},
},
expectedError: true,
},
{
name: "Valid missing Tags",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
{
name: "Valid TagSeparator",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
TagSeparator: ptr.To(","),
},
},
},
expectedError: false,
},
{
name: "Invalid TagSeparator with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
TagSeparator: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid missing TagSeparator",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ConsulSDConfigs: []monitoringv1alpha1.ConsulSDConfig{
{
Server: "valid-server",
},
},
},
expectedError: false,
},
}
var HTTPSDTestCases = []scrapeCRDTestCase{
{
name: "Invalid URL",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HTTPSDConfigs: []monitoringv1alpha1.HTTPSDConfig{
{
URL: "valid-server",
},
},
},
expectedError: true,
},
{
name: "Invalid empty URL",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HTTPSDConfigs: []monitoringv1alpha1.HTTPSDConfig{
{
URL: "",
},
},
},
expectedError: true,
},
{
name: "Invalid absent URL",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HTTPSDConfigs: []monitoringv1alpha1.HTTPSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Valid URL with http scheme",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HTTPSDConfigs: []monitoringv1alpha1.HTTPSDConfig{
{
URL: "http://valid.test",
},
},
},
expectedError: false,
},
{
name: "Valid URL with https scheme",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HTTPSDConfigs: []monitoringv1alpha1.HTTPSDConfig{
{
URL: "https://valid-url",
},
},
},
expectedError: false,
},
}
var K8STestCases = []scrapeCRDTestCase{
{
name: "APIServer with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "EndpointSlice",
APIServer: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Missing required Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
// Role is missing
},
},
},
expectedError: true,
},
{
name: "Invalid Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Wrong",
},
},
},
expectedError: true,
},
{
name: "Valid Role with empty APIServer",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
APIServer: nil,
},
},
},
expectedError: false,
},
{
name: "Namespace discovery with valid namespace",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{Names: []string{"default"}},
},
},
},
expectedError: false,
},
{
name: "Selector Role missing",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
// Role is missing
},
},
},
},
},
expectedError: true,
},
{
name: "Selector Role valid",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
},
},
},
},
},
expectedError: false,
},
{
name: "Selector Label with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Label: ptr.To(""),
},
},
},
},
},
expectedError: true,
},
{
name: "Selector Label with valid value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Label: ptr.To("node.kubernetes.io/instance-type=master"),
},
},
},
},
},
expectedError: false,
},
{
name: "Selector Field with empty value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Field: ptr.To(""),
},
},
},
},
},
expectedError: true,
},
{
name: "Selector Field with valid value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Field: ptr.To("metadata.name=foobar"),
},
},
},
},
},
expectedError: false,
},
{
name: "Selector Field with valid value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Field: ptr.To("metadata.name=foobar"),
},
},
},
},
},
expectedError: false,
},
{
name: "Selector Label and Field with duplicate values",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Selectors: []monitoringv1alpha1.K8SSelectorConfig{
{
Role: "Pod",
Label: ptr.To("node.kubernetes.io/instance-type=master"),
Field: ptr.To("metadata.name=foobar"),
},
{
Role: "Pod",
Label: ptr.To("node.kubernetes.io/instance-type=master"),
Field: ptr.To("metadata.name=foobar"),
},
},
},
},
},
expectedError: true,
},
{
name: "IncludeOwnNamespace set to true",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{
IncludeOwnNamespace: ptr.To(true),
},
},
},
},
expectedError: false,
},
{
name: "IncludeOwnNamespace set to false with empty Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{
IncludeOwnNamespace: ptr.To(false),
Names: []string{},
},
},
},
},
expectedError: false,
},
{
name: "IncludeOwnNamespace unset with empty Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{
Names: []string{},
},
},
},
},
expectedError: false,
},
{
name: "Names with valid namespaces",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{
Names: []string{"default", "kube-system"},
},
},
},
},
expectedError: false,
},
{
name: "IncludeOwnNamespace set to true with valid Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{
IncludeOwnNamespace: ptr.To(true),
Names: []string{"default", "kube-system"},
},
},
},
},
expectedError: false,
},
{
name: "IncludeOwnNamespace set to true with repeated Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KubernetesSDConfigs: []monitoringv1alpha1.KubernetesSDConfig{
{
Role: "Pod",
Namespaces: &monitoringv1alpha1.NamespaceDiscovery{
IncludeOwnNamespace: ptr.To(true),
Names: []string{"default", "default"},
},
},
},
},
expectedError: true,
},
}
var DNSSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1", "test2"},
},
},
},
expectedError: false,
},
{
name: "Missing Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Empty Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{},
},
},
},
expectedError: true,
},
{
name: "Empty string in Names",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{""},
},
},
},
expectedError: true,
},
{
name: "Valid Record Type A",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Type: ptr.To(monitoringv1alpha1.DNSRecordTypeA),
},
},
},
expectedError: false,
},
{
name: "Valid Record Type AAAA",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Type: ptr.To(monitoringv1alpha1.DNSRecordTypeAAAA),
},
},
},
expectedError: false,
},
{
name: "Valid Record Type MX",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Type: ptr.To(monitoringv1alpha1.DNSRecordTypeMX),
},
},
},
expectedError: false,
},
{
name: "Valid Record Type NS",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Type: ptr.To(monitoringv1alpha1.DNSRecordTypeNS),
},
},
},
expectedError: false,
},
{
name: "Valid Record Type SRV",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Type: ptr.To(monitoringv1alpha1.DNSRecordTypeSRV),
},
},
},
expectedError: false,
},
{
name: "Invalid Record Type",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Type: ptr.To(monitoringv1alpha1.DNSRecordType("WRONG")),
},
},
},
expectedError: true,
},
{
name: "Valid Port Number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Port: ptr.To(int32(8080)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port Number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
Port: ptr.To(int32(80809)),
},
},
},
expectedError: true,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
RefreshInterval: ptr.To(monitoringv1.Duration("30s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DNSSDConfigs: []monitoringv1alpha1.DNSSDConfig{
{
Names: []string{"test1"},
RefreshInterval: ptr.To(monitoringv1.Duration("30g")),
},
},
},
expectedError: true,
},
}
var EC2SDTestCases = []scrapeCRDTestCase{
{
name: "Valid AWS Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Region: ptr.To("us-west"),
},
},
},
expectedError: false,
},
{
name: "Valid Absent AWS Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{},
},
},
expectedError: false,
},
{
name: "Invalid AWS Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Region: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid AWS RoleARN",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
RoleARN: ptr.To("valid-role"),
},
},
},
expectedError: false,
},
{
name: "Valid Absent AWS RoleARN",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{},
},
},
expectedError: false,
},
{
name: "Invalid AWS RoleARN",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
RoleARN: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Port Number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Port: ptr.To(int32(8080)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port Number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Port: ptr.To(int32(80809)),
},
},
},
expectedError: true,
},
{
name: "Valid Filters",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Region: ptr.To("us-west"),
Filters: []monitoringv1alpha1.Filter{
{
Name: "foo",
Values: []string{"bar"},
},
},
},
},
},
expectedError: false,
},
{
name: "Invalid Filters with repeat value items",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Region: ptr.To("us-west"),
Filters: []monitoringv1alpha1.Filter{
{
Name: "foo",
Values: []string{"bar", "bar"},
},
},
},
},
},
expectedError: true,
},
{
name: "Invalid Filters with empty values",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Region: ptr.To("us-west"),
Filters: []monitoringv1alpha1.Filter{
{
Name: "foo",
Values: []string{},
},
},
},
},
},
expectedError: true,
},
{
name: "Invalid Filters with empty string values",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EC2SDConfigs: []monitoringv1alpha1.EC2SDConfig{
{
Region: ptr.To("us-west"),
Filters: []monitoringv1alpha1.Filter{
{
Name: "foo",
Values: []string{""},
},
},
},
},
},
expectedError: true,
},
}
var ScrapeConfigCRDTestCases = []scrapeCRDTestCase{
{
name: "JobName: Not Specified",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{},
expectedError: false,
},
{
name: "JobName: Empty String",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
JobName: ptr.To(""),
},
expectedError: true,
},
{
name: "JobName: Valid Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
JobName: ptr.To("validJob"),
},
expectedError: false,
},
{
name: "Scheme: Not Specified",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{},
expectedError: false,
},
{
name: "Scheme: Invalid Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
Scheme: ptr.To(monitoringv1.Scheme("FTP")),
},
expectedError: true,
},
{
name: "Scheme: Valid Value HTTP",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
Scheme: ptr.To(monitoringv1.SchemeHTTP),
},
expectedError: false,
},
{
name: "Scheme: Valid Value HTTPS",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
Scheme: ptr.To(monitoringv1.SchemeHTTPS),
},
expectedError: false,
},
{
name: "ScrapeClassName: Not Specified",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{},
expectedError: false,
},
{
name: "ScrapeClassName: Empty String",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeClassName: ptr.To(""),
},
expectedError: true,
},
{
name: "ScrapeClassName: Valid Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeClassName: ptr.To("default"),
},
expectedError: false,
},
{
name: "ScrapeProtocols: Not Specified",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{},
expectedError: false,
},
{
name: "ScrapeProtocols: Single Valid Protocol",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{
"PrometheusProto",
},
},
expectedError: false,
},
{
name: "ScrapeProtocols: Multiple Valid Protocols",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
},
},
expectedError: false,
},
{
name: "ScrapeProtocols: Invalid Protocol",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{
"InvalidProtocol",
},
},
expectedError: true,
},
{
name: "ScrapeProtocols: Mixed Valid and Invalid Protocols",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{
"PrometheusText0.0.4",
"InvalidProtocol",
},
},
expectedError: true,
},
{
name: "ScrapeProtocols: Empty List",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{},
},
expectedError: false,
},
{
name: "ScrapeProtocols: Duplicate Valid Protocols",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{
"OpenMetricsText0.0.1",
"OpenMetricsText0.0.1",
},
},
expectedError: true,
},
{
name: "ScrapeProtocols: All Valid Protocols",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScrapeProtocols: []monitoringv1.ScrapeProtocol{
"PrometheusProto",
"OpenMetricsText0.0.1",
"OpenMetricsText1.0.0",
"PrometheusText0.0.4",
},
},
expectedError: false,
},
{
name: "FallbackScrapeProtocol: Valid Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FallbackScrapeProtocol: ptr.To(monitoringv1.OpenMetricsText0_0_1),
},
expectedError: false,
},
{
name: "FallbackScrapeProtocol: Invalid Protocol",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FallbackScrapeProtocol: ptr.To(monitoringv1.ScrapeProtocol("InvalidProtocol")),
},
expectedError: true,
},
{
name: "FallbackScrapeProtocol: Setting nil",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FallbackScrapeProtocol: nil,
},
expectedError: false,
},
}
var staticConfigTestCases = []scrapeCRDTestCase{
{
name: "Valid targets",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
StaticConfigs: []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"1.1.1.1:9090", "0.0.0.0:9090"},
},
},
},
expectedError: false,
},
{
name: "Invalid absent targets",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
StaticConfigs: []monitoringv1alpha1.StaticConfig{
{},
},
},
expectedError: true,
},
{
name: "Invalid duplicate targets",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
StaticConfigs: []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"1.1.1.1:9090", "1.1.1.1:9090"},
},
},
},
expectedError: true,
},
{
name: "Invalid empty targets",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
StaticConfigs: []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{},
},
},
},
expectedError: true,
},
{
name: "Valid labels",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
StaticConfigs: []monitoringv1alpha1.StaticConfig{
{
Targets: []monitoringv1alpha1.Target{"1.1.1.1:9090", "0.0.0.0:9090"},
Labels: map[string]string{"owned-by": "prometheus"},
},
},
},
expectedError: false,
},
}
var FileSDTestCases = []scrapeCRDTestCase{
{
name: "Valid files list",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FileSDConfigs: []monitoringv1alpha1.FileSDConfig{
{
Files: []monitoringv1alpha1.SDFile{"config.yml", "config.yaml"},
},
},
},
expectedError: false,
},
{
name: "Invalid duplicate files list",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FileSDConfigs: []monitoringv1alpha1.FileSDConfig{
{
Files: []monitoringv1alpha1.SDFile{"config.yml", "config.yml"},
},
},
},
expectedError: true,
},
{
name: "Invalid absent files list",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FileSDConfigs: []monitoringv1alpha1.FileSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Invalid empty files list",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
FileSDConfigs: []monitoringv1alpha1.FileSDConfig{
{
Files: []monitoringv1alpha1.SDFile{},
},
},
},
expectedError: true,
},
}
var DigitalOceanSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Port number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DigitalOceanSDConfigs: []monitoringv1alpha1.DigitalOceanSDConfig{
{
Port: ptr.To(int32(8080)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port number exceeding the maximum value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DigitalOceanSDConfigs: []monitoringv1alpha1.DigitalOceanSDConfig{
{
Port: ptr.To(int32(65536)), // maximum Port number = 65535
},
},
},
expectedError: true,
},
{
name: "Invalid Port number below the minimum value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DigitalOceanSDConfigs: []monitoringv1alpha1.DigitalOceanSDConfig{
{
Port: ptr.To(int32(-1)), // minimum Port number = 0;
},
},
},
expectedError: true,
},
{
name: "Valid Refresh interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DigitalOceanSDConfigs: []monitoringv1alpha1.DigitalOceanSDConfig{
{
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid Refresh interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DigitalOceanSDConfigs: []monitoringv1alpha1.DigitalOceanSDConfig{
{
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
}
var IonosSDTestCases = []scrapeCRDTestCase{
{
name: "Valid DataCeneterID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
IonosSDConfigs: []monitoringv1alpha1.IonosSDConfig{
{
DataCenterID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: false,
},
{
name: "Invalid empty DataCenterID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
IonosSDConfigs: []monitoringv1alpha1.IonosSDConfig{
{
DataCenterID: "",
},
},
},
expectedError: true,
},
{
name: "Invalid missing DataCenterID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
IonosSDConfigs: []monitoringv1alpha1.IonosSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Valid Port number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
IonosSDConfigs: []monitoringv1alpha1.IonosSDConfig{
{
DataCenterID: "11111111-1111-1111-1111-111111111111",
Port: ptr.To(int32(8080)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port number exceeeding the maximum value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
IonosSDConfigs: []monitoringv1alpha1.IonosSDConfig{
{
DataCenterID: "11111111-1111-1111-1111-111111111111",
Port: ptr.To(int32(65536)), // maximum Port number = 65535
},
},
},
expectedError: true,
},
{
name: "Invalid Port number below the minimum value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
IonosSDConfigs: []monitoringv1alpha1.IonosSDConfig{
{
DataCenterID: "11111111-1111-1111-1111-111111111111",
Port: ptr.To(int32(-1)), // minimum Port number = 0
},
},
},
expectedError: true,
},
}
var LightSailSDTestCases = []scrapeCRDTestCase{
{
name: "Valid RegionID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Region: ptr.To("us-east-1"),
},
},
},
expectedError: false,
},
{
name: "Invalid RegionID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Region: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Endpoint",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Endpoint: ptr.To("https://custom-endpoint.example.com"),
},
},
},
expectedError: false,
},
{
name: "Invalid Endpoint",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Endpoint: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Port: ptr.To(int32(80)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port 1",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Invalid Port 2",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LightSailSDConfigs: []monitoringv1alpha1.LightSailSDConfig{
{
Port: ptr.To(int32(65536)),
},
},
},
expectedError: true,
},
}
var GCESDTestCases = []scrapeCRDTestCase{
{
name: "Valid GCESDConfig required options",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Project: "devops-dev",
Zone: "us-west-1",
},
},
},
expectedError: false,
},
{
name: "Invalid GCESDConfig with empty Project",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Project: "",
},
},
},
expectedError: true,
},
{
name: "Invalid GCESDConfig with empty Zone",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Zone: "",
},
},
},
expectedError: true,
},
{
name: "Invalid GCESDConfig with empty required fields",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{},
},
},
expectedError: true,
},
{
name: "Valid GCESDConfig with refresh interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Project: "devops-dev",
Zone: "us-west-1",
RefreshInterval: ptr.To(monitoringv1.Duration("30s")),
},
},
},
expectedError: false,
},
{
name: "Invalid GCESDConfig with wrong refresh interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
RefreshInterval: ptr.To(monitoringv1.Duration("30g")),
},
},
},
expectedError: true,
},
{
name: "Valid GCESDConfig with Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Project: "devops-dev",
Zone: "us-west-1",
Port: ptr.To(int32(65534)),
},
},
},
expectedError: false,
},
{
name: "Invalid GCESDConfig with wrong Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Valid GCESDConfig with Filter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Project: "devops-dev",
Zone: "us-west-1",
Filter: ptr.To("filter-expression"),
},
},
},
expectedError: false,
},
{
name: "Invalid GCESDConfig with wrong Filter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Filter: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid GCESDConfig with TagSeparator",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
Project: "devops-dev",
Zone: "us-west-1",
TagSeparator: ptr.To("tag-value"),
},
},
},
expectedError: false,
},
{
name: "Invalid GCESDConfig with TagSeparator",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
GCESDConfigs: []monitoringv1alpha1.GCESDConfig{
{
TagSeparator: ptr.To(""),
},
},
},
expectedError: true,
},
}
var AzureSDTestCases = []scrapeCRDTestCase{
{
name: "Valid AzureSD With SubscriptionID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: false,
},
{
name: "Invalid AzureSD With Missing SubscriptionID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
Environment: ptr.To("AzurePublicCloud"),
AuthenticationMethod: ptr.To(monitoringv1alpha1.AuthMethodTypeSDK),
},
},
},
expectedError: true,
},
{
name: "Invalid AzureSD With Empty SubscriptionID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
SubscriptionID: "",
},
},
},
expectedError: true,
},
{
name: "Invalid AzureSD With No SubscriptionID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Valid AzureSD With Environment",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
Environment: ptr.To("AzurePublicCloud"),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: false,
},
{
name: "Invalid AzureSD With Empty Environment",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
Environment: ptr.To(""),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: true,
},
{
name: "Valid AzureSD With ResourceGroup",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
ResourceGroup: ptr.To("my-resource-group"),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: false,
},
{
name: "Invalid AzureSD With Empty ResourceGroup",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
ResourceGroup: ptr.To(""),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: true,
},
{
name: "Valid AzureSD With ManagedIdentity Authentication",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
AuthenticationMethod: ptr.To(monitoringv1alpha1.AuthMethodTypeManagedIdentity),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: false,
},
{
name: "Valid AzureSD With SDK Authentication",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
AuthenticationMethod: ptr.To(monitoringv1alpha1.AuthMethodTypeSDK),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: false,
},
{
name: "Valid AzureSD With OAuth Authentication And All Required Fields",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
AuthenticationMethod: ptr.To(monitoringv1alpha1.AuthMethodTypeOAuth),
TenantID: ptr.To("22222222-2222-2222-2222-222222222222"),
ClientID: ptr.To("33333333-3333-3333-3333-333333333333"),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
ClientSecret: &v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "azure-client-secret",
},
Key: "clientSecret",
},
},
},
},
expectedError: false,
},
{
name: "Invalid AzureSD With OAuth Authentication and Empty TenantID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
AuthenticationMethod: ptr.To(monitoringv1alpha1.AuthMethodTypeOAuth),
TenantID: ptr.To(""),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: true,
},
{
name: "Invalid AzureSD With OAuth Authentication and Empty ClientID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
AuthenticationMethod: ptr.To(monitoringv1alpha1.AuthMethodTypeOAuth),
ClientID: ptr.To(""),
SubscriptionID: "11111111-1111-1111-1111-111111111111",
},
},
},
expectedError: true,
},
{
name: "Valid AzureSD With RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
SubscriptionID: "11111111-1111-1111-1111-111111111111",
RefreshInterval: ptr.To(monitoringv1.Duration("30s")),
},
},
},
expectedError: false,
},
{
name: "Invalid AzureSD with Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
SubscriptionID: "11111111-1111-1111-1111-111111111111",
RefreshInterval: ptr.To(monitoringv1.Duration("30g")),
},
},
},
expectedError: true,
},
{
name: "Valid AzureSD With Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
SubscriptionID: "11111111-1111-1111-1111-111111111111",
Port: ptr.To(int32(65534)),
},
},
},
expectedError: false,
},
{
name: "Invalid AzureSD With Invalid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
AzureSDConfigs: []monitoringv1alpha1.AzureSDConfig{
{
SubscriptionID: "11111111-1111-1111-1111-111111111111",
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
}
var OVHCloudSDTestCases = []scrapeCRDTestCase{
{
name: "Valid OVHCloudSDConfig",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceDedicatedServer,
Endpoint: ptr.To("https://api.ovh.com/endpoint"),
RefreshInterval: ptr.To(monitoringv1.Duration("30s")),
},
},
},
expectedError: false,
},
{
name: "Valid OVHCloudSDConfig without optional fields",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceDedicatedServer,
},
},
},
expectedError: false,
},
{
name: "Valid ApplicationKey",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
},
},
},
expectedError: false,
},
{
name: "Empty ApplicationKey",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
},
},
},
expectedError: true,
},
{
name: "Missing ApplicationKey",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
},
},
},
expectedError: true,
},
{
name: "Valid Service field (VPS)",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
},
},
},
expectedError: false,
},
{
name: "Valid Service field (DedicatedServer)",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceDedicatedServer,
},
},
},
expectedError: false,
},
{
name: "Invalid Service type",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: "InvalidService",
},
},
},
expectedError: true,
},
{
name: "Missing Service field",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
},
},
},
expectedError: true,
},
{
name: "Valid ConsumerKey",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
},
},
},
expectedError: false,
},
{
name: "Empty Endpoint",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
Endpoint: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Empty RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
RefreshInterval: ptr.To(monitoringv1.Duration("")),
},
},
},
expectedError: false,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OVHCloudSDConfigs: []monitoringv1alpha1.OVHCloudSDConfig{
{
ApplicationKey: "valid-app-key",
ApplicationSecret: v1.SecretKeySelector{Key: "valid-secret-key"},
ConsumerKey: v1.SecretKeySelector{Key: "valid-consumer-key"},
Service: monitoringv1alpha1.OVHServiceVPS,
RefreshInterval: ptr.To(monitoringv1.Duration("30s")),
},
},
},
expectedError: false,
},
}
var OpenStackSDTestCases = []scrapeCRDTestCase{
{
name: "Bareconfig",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Missing Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Region: "default",
},
},
},
expectedError: true,
},
{
name: "Missing Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
},
},
},
expectedError: true,
},
{
name: "Valid Role Hypervisor",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
},
},
},
expectedError: false,
},
{
name: "Valid Role Instance",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleInstance,
Region: "default",
},
},
},
expectedError: false,
},
{
name: "Invalid Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRole("default"),
Region: "default",
},
},
},
expectedError: true,
},
{
name: "Invalid Role Empty",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRole(""),
Region: "default",
},
},
},
expectedError: true,
},
{
name: "Invalid Region Empty",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "",
},
},
},
expectedError: true,
},
{
name: "Role Loadbalancer",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleLoadBalancer,
Region: "default",
},
},
},
expectedError: false,
},
{
name: "Valid Endpoint HTTP",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
IdentityEndpoint: ptr.To("http://example.com"),
},
},
},
expectedError: false,
},
{
name: "Valid Endpoint HTTPS",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
IdentityEndpoint: ptr.To("https://example.com"),
},
},
},
expectedError: false,
},
{
name: "Invalid Endpoint",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
IdentityEndpoint: ptr.To("ftp://example.com"),
},
},
},
expectedError: true,
},
{
name: "Invalid Endpoint Empty",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
IdentityEndpoint: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Username",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Username: ptr.To("admin"),
},
},
},
expectedError: false,
},
{
name: "Invalid Username",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Username: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid User ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
UserID: ptr.To("ac3377633149401296f6c0d92d79dc16"),
},
},
},
expectedError: false,
},
{
name: "Invalid User ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
UserID: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Domain ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
DomainID: ptr.To("e0353a670a9e496da891347c589539e9"),
},
},
},
expectedError: false,
},
{
name: "Invalid Domain ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
DomainID: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Domain Name",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
DomainName: ptr.To("default"),
},
},
},
expectedError: false,
},
{
name: "Invalid Domain Name",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
DomainName: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Project Name",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ProjectName: ptr.To("default"),
},
},
},
expectedError: false,
},
{
name: "Invalid Project Name",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ProjectName: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Project ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ProjectID: ptr.To("343d245e850143a096806dfaefa9afdc"),
},
},
},
expectedError: false,
},
{
name: "Invalid Project ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ProjectID: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Application Credential Name",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ApplicationCredentialName: ptr.To("monitoring"),
},
},
},
expectedError: false,
},
{
name: "Invalid Application Credential Name",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ApplicationCredentialName: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Application Credential ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ApplicationCredentialID: ptr.To("aa809205ed614a0e854bac92c0768bb9"),
},
},
},
expectedError: false,
},
{
name: "Invalid Application Credential ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
ApplicationCredentialID: ptr.To(""),
},
},
},
expectedError: false,
},
{
name: "All Tenants True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
AllTenants: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "All Tenants False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
AllTenants: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "Valid Refresh Interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
RefreshInterval: ptr.To(monitoringv1.Duration("30s")),
},
},
},
expectedError: false,
},
{
name: "Invalid Refresh Interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
RefreshInterval: ptr.To(monitoringv1.Duration("30g")),
},
},
},
expectedError: true,
},
{
name: "Valid Port 8080",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Port: ptr.To(int32(8080)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port -1",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Invalid Port 65537",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Port: ptr.To(int32(65537)),
},
},
},
expectedError: true,
},
{
name: "Valid Availability Public",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Availability: ptr.To("public"),
},
},
},
expectedError: false,
},
{
name: "Valid Availability Admin",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Availability: ptr.To("admin"),
},
},
},
expectedError: false,
},
{
name: "Valid Availability Internal",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Availability: ptr.To("internal"),
},
},
},
expectedError: false,
},
{
name: "Invalid Availability",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Availability: ptr.To("private"),
},
},
},
expectedError: true,
},
{
name: "Invalid Availability Empty Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
OpenStackSDConfigs: []monitoringv1alpha1.OpenStackSDConfig{
{
Role: monitoringv1alpha1.OpenStackRoleHypervisor,
Region: "default",
Availability: ptr.To(""),
},
},
},
expectedError: true,
},
}
var KumaSDTestCases = []scrapeCRDTestCase{
{
name: "Valid KumaSDConfig - Required Fields",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://kuma-control-plane.example.com",
},
},
},
expectedError: false,
},
{
name: "Invalid - Required Fields Not Specified",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{},
},
},
expectedError: true,
},
{
name: "Invalid Server schema",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "ftp://example.com",
},
},
},
expectedError: true,
},
{
name: "Invalid empty Server",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "",
},
},
},
expectedError: true,
},
{
name: "Valid ClientID specified",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
ClientID: ptr.To("valid-client-id"),
},
},
},
expectedError: false,
},
{
name: "Invalid empty ClientID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
ClientID: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "Invalid FetchTimeout",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
FetchTimeout: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "Valid FetchTimeout",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
FetchTimeout: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
KumaSDConfigs: []monitoringv1alpha1.KumaSDConfig{
{
Server: "http://example.com",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
}
var ScalewaySDTestCases = []scrapeCRDTestCase{
{
name: "Valid Project ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: false,
},
{
name: "Invalid Project ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: true,
},
{
name: "Missing Project ID",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: true,
},
{
name: "Valid Access Key",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: false,
},
{
name: "Invalid Access Key",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: true,
},
{
name: "Missing Access Key",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: true,
},
{
name: "Valid Role - Instance",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: false,
},
{
name: "Valid Role - Baremetal",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleBaremetal,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: false,
},
{
name: "Invalid Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: "Invalid Role",
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: true,
},
{
name: "Missing Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
},
},
},
expectedError: true,
},
{
name: "Valid Api Url",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
ApiURL: ptr.To("https://api.scaleway.com"),
},
},
},
expectedError: false,
},
{
name: "Invalid Api Url",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
ApiURL: ptr.To("ftp://example.com"),
},
},
},
expectedError: true,
},
{
name: "Valid NameFilter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
NameFilter: ptr.To("my-server"),
},
},
},
expectedError: false,
},
{
name: "Invalid NameFilter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
NameFilter: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid TagsFilter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
TagsFilter: []string{"do"},
},
},
},
expectedError: false,
},
{
name: "Empty tag values in TagsFilter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
TagsFilter: []string{""}, // empty tag
},
},
},
expectedError: true,
},
{
name: "Repeating tags in TagsFilter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
TagsFilter: []string{"do", "do"}, // repeating tags
},
},
},
expectedError: true,
},
{
name: "Valid Zone value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleBaremetal,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
Zone: ptr.To("fr-par-1"),
},
},
},
expectedError: false,
},
{
name: "Invalid Zone value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
Zone: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Port number",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
Port: ptr.To(int32(8080)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port number exceeding the maximum value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleBaremetal,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
Port: ptr.To(int32(65536)), // maximum Port number = 65535
},
},
},
expectedError: true,
},
{
name: "Invalid Port number below the minimum value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
Port: ptr.To(int32(-1)), // minimum Port number = 0;
},
},
},
expectedError: true,
},
{
name: "Valid Refresh interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleInstance,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid Refresh interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
ScalewaySDConfigs: []monitoringv1alpha1.ScalewaySDConfig{
{
ProjectID: "1",
Role: monitoringv1alpha1.ScalewayRoleBaremetal,
AccessKey: "AccessKey",
SecretKey: v1.SecretKeySelector{
LocalObjectReference: v1.LocalObjectReference{
Name: "secret",
},
Key: "key.pem",
},
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
}
var DockerSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Host",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
},
},
},
expectedError: false,
},
{
name: "Invalid Host",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "",
},
},
},
expectedError: true,
},
{
name: "Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
Port: ptr.To(int32(80)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Valid HostNetworkingHost",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
HostNetworkingHost: ptr.To("localhost"),
},
},
},
expectedError: false,
},
{
name: "Invalid HostNetworkingHost",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
HostNetworkingHost: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "MatchFirstNetwork True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
MatchFirstNetwork: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "MatchFirstNetwork False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
MatchFirstNetwork: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "Valid Filter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{"healthy", "starting"},
},
},
},
},
},
expectedError: false,
},
{
name: "Invalid Filter No Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{},
},
},
},
},
},
expectedError: true,
},
{
name: "Invalid Filter Empty String Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{""},
},
},
},
},
},
expectedError: true,
},
{
name: "Invalid Filter Repeated Value Items",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{"healthy", "healthy"},
},
},
},
},
},
expectedError: true,
},
{
name: "Valid Refresh Interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid Refresh Interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSDConfigs: []monitoringv1alpha1.DockerSDConfig{
{
Host: "127.0.0.1",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
}
var DockerSwarmSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Minimum Config",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
},
},
},
expectedError: false,
},
{
name: "Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
Port: ptr.To(int32(80)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Valid Filter",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{"healthy", "starting"},
},
},
},
},
},
expectedError: false,
},
{
name: "Invalid Filter No Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{},
},
},
},
},
},
expectedError: true,
},
{
name: "Invalid Filter Empty String Value",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{""},
},
},
},
},
},
expectedError: true,
},
{
name: "Invalid Filter Repeated Value Items",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
Filters: []monitoringv1alpha1.Filter{
{
Name: "health",
Values: []string{"healthy", "healthy"},
},
},
},
},
},
expectedError: true,
},
{
name: "Valid Refresh Interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid Refresh Interval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
DockerSwarmSDConfigs: []monitoringv1alpha1.DockerSwarmSDConfig{
{
Host: "tcp://localhost",
Role: "Services",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
}
var HetznerSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Minimal Config",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
},
},
},
expectedError: false,
},
{
name: "Invalid Empty Role",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "",
},
},
},
expectedError: true,
},
{
name: "Follo Redirect True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "Follo Redirect False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
Port: ptr.To(int32(80)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "Valid LabelSelector",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
LabelSelector: ptr.To("foo"),
},
},
},
expectedError: false,
},
{
name: "Invalid LabelSelector",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
HetznerSDConfigs: []monitoringv1alpha1.HetznerSDConfig{
{
Role: "Hcloud",
LabelSelector: ptr.To(""),
},
},
},
expectedError: true,
},
}
var LinodeSDTestCases = []scrapeCRDTestCase{
{
name: "Valid Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
Region: ptr.To("us-east"),
},
},
},
expectedError: false,
},
{
name: "Valid Empty Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
Region: ptr.To(""),
},
},
},
expectedError: true,
},
{
name: "Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
Port: ptr.To(int32(80)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "Valid TagSeperator",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
TagSeparator: ptr.To(","),
},
},
},
expectedError: false,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
LinodeSDConfigs: []monitoringv1alpha1.LinodeSDConfig{
{
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
}
var NomadSDTestCases = []scrapeCRDTestCase{
{
name: "Minimal Config",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
},
},
},
expectedError: false,
},
{
name: "No Server",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
// No Server
},
},
},
expectedError: true,
},
{
name: "AllowStale True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
AllowStale: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "AllowStale False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
AllowStale: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "Valid Namespace",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
Namespace: ptr.To("default"),
},
},
},
expectedError: false,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "Valid Region",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
Region: ptr.To("us-east"),
},
},
},
expectedError: false,
},
{
name: "Valid TagSeparator",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
TagSeparator: ptr.To(","),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
NomadSDConfigs: []monitoringv1alpha1.NomadSDConfig{
{
Server: "localhost",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
}
var PuppetDBSDTestCases = []scrapeCRDTestCase{
{
name: "Minimal Config",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
},
},
},
expectedError: false,
},
{
name: "Missing URL",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
Query: "nodes { certname = \"macbook-pro.local\" }",
},
},
},
expectedError: true,
},
{
name: "Empty URL",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "",
Query: "nodes { certname = \"macbook-pro.local\" }",
},
},
},
expectedError: true,
},
{
name: "Missing Query",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
},
},
},
expectedError: true,
},
{
name: "Empty Query",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "",
},
},
},
expectedError: true,
},
{
name: "IncludeParameters True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
IncludeParameters: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "IncludeParameters False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
IncludeParameters: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
{
name: "Valid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
Port: ptr.To(int32(80)),
},
},
},
expectedError: false,
},
{
name: "Invalid Port",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
Port: ptr.To(int32(-1)),
},
},
},
expectedError: true,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
PuppetDBSDConfigs: []monitoringv1alpha1.PuppetDBSDConfig{
{
URL: "https://puppetdb.example.com",
Query: "nodes { certname = \"macbook-pro.local\" }",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
}
var EurekaSDTestCases = []scrapeCRDTestCase{
{
name: "Minimal Config",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
},
},
},
expectedError: false,
},
{
name: "Invalid Server",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "localhost:8761",
},
},
},
expectedError: true,
},
{
name: "Empty Server",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "",
},
},
},
expectedError: true,
},
{
name: "FollowRedirects True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
FollowRedirects: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "FollowRedirects False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
FollowRedirects: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 True",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
EnableHTTP2: ptr.To(true),
},
},
},
expectedError: false,
},
{
name: "EnableHTTP2 False",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
EnableHTTP2: ptr.To(false),
},
},
},
expectedError: false,
},
{
name: "Valid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
RefreshInterval: ptr.To(monitoringv1.Duration("60s")),
},
},
},
expectedError: false,
},
{
name: "Invalid RefreshInterval",
scrapeConfigSpec: monitoringv1alpha1.ScrapeConfigSpec{
EurekaSDConfigs: []monitoringv1alpha1.EurekaSDConfig{
{
Server: "http://localhost:8761/eureka",
RefreshInterval: ptr.To(monitoringv1.Duration("60g")),
},
},
},
expectedError: true,
},
}