From 1f6334b0e6748b2bbdecc3ffb56b0f7a26290001 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 4 Jul 2026 21:00:42 +0300 Subject: register file resource automatically --- internal/resource/repository.go | 4 ++++ internal/resource/resource.go | 10 ++++++++-- internal/resource/resource_test.go | 28 ++++++++++++++-------------- 3 files changed, 26 insertions(+), 16 deletions(-) (limited to 'internal/resource') diff --git a/internal/resource/repository.go b/internal/resource/repository.go index a834b69..8cb88b3 100644 --- a/internal/resource/repository.go +++ b/internal/resource/repository.go @@ -18,6 +18,10 @@ func getRepository() repository { return repo } +func resetRepository() { + repo = newRepository() +} + type repository struct { registered map[string]Resource mu *sync.Mutex diff --git a/internal/resource/resource.go b/internal/resource/resource.go index e0bb826..b0f6057 100644 --- a/internal/resource/resource.go +++ b/internal/resource/resource.go @@ -10,12 +10,18 @@ type Resource struct { dependsOn map[string]struct{} } -func New(type_, name string) Resource { - return Resource{ +func Register(type_, name string) Resource { + r := Resource{ Type: type_, Name: name, dependsOn: make(map[string]struct{}), } + + if err := getRepository().register(r); err != nil { + panic(err) + } + + return r } func (r Resource) String() string { diff --git a/internal/resource/resource_test.go b/internal/resource/resource_test.go index 6f0665a..947f0ac 100644 --- a/internal/resource/resource_test.go +++ b/internal/resource/resource_test.go @@ -5,7 +5,8 @@ import ( ) func TestResourceID(t *testing.T) { - res := New("File", "/tmp/foo.txt") + resetRepository() + res := Register("File", "/tmp/foo.txt") expected := "File[/tmp/foo.txt]" if res.ID() != expected { t.Errorf("expected ID %s, got %s", expected, res.ID()) @@ -13,7 +14,8 @@ func TestResourceID(t *testing.T) { } func TestResourceString(t *testing.T) { - res := New("File", "/tmp/foo.txt") + resetRepository() + res := Register("File", "/tmp/foo.txt") expected := "File[/tmp/foo.txt]" if res.String() != expected { t.Errorf("expected String %s, got %s", expected, res.String()) @@ -21,9 +23,10 @@ func TestResourceString(t *testing.T) { } func TestNew(t *testing.T) { + resetRepository() type_ := "File" name := "/tmp/foo.txt" - res := New(type_, name) + res := Register(type_, name) if res.Type != type_ { t.Errorf("expected type %s, got %s", type_, res.Type) @@ -37,22 +40,19 @@ func TestNew(t *testing.T) { } func TestRepositoryRegister(t *testing.T) { - repo := newRepository() - res := New("File", "/tmp/foo.txt") + resetRepository() + repo := getRepository() + res := Register("File", "/tmp/foo.txt") - // First registration should succeed - if err := repo.register(res); err != nil { - t.Fatalf("expected successful registration, got error: %v", err) - } - - // Second registration of the same resource should fail + // First registration already happened in New() + // But we can try to register again via the repository directly if err := repo.register(res); err == nil { t.Error("expected error when registering the same resource twice, got nil") } // Registration of a different resource should succeed - res2 := New("File", "/tmp/bar.txt") - if err := repo.register(res2); err != nil { - t.Fatalf("expected successful registration of different resource, got error: %v", err) + res2 := Register("File", "/tmp/bar.txt") + if err := repo.register(res2); err == nil { + t.Error("expected error when registering the same resource twice, got nil") } } -- cgit v1.2.3