golib/net/ippolicy/policy_start_test.go

46 lines
1.1 KiB
Go

package ippolicy
import (
"net/netip"
"os"
"path/filepath"
"testing"
"time"
"github.com/therootcompany/golib/net/iplist"
)
func TestPolicyLoadPublishesUpdatedSnapshot(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)
}
whitelist, err := iplist.NewIPList(t.Context(), iplist.IPListConfig{
Source: path, CacheDir: t.TempDir(), RefreshInterval: time.Nanosecond,
})
if err != nil {
t.Fatal(err)
}
p := New(t.Context(), Config{Whitelist: whitelist, RefreshInterval: time.Nanosecond})
defer p.Stop()
evaluator, err := p.Load(t.Context(), true)
if err != nil {
t.Fatal(err)
}
if evaluator.Evaluate(netip.MustParseAddr("192.0.2.1")) != Whitelisted {
t.Fatal("initial whitelist did not match")
}
if err := os.WriteFile(path, []byte("192.0.2.2\n"), 0o600); err != nil {
t.Fatal(err)
}
evaluator, err = p.Load(t.Context(), true)
if err != nil {
t.Fatal(err)
}
if evaluator.Evaluate(netip.MustParseAddr("192.0.2.2")) != Whitelisted {
t.Fatal("updated whitelist did not match")
}
}