mirror of
https://github.com/therootcompany/golib.git
synced 2026-11-04 06:55:00 +00:00
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package ippolicy
|
|
|
|
import (
|
|
"context"
|
|
"net/netip"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestPolicyKeepsSnapshotAfterFailedRefresh(t *testing.T) {
|
|
path := filepath.Join(t.TempDir(), "allowed.tsv")
|
|
if err := os.WriteFile(path, []byte("192.0.2.1\n"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p, err := New(t.Context(), Config{Whitelist: path})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = p.Close() }()
|
|
|
|
if !p.Evaluate(netip.MustParseAddr("192.0.2.1")).Whitelisted {
|
|
t.Fatal("initial whitelist did not match")
|
|
}
|
|
if err := os.WriteFile(path, []byte("invalid entry\n"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := p.refresh(false); err == nil {
|
|
t.Fatal("invalid refresh unexpectedly succeeded")
|
|
}
|
|
if !p.Evaluate(netip.MustParseAddr("192.0.2.1")).Whitelisted {
|
|
t.Fatal("failed refresh replaced valid snapshot")
|
|
}
|
|
}
|
|
|
|
func TestPolicyWhitelistPrecedesExtraBlacklist(t *testing.T) {
|
|
dir := t.TempDir()
|
|
white := filepath.Join(dir, "white.tsv")
|
|
black := filepath.Join(dir, "black.tsv")
|
|
if err := os.WriteFile(white, []byte("192.0.2.1\n"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := os.WriteFile(black, []byte("192.0.2.0/24\n"), 0o600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p, err := New(context.Background(), Config{Whitelist: white, BlacklistExtra: black})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer func() { _ = p.Close() }()
|
|
if p.Evaluate(netip.MustParseAddr("192.0.2.1")).Blocked {
|
|
t.Fatal("whitelist did not take precedence")
|
|
}
|
|
if !p.Evaluate(netip.MustParseAddr("192.0.2.2")).Blocked {
|
|
t.Fatal("extra blacklist did not block")
|
|
}
|
|
}
|