Skip to content

Commit 7488b3a

Browse files
authored
tests: increase unit test coverage for main package (#2559)
Signed-off-by: Athang69 <athangkali21@gmail.com>
1 parent e8a5fa2 commit 7488b3a

2 files changed

Lines changed: 107 additions & 19 deletions

File tree

KubeArmor/main.go

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,40 +20,46 @@ func init() {
2020
buildinfo.PrintBuildDetails()
2121
}
2222

23-
func main() {
24-
if os.Geteuid() != 0 {
25-
if os.Getenv("KUBEARMOR_UBI") == "" {
26-
kg.Printf("Need to have root privileges to run %s\n", os.Args[0])
27-
return
28-
}
29-
}
30-
// initial clean up
31-
32-
bpfMapsDir := "/sys/fs/bpf/"
23+
func isKubeArmorBpfMap(name string) bool {
24+
return strings.HasPrefix(name, "kubearmor")
25+
}
3326

27+
func cleanupBpfMaps(bpfMapsDir string, removeFn func(string) error) error {
3428
entries, err := os.ReadDir(bpfMapsDir)
3529
if err != nil {
36-
kg.Errf("Failed to read BPF map directory: %v", err)
37-
return
30+
return err
3831
}
39-
4032
for _, entry := range entries {
4133
if entry.IsDir() {
4234
continue
4335
}
44-
if strings.HasPrefix(entry.Name(), "kubearmor") {
45-
/* This should not be triggered in ideal cases,
46-
if this is triggered that means there is incomplete cleanup process
47-
from the last installation */
36+
if isKubeArmorBpfMap(entry.Name()) {
4837
path := filepath.Join(bpfMapsDir, entry.Name())
49-
err := kl.RemoveSafe(path)
50-
if err != nil {
38+
if err := removeFn(path); err != nil {
5139
kg.Errf("Failed to delete BPF map %s: %v", path, err)
5240
} else {
5341
kg.Warnf("Deleting existing map %s. This indicates previous cleanup failed", path)
5442
}
5543
}
5644
}
45+
return nil
46+
}
47+
48+
func main() {
49+
if os.Geteuid() != 0 {
50+
if os.Getenv("KUBEARMOR_UBI") == "" {
51+
kg.Printf("Need to have root privileges to run %s\n", os.Args[0])
52+
return
53+
}
54+
}
55+
// initial clean up
56+
57+
bpfMapsDir := "/sys/fs/bpf/"
58+
59+
if err := cleanupBpfMaps(bpfMapsDir, kl.RemoveSafe); err != nil {
60+
kg.Errf("Failed to read BPF map directory: %v", err)
61+
return
62+
}
5763

5864
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
5965
if err != nil {

KubeArmor/main_test.go

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"flag"
88
"fmt"
99
"os"
10+
"path/filepath"
1011
"strconv"
1112
"testing"
1213
)
@@ -76,3 +77,84 @@ func TestMain(t *testing.T) {
7677
main()
7778
t.Log("[INFO] Terminated KubeArmor")
7879
}
80+
81+
func TestBpfMapFiltering(t *testing.T) {
82+
cases := []struct {
83+
filename string
84+
want bool
85+
}{
86+
{"kubearmor_events", true},
87+
{"kubearmor_policy", true},
88+
{"cilium_events", false},
89+
{"kube", false},
90+
{"", false},
91+
{"KubeArmor", false},
92+
}
93+
for _, tc := range cases {
94+
got := isKubeArmorBpfMap(tc.filename)
95+
if got != tc.want {
96+
t.Errorf("isKubeArmorBpfMap(%q) = %v, want %v", tc.filename, got, tc.want)
97+
}
98+
}
99+
}
100+
101+
func TestBpfDirCleanupWithTempDir(t *testing.T) {
102+
dir := t.TempDir()
103+
files := map[string]bool{
104+
"kubearmor_events": true,
105+
"kubearmor_policy": true,
106+
"cilium_events": false,
107+
}
108+
for name := range files {
109+
if err := os.WriteFile(filepath.Join(dir, name), []byte("x"), 0600); err != nil {
110+
t.Fatalf("failed to create fixture file %q: %v", name, err)
111+
}
112+
}
113+
err := cleanupBpfMaps(dir, os.Remove)
114+
if err != nil {
115+
t.Fatalf("cleanupBpfMaps returned unexpected error: %v", err)
116+
}
117+
for name, shouldDelete := range files {
118+
_, err := os.Stat(filepath.Join(dir, name))
119+
if shouldDelete && err == nil {
120+
t.Errorf("%s should have been deleted", name)
121+
}
122+
if !shouldDelete && err != nil {
123+
t.Errorf("%s should still exist", name)
124+
}
125+
}
126+
}
127+
128+
func TestBpfDirCleanupSkipsDirectories(t *testing.T) {
129+
dir := t.TempDir()
130+
sub := filepath.Join(dir, "kubearmor_subdir")
131+
if err := os.Mkdir(sub, 0755); err != nil {
132+
t.Fatalf("failed to create subdir: %v", err)
133+
}
134+
err := cleanupBpfMaps(dir, os.Remove)
135+
if err != nil {
136+
t.Fatalf("cleanupBpfMaps returned unexpected error: %v", err)
137+
}
138+
if _, err := os.Stat(sub); os.IsNotExist(err) {
139+
t.Error("subdir was incorrectly removed")
140+
}
141+
}
142+
143+
func TestBpfDirCleanupMissingDir(t *testing.T) {
144+
dir := t.TempDir()
145+
if err := os.RemoveAll(dir); err != nil {
146+
t.Fatalf("failed to remove temp dir: %v", err)
147+
}
148+
err := cleanupBpfMaps(dir, os.Remove)
149+
if err == nil {
150+
t.Error("expected error for missing dir")
151+
}
152+
}
153+
154+
func TestNonRootWithoutUBI(t *testing.T) {
155+
if os.Geteuid() == 0 {
156+
t.Skip("must run as non-root")
157+
}
158+
t.Setenv("KUBEARMOR_UBI", "")
159+
main()
160+
}

0 commit comments

Comments
 (0)