From 07e4009e15948583d6fd3f5ecad0b68a8c838e0b Mon Sep 17 00:00:00 2001 From: Denton Gentry Date: Sun, 10 Jan 2021 11:52:11 -0800 Subject: [PATCH] portlist: fully exercise lessThan in tests All cases in lessThan are not reliably exercised by other tests. This shows up in code coverage metrics as lines in lessThan are alternately added and removed from coverage. Add a test case to systematically test all conditions. Signed-off-by: Denton Gentry --- portlist/portlist_test.go | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/portlist/portlist_test.go b/portlist/portlist_test.go index 64613f68c..deda695c7 100644 --- a/portlist/portlist_test.go +++ b/portlist/portlist_test.go @@ -47,6 +47,100 @@ func TestIgnoreLocallyBoundPorts(t *testing.T) { } } +func TestLessThan(t *testing.T) { + tests := []struct { + name string + a, b Port + want bool + }{ + { + "Port a < b", + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 101, Process: "proc1", inode: "inode1"}, + true, + }, + { + "Port a > b", + Port{Proto: "tcp", Port: 101, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + false, + }, + { + "Proto a < b", + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "udp", Port: 100, Process: "proc1", inode: "inode1"}, + true, + }, + { + "Proto a < b", + Port{Proto: "udp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + false, + }, + { + "inode a < b", + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode2"}, + true, + }, + { + "inode a > b", + Port{Proto: "tcp", Port: 100, Process: "proc2", inode: "inode2"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + false, + }, + { + "Process a < b", + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc2", inode: "inode1"}, + true, + }, + { + "Process a > b", + Port{Proto: "tcp", Port: 100, Process: "proc2", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + false, + }, + { + "Port evaluated first", + Port{Proto: "udp", Port: 100, Process: "proc2", inode: "inode2"}, + Port{Proto: "tcp", Port: 101, Process: "proc1", inode: "inode1"}, + true, + }, + { + "Proto evaluated second", + Port{Proto: "tcp", Port: 100, Process: "proc2", inode: "inode2"}, + Port{Proto: "udp", Port: 100, Process: "proc1", inode: "inode1"}, + true, + }, + { + "inode evaluated third", + Port{Proto: "tcp", Port: 100, Process: "proc2", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode2"}, + true, + }, + { + "Process evaluated fourth", + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc2", inode: "inode1"}, + true, + }, + { + "equal", + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + Port{Proto: "tcp", Port: 100, Process: "proc1", inode: "inode1"}, + false, + }, + } + + for _, tt := range tests { + got := tt.a.lessThan(&tt.b) + if got != tt.want { + t.Errorf("%s: Equal = %v; want %v", tt.name, got, tt.want) + } + } +} + func BenchmarkGetList(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ {