Skip to content

Commit f09c127

Browse files
committed
Refine coverage quick wins
1 parent 6a0163c commit f09c127

12 files changed

Lines changed: 639 additions & 191 deletions

File tree

internal/controller/datadogagent/common/utils_test.go

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -114,52 +114,6 @@ func TestShouldCreateAgentLocalService(t *testing.T) {
114114
require.True(t, ShouldCreateAgentLocalService(&version.Info{GitVersion: "v1.22.0"}, false))
115115
}
116116

117-
func TestCommonVolumes(t *testing.T) {
118-
dda := testDatadogAgent()
119-
120-
require.NotNil(t, GetVolumeForConfig().EmptyDir)
121-
require.NotNil(t, GetVolumeForConfd().EmptyDir)
122-
require.NotNil(t, GetVolumeForChecksd().EmptyDir)
123-
require.NotNil(t, GetVolumeForRmCorechecks().EmptyDir)
124-
require.NotNil(t, GetVolumeForLogs().EmptyDir)
125-
require.NotNil(t, GetVolumeForTmp().EmptyDir)
126-
require.NotNil(t, GetVolumeForCertificates().EmptyDir)
127-
require.NotNil(t, GetVolumeForDogstatsd().EmptyDir)
128-
require.NotNil(t, GetVolumeForRunPath().EmptyDir)
129-
130-
authHostPath := GetVolumeForAuth(true)
131-
require.Equal(t, AuthVolumePath, authHostPath.HostPath.Path)
132-
require.Equal(t, corev1.HostPathDirectoryOrCreate, *authHostPath.HostPath.Type)
133-
require.NotNil(t, GetVolumeForAuth(false).EmptyDir)
134-
135-
require.Equal(t, "datadog-install-info", GetInstallInfoConfigMapName(dda))
136-
require.Equal(t, "datadog-install-info", GetVolumeInstallInfo(dda).ConfigMap.Name)
137-
require.Equal(t, "datadog-system-probe-seccomp", GetVolumeForSecurity(dda).ConfigMap.Name)
138-
require.Equal(t, RuntimeDirVolumePath, GetVolumeForRuntimeSocket().HostPath.Path)
139-
require.Equal(t, ProcdirHostPath, GetVolumeForProc().HostPath.Path)
140-
require.Equal(t, "/sys/fs/cgroup", GetVolumeForCgroups().HostPath.Path)
141-
require.Equal(t, SeccompRootPath, GetVolumeForSeccomp().HostPath.Path)
142-
}
143-
144-
func TestCommonVolumeMounts(t *testing.T) {
145-
require.Equal(t, ConfigVolumePath, GetVolumeMountForConfig().MountPath)
146-
require.True(t, GetVolumeMountForConfd().ReadOnly)
147-
require.True(t, GetVolumeMountForChecksd().ReadOnly)
148-
require.Equal(t, ConfigVolumePath+"/conf.d", GetVolumeMountForRmCorechecks().MountPath)
149-
require.True(t, GetVolumeMountForAuth(true).ReadOnly)
150-
require.False(t, GetVolumeMountForLogs().ReadOnly)
151-
require.False(t, GetVolumeMountForTmp().ReadOnly)
152-
require.False(t, GetVolumeMountForCertificates().ReadOnly)
153-
require.Equal(t, InstallInfoVolumeSubPath, GetVolumeMountForInstallInfo().SubPath)
154-
require.True(t, GetVolumeMountForProc().ReadOnly)
155-
require.True(t, GetVolumeMountForCgroups().ReadOnly)
156-
require.True(t, GetVolumeMountForDogstatsdSocket(true).ReadOnly)
157-
require.Equal(t, HostCriSocketPathPrefix+RuntimeDirVolumePath, GetVolumeMountForRuntimeSocket(false).MountPath)
158-
require.Equal(t, SeccompSecurityVolumePath, GetVolumeMountForSecurity().MountPath)
159-
require.Equal(t, SeccompRootVolumePath, GetVolumeMountForSeccomp().MountPath)
160-
require.Equal(t, RunPathVolumeMount, GetVolumeMountForRunPath().MountPath)
161-
}
162-
163117
func TestMergeAffinities(t *testing.T) {
164118
first := &corev1.Affinity{
165119
NodeAffinity: &corev1.NodeAffinity{
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2016-present Datadog, Inc.
5+
6+
package agent
7+
8+
import (
9+
"testing"
10+
"time"
11+
12+
"github.com/stretchr/testify/require"
13+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
"k8s.io/apimachinery/pkg/util/intstr"
15+
16+
apicommon "github.com/DataDog/datadog-operator/api/datadoghq/common"
17+
"github.com/DataDog/datadog-operator/pkg/constants"
18+
"github.com/DataDog/datadog-operator/pkg/kubernetes"
19+
)
20+
21+
func TestNewDaemonset(t *testing.T) {
22+
dda := &metav1.ObjectMeta{Name: "datadog", Namespace: "agents"}
23+
24+
daemonset := NewDaemonset(
25+
dda,
26+
&ExtendedDaemonsetOptions{MaxPodUnavailable: "25%"},
27+
constants.DefaultAgentResourceSuffix,
28+
"datadog-agent",
29+
"7.78.0",
30+
nil,
31+
"datadog-agent",
32+
)
33+
34+
require.Equal(t, "datadog-agent", daemonset.Name)
35+
require.Equal(t, "agents", daemonset.Namespace)
36+
require.Equal(t, "datadog-agent", daemonset.Labels[kubernetes.AppKubernetesInstanceLabelKey])
37+
require.Equal(t, constants.DefaultAgentResourceSuffix, daemonset.Labels[apicommon.AgentDeploymentComponentLabelKey])
38+
require.Equal(t, intstr.FromString("25%"), *daemonset.Spec.UpdateStrategy.RollingUpdate.MaxUnavailable)
39+
require.Equal(t, map[string]string{
40+
kubernetes.AppKubernetesInstanceLabelKey: "datadog-agent",
41+
apicommon.AgentDeploymentComponentLabelKey: constants.DefaultAgentResourceSuffix,
42+
}, daemonset.Spec.Selector.MatchLabels)
43+
}
44+
45+
func TestNewExtendedDaemonset(t *testing.T) {
46+
dda := &metav1.ObjectMeta{Name: "datadog", Namespace: "agents"}
47+
48+
extendedDaemonSet := NewExtendedDaemonset(
49+
dda,
50+
&ExtendedDaemonsetOptions{
51+
MaxPodUnavailable: "25%",
52+
MaxPodSchedulerFailure: "10%",
53+
SlowStartAdditiveIncrease: "2",
54+
CanaryDuration: 5 * time.Minute,
55+
CanaryReplicas: "2",
56+
CanaryAutoPauseEnabled: true,
57+
CanaryAutoPauseMaxRestarts: 3,
58+
CanaryAutoFailEnabled: true,
59+
CanaryAutoFailMaxRestarts: 4,
60+
CanaryAutoPauseMaxSlowStartDuration: time.Minute,
61+
},
62+
constants.DefaultAgentResourceSuffix,
63+
"datadog-agent",
64+
"7.78.0",
65+
nil,
66+
)
67+
68+
require.Equal(t, "datadog-agent", extendedDaemonSet.Name)
69+
require.Equal(t, "agents", extendedDaemonSet.Namespace)
70+
require.Equal(t, "25%", extendedDaemonSet.Spec.Strategy.RollingUpdate.MaxUnavailable.StrVal)
71+
require.Equal(t, "10%", extendedDaemonSet.Spec.Strategy.RollingUpdate.MaxPodSchedulerFailure.StrVal)
72+
require.Equal(t, intstr.FromInt(2), *extendedDaemonSet.Spec.Strategy.RollingUpdate.SlowStartAdditiveIncrease)
73+
require.Equal(t, 5*time.Minute, extendedDaemonSet.Spec.Strategy.Canary.Duration.Duration)
74+
require.Equal(t, intstr.FromInt(2), *extendedDaemonSet.Spec.Strategy.Canary.Replicas)
75+
require.True(t, *extendedDaemonSet.Spec.Strategy.Canary.AutoPause.Enabled)
76+
require.Equal(t, int32(3), *extendedDaemonSet.Spec.Strategy.Canary.AutoPause.MaxRestarts)
77+
require.True(t, *extendedDaemonSet.Spec.Strategy.Canary.AutoFail.Enabled)
78+
require.Equal(t, int32(4), *extendedDaemonSet.Spec.Strategy.Canary.AutoFail.MaxRestarts)
79+
require.Equal(t, time.Minute, extendedDaemonSet.Spec.Strategy.Canary.AutoPause.MaxSlowStartDuration.Duration)
80+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2016-present Datadog, Inc.
5+
6+
package agent
7+
8+
import (
9+
"testing"
10+
11+
"github.com/stretchr/testify/require"
12+
rbacv1 "k8s.io/api/rbac/v1"
13+
14+
"github.com/DataDog/datadog-operator/pkg/kubernetes/rbac"
15+
)
16+
17+
func TestGetDefaultAgentClusterRolePolicyRules(t *testing.T) {
18+
withNonResourceRules := GetDefaultAgentClusterRolePolicyRules(false, false)
19+
withoutNonResourceRules := GetDefaultAgentClusterRolePolicyRules(true, false)
20+
21+
require.Len(t, withNonResourceRules, len(withoutNonResourceRules)+1)
22+
require.Contains(t, withNonResourceRules, getMetricsEndpointPolicyRule())
23+
require.NotContains(t, withoutNonResourceRules, getMetricsEndpointPolicyRule())
24+
}
25+
26+
func TestGetKubeletPolicyRule(t *testing.T) {
27+
require.Equal(t, rbacv1.PolicyRule{
28+
APIGroups: []string{rbac.CoreAPIGroup},
29+
Resources: []string{
30+
rbac.NodeMetricsResource,
31+
rbac.NodeSpecResource,
32+
rbac.NodeStats,
33+
rbac.NodePodsResource,
34+
rbac.NodeHealthzResource,
35+
rbac.NodeConfigzResource,
36+
rbac.NodeLogsResource,
37+
},
38+
Verbs: []string{rbac.GetVerb},
39+
}, getKubeletPolicyRule(true))
40+
41+
require.Equal(t, rbacv1.PolicyRule{
42+
APIGroups: []string{rbac.CoreAPIGroup},
43+
Resources: []string{
44+
rbac.NodeMetricsResource,
45+
rbac.NodeSpecResource,
46+
rbac.NodeProxyResource,
47+
rbac.NodeStats,
48+
},
49+
Verbs: []string{rbac.GetVerb},
50+
}, getKubeletPolicyRule(false))
51+
}

internal/controller/datadogagent/component/clusterchecksrunner/default_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@ package clusterchecksrunner
88
import (
99
"testing"
1010

11+
apicommon "github.com/DataDog/datadog-operator/api/datadoghq/common"
1112
"github.com/DataDog/datadog-operator/api/datadoghq/v2alpha1"
13+
"github.com/DataDog/datadog-operator/pkg/constants"
1214
"github.com/stretchr/testify/assert"
15+
"github.com/stretchr/testify/require"
1316
policyv1 "k8s.io/api/policy/v1"
17+
policyv1beta1 "k8s.io/api/policy/v1beta1"
1418
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1519
"k8s.io/apimachinery/pkg/util/intstr"
1620
)
@@ -38,3 +42,43 @@ func Test_getPodDisruptionBudget(t *testing.T) {
3842
assert.Equal(t, intstr.FromInt(pdbMaxUnavailableInstances), *testpdb.Spec.MaxUnavailable)
3943
assert.Nil(t, testpdb.Spec.MinAvailable)
4044
}
45+
46+
func Test_getPodDisruptionBudget_v1beta1(t *testing.T) {
47+
dda := v2alpha1.DatadogAgent{
48+
ObjectMeta: metav1.ObjectMeta{
49+
Name: "my-datadog-agent",
50+
Namespace: "some-namespace",
51+
},
52+
}
53+
54+
testpdb := GetClusterChecksRunnerPodDisruptionBudget(&dda, true).(*policyv1beta1.PodDisruptionBudget)
55+
56+
require.Equal(t, "my-datadog-agent-cluster-checks-runner-pdb", testpdb.Name)
57+
require.Equal(t, "some-namespace", testpdb.Namespace)
58+
require.Equal(t, intstr.FromInt(pdbMaxUnavailableInstances), *testpdb.Spec.MaxUnavailable)
59+
require.Equal(t, map[string]string{
60+
apicommon.AgentDeploymentNameLabelKey: "my-datadog-agent",
61+
apicommon.AgentDeploymentComponentLabelKey: constants.DefaultClusterChecksRunnerResourceSuffix,
62+
}, testpdb.Spec.Selector.MatchLabels)
63+
}
64+
65+
func TestClusterChecksRunnerDefaultDeployment(t *testing.T) {
66+
dda := v2alpha1.DatadogAgent{
67+
ObjectMeta: metav1.ObjectMeta{
68+
Name: "my-datadog-agent",
69+
Namespace: "some-namespace",
70+
},
71+
}
72+
73+
deployment := NewDefaultClusterChecksRunnerDeployment(&dda, &dda.Spec)
74+
75+
require.Equal(t, "my-datadog-agent-cluster-checks-runner", deployment.Name)
76+
require.Equal(t, "some-namespace", deployment.Namespace)
77+
require.NotNil(t, deployment.Spec.Replicas)
78+
require.Equal(t, int32(defaultClusterChecksRunnerReplicas), *deployment.Spec.Replicas)
79+
require.Equal(t, deployment.Labels, deployment.Spec.Template.Labels)
80+
require.Equal(t, deployment.Annotations, deployment.Spec.Template.Annotations)
81+
require.Equal(t, getDefaultServiceAccountName(&dda), deployment.Spec.Template.Spec.ServiceAccountName)
82+
require.Len(t, deployment.Spec.Template.Spec.Containers, 1)
83+
require.Equal(t, string(apicommon.ClusterChecksRunnersContainerName), deployment.Spec.Template.Spec.Containers[0].Name)
84+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Unless explicitly stated otherwise all files in this repository are licensed
2+
// under the Apache License Version 2.0.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
// Copyright 2016-present Datadog, Inc.
5+
6+
package clusterchecksrunner
7+
8+
import (
9+
"testing"
10+
11+
"github.com/stretchr/testify/require"
12+
rbacv1 "k8s.io/api/rbac/v1"
13+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
15+
"github.com/DataDog/datadog-operator/pkg/kubernetes/rbac"
16+
)
17+
18+
func TestGetDefaultClusterChecksRunnerClusterRolePolicyRules(t *testing.T) {
19+
dda := &metav1.ObjectMeta{Name: "datadog"}
20+
21+
withNonResourceRules := GetDefaultClusterChecksRunnerClusterRolePolicyRules(dda, false)
22+
withoutNonResourceRules := GetDefaultClusterChecksRunnerClusterRolePolicyRules(dda, true)
23+
24+
require.Len(t, withNonResourceRules, len(withoutNonResourceRules)+1)
25+
require.Contains(t, withNonResourceRules, rbacv1.PolicyRule{
26+
NonResourceURLs: []string{rbac.MetricsURL, rbac.MetricsSLIsURL},
27+
Verbs: []string{rbac.GetVerb},
28+
})
29+
require.NotContains(t, withoutNonResourceRules, rbacv1.PolicyRule{
30+
NonResourceURLs: []string{rbac.MetricsURL, rbac.MetricsSLIsURL},
31+
Verbs: []string{rbac.GetVerb},
32+
})
33+
}

0 commit comments

Comments
 (0)