Skip to content

Commit cbe843a

Browse files
authored
add test for k8s events option (#1670)
* add test for k8s events option * fix typo
1 parent 0160e16 commit cbe843a

File tree

9 files changed

+848
-55
lines changed

9 files changed

+848
-55
lines changed

.github/workflows/functional_test_v2.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ jobs:
4444
- functional
4545
- histogram
4646
- configuration_switching
47+
- k8sevents
4748
- istio
4849
runs-on: ubuntu-latest
4950
steps:

functional_tests/common.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@ import (
1010
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver"
1111
"go.opentelemetry.io/collector/component/componenttest"
1212
"go.opentelemetry.io/collector/consumer/consumertest"
13+
"go.opentelemetry.io/collector/pdata/plog"
1314
"go.opentelemetry.io/collector/pdata/pmetric"
1415
"go.opentelemetry.io/collector/pdata/ptrace"
1516
"go.opentelemetry.io/collector/receiver/receivertest"
17+
v1 "k8s.io/api/core/v1"
18+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
19+
"k8s.io/client-go/kubernetes"
1620
"os"
1721
"path/filepath"
1822
"runtime"
@@ -106,6 +110,11 @@ func writeNewExpectedMetricsResult(t *testing.T, file string, metric *pmetric.Me
106110
require.NoError(t, golden.WriteMetrics(t, filepath.Join("results", filepath.Base(file)), *metric))
107111
}
108112

113+
func writeNewExpectedLogsResult(t *testing.T, file string, log *plog.Logs) {
114+
require.NoError(t, os.MkdirAll("results", 0755))
115+
require.NoError(t, golden.WriteLogs(t, filepath.Join("results", filepath.Base(file)), *log))
116+
}
117+
109118
func setupSignalfxReceiver(t *testing.T, port int) *consumertest.MetricsSink {
110119
mc := new(consumertest.MetricsSink)
111120
f := signalfxreceiver.NewFactory()
@@ -123,3 +132,57 @@ func setupSignalfxReceiver(t *testing.T, port int) *consumertest.MetricsSink {
123132

124133
return mc
125134
}
135+
136+
func checkPodsReady(t *testing.T, clientset *kubernetes.Clientset, namespace, labelSelector string, timeout time.Duration) {
137+
require.Eventually(t, func() bool {
138+
pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{
139+
LabelSelector: labelSelector,
140+
})
141+
require.NoError(t, err)
142+
if len(pods.Items) == 0 {
143+
return false
144+
}
145+
for _, pod := range pods.Items {
146+
if pod.Status.Phase != v1.PodRunning {
147+
return false
148+
}
149+
ready := false
150+
for _, condition := range pod.Status.Conditions {
151+
if condition.Type == v1.PodReady && condition.Status == v1.ConditionTrue {
152+
ready = true
153+
break
154+
}
155+
}
156+
if !ready {
157+
return false
158+
}
159+
}
160+
return true
161+
}, timeout, 5*time.Second, "Pods in namespace %s with label %s are not ready", namespace, labelSelector)
162+
}
163+
164+
func createNamespace(t *testing.T, clientset *kubernetes.Clientset, name string) {
165+
ns := &v1.Namespace{
166+
ObjectMeta: metav1.ObjectMeta{
167+
Name: name,
168+
},
169+
}
170+
_, err := clientset.CoreV1().Namespaces().Create(context.TODO(), ns, metav1.CreateOptions{})
171+
require.NoError(t, err, "failed to create namespace %s", name)
172+
173+
require.Eventually(t, func() bool {
174+
_, err := clientset.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{})
175+
return err == nil
176+
}, 1*time.Minute, 5*time.Second, "namespace %s is not available", name)
177+
}
178+
179+
func labelNamespace(t *testing.T, clientset *kubernetes.Clientset, name, key, value string) {
180+
ns, err := clientset.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{})
181+
require.NoError(t, err)
182+
if ns.Labels == nil {
183+
ns.Labels = make(map[string]string)
184+
}
185+
ns.Labels[key] = value
186+
_, err = clientset.CoreV1().Namespaces().Update(context.TODO(), ns, metav1.UpdateOptions{})
187+
require.NoError(t, err)
188+
}

functional_tests/istio_test.go

Lines changed: 2 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Copyright Splunk Inc.
2+
// SPDX-License-Identifier: Apache-2.0
13
//go:build istio
24

35
package functional_tests
@@ -29,7 +31,6 @@ import (
2931
"helm.sh/helm/v3/pkg/action"
3032
"helm.sh/helm/v3/pkg/chart/loader"
3133
"helm.sh/helm/v3/pkg/kube"
32-
"k8s.io/api/core/v1"
3334
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3435
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
3536
"k8s.io/apimachinery/pkg/types"
@@ -272,34 +273,6 @@ func downloadIstio(t *testing.T, version string) string {
272273
return istioctlPath
273274
}
274275

275-
func checkPodsReady(t *testing.T, clientset *kubernetes.Clientset, namespace, labelSelector string, timeout time.Duration) {
276-
require.Eventually(t, func() bool {
277-
pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{
278-
LabelSelector: labelSelector,
279-
})
280-
require.NoError(t, err)
281-
if len(pods.Items) == 0 {
282-
return false
283-
}
284-
for _, pod := range pods.Items {
285-
if pod.Status.Phase != v1.PodRunning {
286-
return false
287-
}
288-
ready := false
289-
for _, condition := range pod.Status.Conditions {
290-
if condition.Type == v1.PodReady && condition.Status == v1.ConditionTrue {
291-
ready = true
292-
break
293-
}
294-
}
295-
if !ready {
296-
return false
297-
}
298-
}
299-
return true
300-
}, timeout, 5*time.Second, "Pods in namespace %s with label %s are not ready", namespace, labelSelector)
301-
}
302-
303276
func runCommand(t *testing.T, command string) {
304277
cmd := exec.Command("sh", "-c", command)
305278
cmd.Stdout = os.Stdout
@@ -348,32 +321,6 @@ func createObjectFromURL(t *testing.T, config string, url string) {
348321
}
349322
}
350323

351-
func createNamespace(t *testing.T, clientset *kubernetes.Clientset, name string) {
352-
ns := &v1.Namespace{
353-
ObjectMeta: metav1.ObjectMeta{
354-
Name: name,
355-
},
356-
}
357-
_, err := clientset.CoreV1().Namespaces().Create(context.TODO(), ns, metav1.CreateOptions{})
358-
require.NoError(t, err, "failed to create namespace %s", name)
359-
360-
require.Eventually(t, func() bool {
361-
_, err := clientset.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{})
362-
return err == nil
363-
}, 1*time.Minute, 5*time.Second, "namespace %s is not available", name)
364-
}
365-
366-
func labelNamespace(t *testing.T, clientset *kubernetes.Clientset, name, key, value string) {
367-
ns, err := clientset.CoreV1().Namespaces().Get(context.TODO(), name, metav1.GetOptions{})
368-
require.NoError(t, err)
369-
if ns.Labels == nil {
370-
ns.Labels = make(map[string]string)
371-
}
372-
ns.Labels[key] = value
373-
_, err = clientset.CoreV1().Namespaces().Update(context.TODO(), ns, metav1.UpdateOptions{})
374-
require.NoError(t, err)
375-
}
376-
377324
func sendHTTPRequest(t *testing.T, client *http.Client, url, host, header, path string) {
378325
req, err := http.NewRequest("GET", url, nil)
379326
require.NoError(t, err)

0 commit comments

Comments
 (0)