1
2
3
4
19
20 package winstats
21
22 import (
23 "testing"
24 "time"
25
26 "k8s.io/apimachinery/pkg/util/wait"
27 )
28
29 func TestPerfCounter(t *testing.T) {
30 testCases := map[string]struct {
31 counter string
32 skipCheck bool
33 expectErr bool
34 expectedErrMsg string
35 }{
36 "CPU Query": {
37 counter: cpuQuery,
38 },
39 "Memory Prvate Working Set Query": {
40 counter: memoryPrivWorkingSetQuery,
41 },
42 "Memory Committed Bytes Query": {
43 counter: memoryCommittedBytesQuery,
44 },
45 "Net Adapter Packets Received/sec Query": {
46 counter: packetsReceivedPerSecondQuery,
47 skipCheck: true,
48 },
49 "Net Adapter Packets Sent/sec Query": {
50 counter: packetsSentPerSecondQuery,
51 skipCheck: true,
52 },
53 "Net Adapter Bytes Received/sec Query": {
54 counter: bytesReceivedPerSecondQuery,
55 skipCheck: true,
56 },
57 "Net Adapter Bytes Sent/sec Query": {
58 counter: bytesSentPerSecondQuery,
59 skipCheck: true,
60 },
61 "Net Adapter Packets Received Discarded Query": {
62 counter: packetsReceivedDiscardedQuery,
63 skipCheck: true,
64 },
65 "Net Adapter Packets Received Errors Query": {
66 counter: packetsReceivedErrorsQuery,
67 skipCheck: true,
68 },
69 "Net Adapter Packets Outbound Discarded Query": {
70 counter: packetsOutboundDiscardedQuery,
71 skipCheck: true,
72 },
73 "Net Adapter Packets Outbound Errors Query": {
74 counter: packetsOutboundErrorsQuery,
75 skipCheck: true,
76 },
77 "Invalid Query": {
78 counter: "foo",
79 expectErr: true,
80 expectedErrMsg: "unable to add process counter: foo. Error code is c0000bc0",
81 },
82 }
83
84 for name, tc := range testCases {
85 t.Run(name, func(t *testing.T) {
86 counter, err := newPerfCounter(tc.counter)
87 if tc.expectErr {
88 if err == nil || err.Error() != tc.expectedErrMsg {
89 t.Fatalf("expected error message `%s` but got `%v`", tc.expectedErrMsg, err)
90 }
91 return
92 }
93
94
95
96 if tc.skipCheck {
97 return
98 }
99
100
101 if pollErr := wait.Poll(100*time.Millisecond, 5*perfCounterUpdatePeriod, func() (bool, error) {
102 data, err := counter.getData()
103 if err != nil {
104 return false, err
105 }
106
107 if data != 0 {
108 return true, nil
109 }
110
111 return false, nil
112 }); pollErr != nil {
113 t.Fatalf("Encountered error: `%v'", pollErr)
114 return
115 }
116
117
118 if pollErr := wait.Poll(100*time.Millisecond, 5*perfCounterUpdatePeriod, func() (bool, error) {
119 dataList, err := counter.getDataList()
120 if err != nil {
121 return false, err
122 }
123
124 for _, value := range dataList {
125 if value != 0 {
126 return true, nil
127 }
128 }
129
130 return false, nil
131 }); pollErr != nil {
132 t.Fatalf("Encountered error: `%v'", pollErr)
133 }
134 })
135 }
136 }
137
View as plain text