summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/file/file.go11
-rw-r--r--internal/resource/repository.go4
-rw-r--r--internal/resource/resource.go10
-rw-r--r--internal/resource/resource_test.go28
-rw-r--r--internal/resources/resources.go32
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),
+ }
+}