Skip to content

Commit e04524b

Browse files
committed
pty for int tests
1 parent bdf2ea6 commit e04524b

File tree

2 files changed

+67
-50
lines changed

2 files changed

+67
-50
lines changed

e2e/integration-tests/cli.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package integrationtests
22

33
import (
44
"context"
5+
"errors"
56
"io/fs"
67
"log"
78
"os"
@@ -12,13 +13,16 @@ import (
1213
"k8s.io/client-go/kubernetes"
1314
)
1415

15-
func isCollectorReady(clientset *kubernetes.Clientset, cliNS string) (bool, error) {
16+
func isCollector(clientset *kubernetes.Clientset, cliNS string, ready bool) (bool, error) {
1617
err := wait.PollUntilContextTimeout(context.Background(), 10*time.Second, 300*time.Second, false, func(context.Context) (done bool, err error) {
1718
collectorPod, err := getNamespacePods(clientset, cliNS, &metav1.ListOptions{FieldSelector: "status.phase=Running", LabelSelector: "run=collector"})
1819
if err != nil {
1920
return false, err
2021
}
21-
return len(collectorPod) > 0, nil
22+
if ready {
23+
return len(collectorPod) > 0, nil
24+
}
25+
return len(collectorPod) == 0, nil
2226
})
2327
if err != nil {
2428
return false, err
@@ -28,7 +32,6 @@ func isCollectorReady(clientset *kubernetes.Clientset, cliNS string) (bool, erro
2832

2933
func isDaemonsetReady(clientset *kubernetes.Clientset, daemonsetName string, cliNS string) (bool, error) {
3034
err := wait.PollUntilContextTimeout(context.Background(), 10*time.Second, 300*time.Second, false, func(context.Context) (done bool, err error) {
31-
3235
cliDaemonset, err := getDaemonSet(clientset, daemonsetName, cliNS)
3336
if err != nil {
3437
return false, err
@@ -42,7 +45,7 @@ func isDaemonsetReady(clientset *kubernetes.Clientset, daemonsetName string, cli
4245
}
4346

4447
func isCLIReady(clientset *kubernetes.Clientset, cliNS string) (bool, error) {
45-
collectorReady, err := isCollectorReady(clientset, cliNS)
48+
collectorReady, err := isCollector(clientset, cliNS, true)
4649
if err != nil {
4750
return false, err
4851
}
@@ -56,6 +59,21 @@ func isCLIReady(clientset *kubernetes.Clientset, cliNS string) (bool, error) {
5659
return collectorReady && daemonsetReady, nil
5760
}
5861

62+
func isCLIDone(clientset *kubernetes.Clientset, cliNS string) (bool, error) {
63+
ready, err := isCLIReady(clientset, cliNS)
64+
if err != nil {
65+
return false, err
66+
} else if !ready {
67+
return false, errors.New("CLI never went ready")
68+
}
69+
collectorDone, err := isCollector(clientset, cliNS, false)
70+
if err != nil {
71+
return false, err
72+
}
73+
log.Printf("Collector done: %v", collectorDone)
74+
return collectorDone, nil
75+
}
76+
5977
// get latest flows.json file
6078
func getFlowsJSONFile() (string, error) {
6179
// var files []fs.DirEntry

e2e/integration-tests/integration_test.go

Lines changed: 45 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,33 @@ import (
66
"os"
77
"os/exec"
88

9+
"github.com/creack/pty"
910
g "github.com/onsi/ginkgo/v2"
1011
o "github.com/onsi/gomega"
1112
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1213
)
1314

14-
var _ = g.Describe("NetObserv CLI e2e integration test suite", g.Serial, func() {
15+
var _ = g.Describe("NetObserv CLI e2e integration test suite", g.Ordered, func() {
1516
cliNS := "netobserv-cli"
1617

18+
// cleanup after each test
19+
g.AfterEach(func() {
20+
cliArgs := []string{"cleanup"}
21+
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
22+
err := cmd.Run()
23+
o.Expect(err).NotTo(o.HaveOccurred())
24+
})
25+
1726
g.It("OCP-73458: Verify all CLI pods are deployed", g.Label("Sanity"), func() {
1827
cliArgs := []string{"flows", "--copy=false"}
1928
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
20-
err := cmd.Start()
29+
_, err := pty.Start(cmd)
2130
o.Expect(err).NotTo(o.HaveOccurred())
22-
// cleanup()
23-
defer func() {
24-
cliArgs := []string{"cleanup"}
25-
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
26-
err := cmd.Run()
27-
o.Expect(err).NotTo(o.HaveOccurred())
28-
}()
31+
2932
var allPods []string
3033
clientset, err := getNewClient()
3134
o.Expect(err).NotTo(o.HaveOccurred())
35+
3236
nodes, err := getClusterNodes(clientset, &metav1.ListOptions{})
3337
// agent pods + collector pods
3438
totalExpectedPods := len(nodes) + 1
@@ -45,24 +49,25 @@ var _ = g.Describe("NetObserv CLI e2e integration test suite", g.Serial, func()
4549
nsfilter := "openshift-monitoring"
4650
cliArgs := []string{"flows", fmt.Sprintf("--query=SrcK8S_Namespace=~\"%s\"", nsfilter), "--copy=true", "--max-bytes=500000", "--max-time=1m"}
4751
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
48-
err := cmd.Run()
52+
_, err := pty.Start(cmd)
4953
o.Expect(err).NotTo(o.HaveOccurred())
50-
// cleanup()
51-
defer func() {
52-
cliArgs := []string{"cleanup"}
53-
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
54-
err := cmd.Run()
55-
o.Expect(err).NotTo(o.HaveOccurred())
56-
}()
57-
o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv returned non-zero exit code")
54+
55+
clientset, err := getNewClient()
56+
o.Expect(err).NotTo(o.HaveOccurred())
57+
_, err = isCLIDone(clientset, cliNS)
58+
o.Expect(err).NotTo(o.HaveOccurred(), "CLI didn't finished")
59+
60+
// o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv returned non-zero exit code")
5861
flowsJsonfile, err := getFlowsJSONFile()
5962
o.Expect(err).NotTo(o.HaveOccurred())
6063
flowsFile, err := os.Open(flowsJsonfile)
6164
o.Expect(err).NotTo(o.HaveOccurred())
6265
defer flowsFile.Close()
66+
6367
decoder := json.NewDecoder(flowsFile)
6468
_, err = decoder.Token()
6569
o.Expect(err).NotTo(o.HaveOccurred())
70+
6671
var flow struct {
6772
SrcK8sNamespace string `json:"SrcK8S_Namespace"`
6873
}
@@ -79,27 +84,28 @@ var _ = g.Describe("NetObserv CLI e2e integration test suite", g.Serial, func()
7984
// capture upto 500KB with sampling=1
8085
cliArgs := []string{"flows", "--sampling=1", "--copy=true", "--max-bytes=500000", "--max-time=1m"}
8186
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
82-
err := cmd.Run()
87+
_, err := pty.Start(cmd)
8388
o.Expect(err).NotTo(o.HaveOccurred())
84-
// cleanup()
85-
defer func() {
86-
cliArgs := []string{"cleanup"}
87-
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
88-
err := cmd.Run()
89-
o.Expect(err).NotTo(o.HaveOccurred())
90-
}()
91-
o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv returned non-zero exit code")
89+
90+
clientset, err := getNewClient()
91+
o.Expect(err).NotTo(o.HaveOccurred())
92+
_, err = isCLIDone(clientset, cliNS)
93+
o.Expect(err).NotTo(o.HaveOccurred(), "CLI didn't finished")
94+
95+
// o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv returned non-zero exit code")
9296
flowsJsonfile, err := getFlowsJSONFile()
9397
o.Expect(err).NotTo(o.HaveOccurred())
9498
flowsFile, err := os.Open(flowsJsonfile)
9599
o.Expect(err).NotTo(o.HaveOccurred())
96100
defer flowsFile.Close()
101+
97102
decoder := json.NewDecoder(flowsFile)
98103
_, err = decoder.Token()
99104
o.Expect(err).NotTo(o.HaveOccurred())
100105
var flow struct {
101106
Sampling float64 `json:"Sampling"`
102107
}
108+
103109
atLeastOneFlowFound := false
104110
for decoder.More() {
105111
err := decoder.Decode(&flow)
@@ -115,27 +121,28 @@ var _ = g.Describe("NetObserv CLI e2e integration test suite", g.Serial, func()
115121
// capture upto 500KB with exclude_interfaces=genev_sys_6081
116122
cliArgs := []string{"flows", "--exclude_interfaces=genev_sys_6081", "--copy=true", "--max-bytes=500000", "--max-time=1m"}
117123
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
118-
err := cmd.Run()
124+
_, err := pty.Start(cmd)
119125
o.Expect(err).NotTo(o.HaveOccurred())
120-
// cleanup()
121-
defer func() {
122-
cliArgs := []string{"cleanup"}
123-
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
124-
err := cmd.Run()
125-
o.Expect(err).NotTo(o.HaveOccurred())
126-
}()
127-
o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv returned non-zero exit code")
126+
127+
clientset, err := getNewClient()
128+
o.Expect(err).NotTo(o.HaveOccurred())
129+
_, err = isCLIDone(clientset, cliNS)
130+
o.Expect(err).NotTo(o.HaveOccurred(), "CLI didn't finished")
131+
132+
// o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv returned non-zero exit code")
128133
flowsJsonfile, err := getFlowsJSONFile()
129134
o.Expect(err).NotTo(o.HaveOccurred())
130135
flowsFile, err := os.Open(flowsJsonfile)
131136
o.Expect(err).NotTo(o.HaveOccurred())
132137
defer flowsFile.Close()
138+
133139
decoder := json.NewDecoder(flowsFile)
134140
_, err = decoder.Token()
135141
o.Expect(err).NotTo(o.HaveOccurred())
136142
var flow struct {
137143
Interfaces []string `json:"Interfaces"`
138144
}
145+
139146
for decoder.More() {
140147
err := decoder.Decode(&flow)
141148
o.Expect(err).NotTo(o.HaveOccurred())
@@ -150,17 +157,9 @@ var _ = g.Describe("NetObserv CLI e2e integration test suite", g.Serial, func()
150157
// Run metrics command
151158
cliArgs := []string{"metrics"}
152159
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
153-
err := cmd.Run()
160+
_, err := pty.Start(cmd)
154161
o.Expect(err).NotTo(o.HaveOccurred())
155-
o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv metrics command returned non-zero exit code")
156-
157-
// cleanup()
158-
defer func() {
159-
cliArgs := []string{"cleanup"}
160-
cmd := exec.Command(ocNetObservBinPath, cliArgs...)
161-
err := cmd.Run()
162-
o.Expect(err).NotTo(o.HaveOccurred())
163-
}()
162+
// o.Expect(cmd.ProcessState.ExitCode()).To(o.BeNumerically("==", 0), "oc-netobserv metrics command returned non-zero exit code")
164163

165164
clientset, err := getNewClient()
166165
o.Expect(err).NotTo(o.HaveOccurred())

0 commit comments

Comments
 (0)