Files
lgpo-server/internal/store/store_test.go
groot d191b871de
All checks were successful
release-tag / release-image (push) Successful in 1m37s
init
2026-08-05 10:46:09 +02:00

101 lines
3.2 KiB
Go

package store
import (
"errors"
"os"
"path/filepath"
"testing"
"time"
"gpo-distributor/internal/bundle"
"gpo-distributor/internal/model"
)
func TestResolveLatest(t *testing.T) {
s, err := Open(t.TempDir())
if err != nil {
t.Fatal(err)
}
zipPath := filepath.Join(t.TempDir(), "x.zip")
if err := os.WriteFile(zipPath, []byte("x"), 0o600); err != nil {
t.Fatal(err)
}
base := time.Date(2026, 1, 1, 0, 0, 0, 0, time.UTC)
for i, hash := range []string{"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"} {
_, _, err := s.ImportPolicy("baseline", "", zipPath, bundle.Inspection{ArtifactHash: hash, SemanticHash: hash, Size: 1, FileCount: 1, PolicyFiles: 1}, base.Add(time.Duration(i)*time.Second), false)
if err != nil {
t.Fatal(err)
}
}
if _, err := s.SetProfile("servers", []model.ProfilePolicy{{Policy: "baseline", Version: "latest"}}, base); err != nil {
t.Fatal(err)
}
m, err := s.ResolveManifest("servers")
if err != nil {
t.Fatal(err)
}
if got := m.Policies[0].SemanticHash; got[0] != 'b' {
t.Fatalf("expected latest, got %s", got)
}
}
func TestDeletePolicyVersionAndReferences(t *testing.T) {
s, err := Open(t.TempDir())
if err != nil {
t.Fatal(err)
}
zipPath := filepath.Join(t.TempDir(), "bundle.zip")
if err := os.WriteFile(zipPath, []byte("bundle"), 0o600); err != nil {
t.Fatal(err)
}
base := time.Date(2026, 8, 5, 8, 0, 0, 0, time.UTC)
var versions []model.PolicyVersion
for i, hash := range []string{
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
} {
version, _, err := s.ImportPolicy("baseline", "", zipPath, bundle.Inspection{
ArtifactHash: hash,
SemanticHash: hash,
Size: 6,
FileCount: 1,
PolicyFiles: 1,
}, base.Add(time.Duration(i)*time.Second), false)
if err != nil {
t.Fatal(err)
}
versions = append(versions, version)
}
if _, err := s.SetProfile("servers", []model.ProfilePolicy{{Policy: "baseline", Version: versions[0].Version}}, base); err != nil {
t.Fatal(err)
}
if err := s.DeletePolicyVersion("baseline", versions[0].Version); !errors.Is(err, ErrConflict) {
t.Fatalf("expected pinned version conflict, got %v", err)
}
if err := s.DeletePolicy("baseline"); !errors.Is(err, ErrConflict) {
t.Fatalf("expected referenced policy conflict, got %v", err)
}
if err := s.DeleteProfile("servers"); err != nil {
t.Fatal(err)
}
_, artifact, err := s.Artifact("baseline", versions[0].Version)
if err != nil {
t.Fatal(err)
}
if err := s.DeletePolicyVersion("baseline", versions[0].Version); err != nil {
t.Fatal(err)
}
if _, err := os.Stat(artifact); !errors.Is(err, os.ErrNotExist) {
t.Fatalf("artifact still exists or unexpected stat error: %v", err)
}
if err := s.DeletePolicyVersion("baseline", versions[1].Version); !errors.Is(err, ErrConflict) {
t.Fatalf("expected last-version conflict, got %v", err)
}
if err := s.DeletePolicy("baseline"); err != nil {
t.Fatal(err)
}
if _, err := s.GetPolicy("baseline"); !errors.Is(err, ErrNotFound) {
t.Fatalf("expected deleted policy to be missing, got %v", err)
}
}