Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 10 additions & 23 deletions internal/modules/auditd/module_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,19 +61,6 @@ func serviceDisabled() map[string]fakeResult {
}
}

func assertStatus(t *testing.T, findings []modules.Finding, id string, want modules.Status) {
t.Helper()
for _, f := range findings {
if f.Check.ID == id {
if f.Status != want {
t.Errorf("check %s: got status %q, want %q (current=%q)", id, f.Status, want, f.Current)
}
return
}
}
t.Errorf("check %s: not found in findings", id)
}

// ── interface ─────────────────────────────────────────────────────────────────

func TestModule_ImplementsInterface(t *testing.T) {
Expand Down Expand Up @@ -129,13 +116,13 @@ func TestAudit_DefaultRules_RuleChecksNonCompliant(t *testing.T) {

ruleIDs := []string{"aud-001", "aud-002", "aud-003", "aud-004", "aud-005", "aud-006", "aud-007", "aud-008", "aud-009"}
for _, id := range ruleIDs {
assertStatus(t, findings, id, modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, id, modules.StatusNonCompliant)
}
// conf checks still pass
assertStatus(t, findings, "aud-010", modules.StatusCompliant)
assertStatus(t, findings, "aud-011", modules.StatusCompliant)
assertStatus(t, findings, "aud-012", modules.StatusCompliant)
assertStatus(t, findings, "aud-013", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "aud-010", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "aud-011", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "aud-012", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "aud-013", modules.StatusCompliant)
}

// ── audit: non-compliant conf ─────────────────────────────────────────────────
Expand All @@ -153,9 +140,9 @@ func TestAudit_DefaultConf_ConfChecksNonCompliant(t *testing.T) {
}

// Default conf: max_log_file=5 (< 8), action=ROTATE (ok), space_left=SYSLOG (ok)
assertStatus(t, findings, "aud-010", modules.StatusNonCompliant)
assertStatus(t, findings, "aud-011", modules.StatusCompliant) // ROTATE is acceptable
assertStatus(t, findings, "aud-012", modules.StatusCompliant) // SYSLOG is acceptable
testutil.AssertStatus(t, findings, "aud-010", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "aud-011", modules.StatusCompliant) // ROTATE is acceptable
testutil.AssertStatus(t, findings, "aud-012", modules.StatusCompliant) // SYSLOG is acceptable
}

// ── audit: service disabled ───────────────────────────────────────────────────
Expand All @@ -171,7 +158,7 @@ func TestAudit_ServiceDisabled_AUD013NonCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit() error: %v", err)
}
assertStatus(t, findings, "aud-013", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "aud-013", modules.StatusNonCompliant)
}

// ── audit: missing rules dir ──────────────────────────────────────────────────
Expand All @@ -188,7 +175,7 @@ func TestAudit_MissingRulesDir_AllRuleChecksNonCompliant(t *testing.T) {
t.Fatalf("Audit() error: %v", err)
}
for _, id := range []string{"aud-001", "aud-009"} {
assertStatus(t, findings, id, modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, id, modules.StatusNonCompliant)
}
}

Expand Down
52 changes: 19 additions & 33 deletions internal/modules/containers/module_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,6 @@ func secOptKey() string {
return "docker info --format " + containers.SecurityOptsFmt
}

// assertStatus fails the test when the named check does not match the expected status.
func assertStatus(t *testing.T, findings []modules.Finding, id string, want modules.Status) {
t.Helper()
for _, f := range findings {
if f.Check.ID == id {
if f.Status != want {
t.Errorf("check %s: got status %q, want %q (detail: %s)", id, f.Status, want, f.Detail)
}
return
}
}
t.Errorf("check %s: not found in %d findings", id, len(findings))
}

// emptyAuditDir creates a temporary directory with no .rules files.
func emptyAuditDir(t *testing.T) string {
t.Helper()
Expand Down Expand Up @@ -157,7 +143,7 @@ func TestAudit_RootlessCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-001", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-001", modules.StatusCompliant)
}

func TestAudit_RootlessNonCompliant(t *testing.T) {
Expand All @@ -174,7 +160,7 @@ func TestAudit_RootlessNonCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-001", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-001", modules.StatusNonCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -195,7 +181,7 @@ func TestAudit_ICCCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-002", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-002", modules.StatusCompliant)
}

func TestAudit_ICCNonCompliant(t *testing.T) {
Expand All @@ -212,7 +198,7 @@ func TestAudit_ICCNonCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-002", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-002", modules.StatusNonCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -233,7 +219,7 @@ func TestAudit_UsernsRemapCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-003", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-003", modules.StatusCompliant)
}

func TestAudit_UsernsRemapNonCompliant(t *testing.T) {
Expand All @@ -250,7 +236,7 @@ func TestAudit_UsernsRemapNonCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-003", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-003", modules.StatusNonCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -272,7 +258,7 @@ func TestAudit_TLSSkippedNoTCPHost(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-004", modules.StatusSkipped)
testutil.AssertStatus(t, findings, "cnt-004", modules.StatusSkipped)
}

func TestAudit_TLSNonCompliantOnTCPHost(t *testing.T) {
Expand All @@ -290,7 +276,7 @@ func TestAudit_TLSNonCompliantOnTCPHost(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-004", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-004", modules.StatusNonCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -311,8 +297,8 @@ func TestAudit_SeccompAndMACNonCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-005", modules.StatusNonCompliant)
assertStatus(t, findings, "cnt-006", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-005", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-006", modules.StatusNonCompliant)
}

func TestAudit_SeccompAndMACCompliant(t *testing.T) {
Expand All @@ -329,8 +315,8 @@ func TestAudit_SeccompAndMACCompliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-005", modules.StatusCompliant)
assertStatus(t, findings, "cnt-006", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-005", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-006", modules.StatusCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -353,7 +339,7 @@ func TestAudit_PrivilegedContainerFound(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-007", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-007", modules.StatusNonCompliant)
}

func TestAudit_NoPrivilegedContainers(t *testing.T) {
Expand All @@ -372,7 +358,7 @@ func TestAudit_NoPrivilegedContainers(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-007", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-007", modules.StatusCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -397,7 +383,7 @@ func TestAudit_SocketMountFound(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-008", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-008", modules.StatusNonCompliant)
}

func TestAudit_NoSocketMount(t *testing.T) {
Expand All @@ -418,7 +404,7 @@ func TestAudit_NoSocketMount(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-008", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-008", modules.StatusCompliant)
}

// ----------------------------------------------------------------------------
Expand All @@ -439,7 +425,7 @@ func TestAudit_ImageScanningAlwaysManual(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-009", modules.StatusManual)
testutil.AssertStatus(t, findings, "cnt-009", modules.StatusManual)
}

// ----------------------------------------------------------------------------
Expand All @@ -460,7 +446,7 @@ func TestAudit_AuditRulePresent(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-010", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cnt-010", modules.StatusCompliant)
}

func TestAudit_AuditRuleMissing(t *testing.T) {
Expand All @@ -477,5 +463,5 @@ func TestAudit_AuditRuleMissing(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cnt-010", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cnt-010", modules.StatusNonCompliant)
}
60 changes: 24 additions & 36 deletions internal/modules/crypto/module_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package crypto_test

import (
"context"
"github.com/hardbox-io/hardbox/internal/modules/util/testutil"
"os"
"path/filepath"
"runtime"
Expand Down Expand Up @@ -53,12 +54,12 @@ func TestAudit_RHEL_Compliant(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cry-001", modules.StatusCompliant)
assertStatus(t, findings, "cry-002", modules.StatusCompliant)
assertStatus(t, findings, "cry-003", modules.StatusCompliant)
assertStatus(t, findings, "cry-004", modules.StatusCompliant)
assertStatus(t, findings, "cry-005", modules.StatusCompliant)
assertStatus(t, findings, "cry-006", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-001", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-002", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-003", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-004", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-005", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-006", modules.StatusCompliant)
}

func TestAudit_RHEL_Legacy(t *testing.T) {
Expand All @@ -75,12 +76,12 @@ func TestAudit_RHEL_Legacy(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cry-001", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-002", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-003", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-004", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-005", modules.StatusManual)
assertStatus(t, findings, "cry-006", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-001", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-002", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-003", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-004", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-005", modules.StatusManual)
testutil.AssertStatus(t, findings, "cry-006", modules.StatusNonCompliant)
}

func TestAudit_Debian_Hardened(t *testing.T) {
Expand All @@ -97,12 +98,12 @@ func TestAudit_Debian_Hardened(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cry-001", modules.StatusCompliant)
assertStatus(t, findings, "cry-002", modules.StatusCompliant)
assertStatus(t, findings, "cry-003", modules.StatusCompliant)
assertStatus(t, findings, "cry-004", modules.StatusCompliant)
assertStatus(t, findings, "cry-005", modules.StatusManual)
assertStatus(t, findings, "cry-006", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-001", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-002", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-003", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-004", modules.StatusCompliant)
testutil.AssertStatus(t, findings, "cry-005", modules.StatusManual)
testutil.AssertStatus(t, findings, "cry-006", modules.StatusCompliant)
}

func TestAudit_Debian_Weak(t *testing.T) {
Expand All @@ -119,11 +120,11 @@ func TestAudit_Debian_Weak(t *testing.T) {
if err != nil {
t.Fatalf("Audit(): %v", err)
}
assertStatus(t, findings, "cry-001", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-002", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-003", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-004", modules.StatusNonCompliant)
assertStatus(t, findings, "cry-006", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-001", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-002", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-003", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-004", modules.StatusNonCompliant)
testutil.AssertStatus(t, findings, "cry-006", modules.StatusNonCompliant)
}

func TestPlan_NoChanges(t *testing.T) {
Expand Down Expand Up @@ -174,16 +175,3 @@ func TestReadStringIfExists_PermissionDenied(t *testing.T) {
func td(name string) string {
return filepath.Join("testdata", name)
}

func assertStatus(t *testing.T, findings []modules.Finding, id string, want modules.Status) {
t.Helper()
for _, f := range findings {
if f.Check.ID == id {
if f.Status != want {
t.Fatalf("%s: got %s want %s (current=%q detail=%q)", id, f.Status, want, f.Current, f.Detail)
}
return
}
}
t.Fatalf("check %s not found", id)
}
Loading
Loading