@@ -5,6 +5,7 @@ package basic
55import (
66 "context"
77 "path"
8+ "strconv"
89 "testing"
910 "time"
1011
@@ -57,7 +58,6 @@ func TestBasicFlowCapture(t *testing.T) {
5758// (2) once packets are evicted, no more flows are aggregated on top of them.
5859func TestSinglePacketFlows (t * testing.T ) {
5960 var pingerIP , serverPodIP string
60- var latestFlowMS time.Time
6161 testCluster .TestEnv ().Test (t , features .New ("single-packet flow capture" ).Setup (
6262 func (ctx context.Context , t * testing.T , cfg * envconf.Config ) context.Context {
6363 kclient , err := kubernetes .NewForConfig (cfg .Client ().RESTConfig ())
@@ -82,54 +82,34 @@ func TestSinglePacketFlows(t *testing.T) {
8282 }, test .Interval (time .Second ))
8383 return ctx
8484 },
85- ).Assess ("correctness of single, small ICMP packet from pinger to server" ,
85+ ).Assess ("correctness of single, sequential small ICMP packets from pinger to server" ,
8686 func (ctx context.Context , t * testing.T , cfg * envconf.Config ) context.Context {
8787 pods , err := tester .NewPods (cfg )
8888 require .NoError (t , err )
8989
90- logrus .WithField ("destinationIP" , serverPodIP ).Info ("Sending ICMP packet" )
91- stdOut , stdErr , err := pods .Execute (ctx , namespace , "pinger" ,
92- "ping" , "-c" , "1" , serverPodIP )
93- require .NoError (t , err )
94- logrus .WithFields (logrus.Fields {"stdOut" : stdOut , "stdErr" : stdErr }).Info ("ping sent" )
95-
96- sent , recv := getPingFlows (t , time .Now ().Add (- time .Minute ))
97-
98- assert .Equal (t , pingerIP , sent ["SrcAddr" ])
99- assert .Equal (t , serverPodIP , sent ["DstAddr" ])
100- assert .EqualValues (t , 98 , sent ["Bytes" ]) // default ping data size + IP+ICMP headers
101- assert .EqualValues (t , 1 , sent ["Packets" ])
102- assert .Equal (t , pingerIP , recv ["DstAddr" ])
103- assert .Equal (t , serverPodIP , recv ["SrcAddr" ])
104- assert .EqualValues (t , 98 , recv ["Bytes" ]) // default ping data size + IP+ICMP headers
105- assert .EqualValues (t , 1 , recv ["Packets" ])
90+ const ipIcmpHeadersLen = 42
91+ latestFlowMS := time .Now ().Add (- time .Minute )
92+ for pktLen := 50 ; pktLen <= 60 ; pktLen ++ {
93+ logrus .WithField ("destinationIP" , serverPodIP ).Info ("Sending ICMP packet" )
94+ stdOut , stdErr , err := pods .Execute (ctx , namespace , "pinger" ,
95+ "ping" , "-s" , strconv .Itoa (pktLen ), "-c" , "1" , serverPodIP )
96+ require .NoError (t , err )
97+ logrus .WithFields (logrus.Fields {"stdOut" : stdOut , "stdErr" : stdErr }).Info ("ping sent" )
10698
107- latestFlowMS = asTime ( recv [ "TimeFlowEndMs" ] )
99+ sent , recv := getPingFlows ( t , latestFlowMS )
108100
109- return ctx
110- },
111- ).Assess ("correctness of another ICMP packet contained in another flow" ,
112- func (ctx context.Context , t * testing.T , cfg * envconf.Config ) context.Context {
113- pods , err := tester .NewPods (cfg )
114- require .NoError (t , err )
115-
116- logrus .WithField ("destinationIP" , serverPodIP ).Info ("Sending ICMP packet" )
117- stdOut , stdErr , err := pods .Execute (ctx , namespace , "pinger" ,
118- "ping" , "-s" , "100" , "-c" , "1" , serverPodIP )
119- require .NoError (t , err )
120- logrus .WithFields (logrus.Fields {"stdOut" : stdOut , "stdErr" : stdErr }).Info ("ping sent" )
101+ assert .Equal (t , pingerIP , sent ["SrcAddr" ])
102+ assert .Equal (t , serverPodIP , sent ["DstAddr" ])
103+ assert .EqualValues (t , pktLen + ipIcmpHeadersLen , sent ["Bytes" ])
104+ assert .EqualValues (t , 1 , sent ["Packets" ])
105+ assert .Equal (t , pingerIP , recv ["DstAddr" ])
106+ assert .Equal (t , serverPodIP , recv ["SrcAddr" ])
107+ assert .EqualValues (t , pktLen + ipIcmpHeadersLen , recv ["Bytes" ])
108+ assert .EqualValues (t , 1 , recv ["Packets" ])
121109
122- // We filter by time to avoid getting twice the same flows
123- sent , recv := getPingFlows ( t , latestFlowMS )
110+ latestFlowMS = asTime ( recv [ "TimeFlowEndMs" ])
111+ }
124112
125- assert .Equal (t , pingerIP , sent ["SrcAddr" ])
126- assert .Equal (t , serverPodIP , sent ["DstAddr" ])
127- assert .EqualValues (t , 142 , sent ["Bytes" ]) // 100-byte data size + IP+ICMP headers
128- assert .EqualValues (t , 1 , sent ["Packets" ])
129- assert .Equal (t , pingerIP , recv ["DstAddr" ])
130- assert .Equal (t , serverPodIP , recv ["SrcAddr" ])
131- assert .EqualValues (t , 142 , recv ["Bytes" ]) // 100-byte data size + IP+ICMP headers
132- assert .EqualValues (t , 1 , recv ["Packets" ])
133113 return ctx
134114 },
135115 ).Feature ())
0 commit comments