diff options
| -rw-r--r-- | internal/file/file.go | 11 | ||||
| -rw-r--r-- | internal/resource/repository.go | 4 | ||||
| -rw-r--r-- | internal/resource/resource.go | 10 | ||||
| -rw-r--r-- | internal/resource/resource_test.go | 28 | ||||
| -rw-r--r-- | internal/resources/resources.go | 32 |
5 files changed, 49 insertions, 36 deletions
diff --git a/internal/file/file.go b/internal/file/file.go index b230473..ee759e0 100644 --- a/internal/file/file.go +++ b/internal/file/file.go @@ -4,8 +4,15 @@ import ( "crypto/sha256" "log" "os" + + "codeberg.org/snonux/gonf/internal/resource" ) +func HaveString(path, content string) error { + _ = resource.Register("File", path) + return have(path, []byte(content)) +} + func getChecksum(path string) [32]byte { var checksum [32]byte data, err := os.ReadFile(path) @@ -62,7 +69,3 @@ func have(path string, content []byte) error { return updateFromTmp(tmpPath, path, existingChecksum != newChecksum) } - -func HaveString(path, content string) error { - return have(path, []byte(content)) -} 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") } } diff --git a/internal/resources/resources.go b/internal/resources/resources.go index 495b26d..7a7232b 100644 --- a/internal/resources/resources.go +++ b/internal/resources/resources.go @@ -8,28 +8,12 @@ import ( "codeberg.org/snonux/gonf/internal/resource" ) -var ( - registry resources - once sync.Once - mu sync.Mutex -) - func Init() { once.Do(func() { registry = new() }) } -type resources struct { - registered map[string]resource.Resource -} - -func new() resources { - return resources{ - registered: make(map[string]resource.Resource), - } -} - func Register(res resource.Resource) error { mu.Lock() defer mu.Unlock() @@ -43,3 +27,19 @@ func Register(res resource.Resource) error { return nil } + +var ( + registry resources + once sync.Once + mu sync.Mutex +) + +type resources struct { + registered map[string]resource.Resource +} + +func new() resources { + return resources{ + registered: make(map[string]resource.Resource), + } +} |
