4949		DstPort : 456 ,
5050		IfIndex : 3 ,
5151	}
52+ 	key1Dupe  =  ebpf.BpfFlowId {
53+ 		SrcPort : 123 ,
54+ 		DstPort : 456 ,
55+ 		IfIndex : 4 ,
56+ 	}
5257
5358	key2  =  ebpf.BpfFlowId {
5459		SrcPort : 333 ,
@@ -66,7 +71,7 @@ func TestFlowsAgent_Deduplication(t *testing.T) {
6671	})
6772
6873	exported  :=  export .Get (t , timeout )
69- 	assert .Len (t , exported , 1 )
74+ 	assert .Len (t , exported , 2 )
7075
7176	receivedKeys  :=  map [ebpf.BpfFlowId ]struct {}{}
7277
@@ -76,11 +81,21 @@ func TestFlowsAgent_Deduplication(t *testing.T) {
7681		receivedKeys [f .Id ] =  struct {}{}
7782		switch  f .Id  {
7883		case  key1 :
79- 			assert .EqualValues (t , 3 , f .Metrics .Packets )
80- 			assert .EqualValues (t , 44 , f .Metrics .Bytes )
84+ 			assert .EqualValues (t , 4 , f .Metrics .Packets )
85+ 			assert .EqualValues (t , 66 , f .Metrics .Bytes )
8186			assert .False (t , f .Duplicate )
8287			assert .Equal (t , "foo" , f .Interface )
8388			key1Flows  =  append (key1Flows , f )
89+ 		case  key1Dupe :
90+ 			assert .EqualValues (t , 4 , f .Metrics .Packets )
91+ 			assert .EqualValues (t , 66 , f .Metrics .Bytes )
92+ 			assert .False (t , f .Duplicate )
93+ 			assert .Equal (t , "bar" , f .Interface )
94+ 			key1Flows  =  append (key1Flows , f )
95+ 		case  key2 :
96+ 			assert .EqualValues (t , 7 , f .Metrics .Packets )
97+ 			assert .EqualValues (t , 33 , f .Metrics .Bytes )
98+ 			assert .False (t , f .Duplicate )
8499		}
85100	}
86101	assert .Lenf (t , key1Flows , 1 , "only one flow should have been forwarded: %#v" , key1Flows )
@@ -97,22 +112,33 @@ func TestFlowsAgent_DeduplicationJustMark(t *testing.T) {
97112	exported  :=  export .Get (t , timeout )
98113	receivedKeys  :=  map [ebpf.BpfFlowId ]struct {}{}
99114
100- 	assert .Len (t , exported , 1 )
115+ 	assert .Len (t , exported , 3 )
101116	duplicates  :=  0 
102117	for  _ , f  :=  range  exported  {
103118		require .NotContains (t , receivedKeys , f .Id )
104119		receivedKeys [f .Id ] =  struct {}{}
105120		switch  f .Id  {
106121		case  key1 :
107- 			assert .EqualValues (t , 3 , f .Metrics .Packets )
108- 			assert .EqualValues (t , 44 , f .Metrics .Bytes )
122+ 			assert .EqualValues (t , 4 , f .Metrics .Packets )
123+ 			assert .EqualValues (t , 66 , f .Metrics .Bytes )
109124			if  f .Duplicate  {
110125				duplicates ++ 
111126			}
112127			assert .Equal (t , "foo" , f .Interface )
128+ 		case  key1Dupe :
129+ 			assert .EqualValues (t , 4 , f .Metrics .Packets )
130+ 			assert .EqualValues (t , 66 , f .Metrics .Bytes )
131+ 			if  f .Duplicate  {
132+ 				duplicates ++ 
133+ 			}
134+ 			assert .Equal (t , "bar" , f .Interface )
135+ 		case  key2 :
136+ 			assert .EqualValues (t , 7 , f .Metrics .Packets )
137+ 			assert .EqualValues (t , 33 , f .Metrics .Bytes )
138+ 			assert .False (t , f .Duplicate )
113139		}
114140	}
115- 	assert .Equalf (t , 0 , duplicates , "exported flows should have only one duplicate: %#v" , exported )
141+ 	assert .Equalf (t , 1 , duplicates , "exported flows should have only one duplicate: %#v" , exported )
116142}
117143
118144func  TestFlowsAgent_Deduplication_None (t  * testing.T ) {
@@ -123,7 +149,7 @@ func TestFlowsAgent_Deduplication_None(t *testing.T) {
123149	})
124150
125151	exported  :=  export .Get (t , timeout )
126- 	assert .Len (t , exported , 1 )
152+ 	assert .Len (t , exported , 3 )
127153	receivedKeys  :=  map [ebpf.BpfFlowId ]struct {}{}
128154
129155	var  key1Flows  []* flow.Record 
@@ -132,14 +158,24 @@ func TestFlowsAgent_Deduplication_None(t *testing.T) {
132158		receivedKeys [f .Id ] =  struct {}{}
133159		switch  f .Id  {
134160		case  key1 :
135- 			assert .EqualValues (t , 3 , f .Metrics .Packets )
136- 			assert .EqualValues (t , 44 , f .Metrics .Bytes )
161+ 			assert .EqualValues (t , 4 , f .Metrics .Packets )
162+ 			assert .EqualValues (t , 66 , f .Metrics .Bytes )
137163			assert .False (t , f .Duplicate )
138164			assert .Equal (t , "foo" , f .Interface )
139165			key1Flows  =  append (key1Flows , f )
166+ 		case  key1Dupe :
167+ 			assert .EqualValues (t , 4 , f .Metrics .Packets )
168+ 			assert .EqualValues (t , 66 , f .Metrics .Bytes )
169+ 			assert .False (t , f .Duplicate )
170+ 			assert .Equal (t , "bar" , f .Interface )
171+ 			key1Flows  =  append (key1Flows , f )
172+ 		case  key2 :
173+ 			assert .EqualValues (t , 7 , f .Metrics .Packets )
174+ 			assert .EqualValues (t , 33 , f .Metrics .Bytes )
175+ 			assert .False (t , f .Duplicate )
140176		}
141177	}
142- 	assert .Lenf (t , key1Flows , 1 , "both key1 flows should have been forwarded: %#v" , key1Flows )
178+ 	assert .Lenf (t , key1Flows , 2 , "both key1 flows should have been forwarded: %#v" , key1Flows )
143179}
144180
145181func  TestFlowsAgent_Decoration (t  * testing.T ) {
@@ -149,7 +185,7 @@ func TestFlowsAgent_Decoration(t *testing.T) {
149185	})
150186
151187	exported  :=  export .Get (t , timeout )
152- 	assert .Len (t , exported , 1 )
188+ 	assert .Len (t , exported , 3 )
153189
154190	// Tests that the decoration stage has been properly executed. It should 
155191	// add the interface name and the agent IP 
@@ -183,10 +219,17 @@ func testAgent(t *testing.T, cfg *Config) *test.ExporterFake {
183219	})
184220
185221	now  :=  uint64 (monotime .Now ())
186- 	key1Metrics  :=  ebpf.BpfFlowMetrics {Packets : 3 , Bytes : 44 , StartMonoTimeTs : now  +  1000 , EndMonoTimeTs : now  +  1_000_000_000 }
187- 
188- 	ebpfTracer .AppendLookupResults (map [ebpf.BpfFlowId ]* ebpf.BpfFlowMetrics {
189- 		key1 : & key1Metrics ,
222+ 	key1Metrics  :=  []ebpf.BpfFlowMetrics {
223+ 		{Packets : 3 , Bytes : 44 , StartMonoTimeTs : now  +  1000 , EndMonoTimeTs : now  +  1_000_000_000 },
224+ 		{Packets : 1 , Bytes : 22 , StartMonoTimeTs : now , EndMonoTimeTs : now  +  3000 },
225+ 	}
226+ 	key2Metrics  :=  []ebpf.BpfFlowMetrics {
227+ 		{Packets : 7 , Bytes : 33 , StartMonoTimeTs : now , EndMonoTimeTs : now  +  2_000_000_000 },
228+ 	}
229+ 	ebpfTracer .AppendLookupResults (map [ebpf.BpfFlowId ][]ebpf.BpfFlowMetrics {
230+ 		key1 :     key1Metrics ,
231+ 		key1Dupe : key1Metrics ,
232+ 		key2 :     key2Metrics ,
190233	})
191234	return  export 
192235}
0 commit comments