diff --git a/dagger/state/store_test.go b/dagger/state/store_test.go deleted file mode 100644 index d5ec0afd..00000000 --- a/dagger/state/store_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package state - -import ( - "context" - "os" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestStore(t *testing.T) { - ctx := context.TODO() - - // Init - root, err := os.MkdirTemp(os.TempDir(), "dagger-*") - require.NoError(t, err) - st, err := Init(ctx, root, "test") - require.Equal(t, "test", st.Name) - require.Equal(t, root, st.Path) - require.NoError(t, err) - - // Open - _, err = Open(ctx, "/tmp/not/exist") - require.Error(t, err) - require.ErrorIs(t, ErrNotInit, err) - - st, err = Open(ctx, root) - require.NoError(t, err) - require.Equal(t, "test", st.Name) - require.Equal(t, root, st.Path) - - // Save - computed := `{"hello": "world"}` - st.Computed = computed - require.NoError(t, Save(ctx, st)) - st, err = Open(ctx, root) - require.NoError(t, err) - require.Equal(t, computed, st.Computed) -} diff --git a/dagger/state/store.go b/dagger/state/workspace.go similarity index 94% rename from dagger/state/store.go rename to dagger/state/workspace.go index 86563483..79c05dbd 100644 --- a/dagger/state/store.go +++ b/dagger/state/workspace.go @@ -35,14 +35,19 @@ type Workspace struct { } func Init(ctx context.Context, dir string) (*Workspace, error) { - root := path.Join(dir, daggerDir) - if err := os.Mkdir(root, 0755); err != nil { + root, err := filepath.Abs(dir) + if err != nil { + return nil, err + } + + daggerRoot := path.Join(root, daggerDir) + if err := os.Mkdir(daggerRoot, 0755); err != nil { if errors.Is(err, os.ErrExist) { return nil, ErrAlreadyInit } return nil, err } - if err := os.Mkdir(path.Join(root, envDir), 0755); err != nil { + if err := os.Mkdir(path.Join(daggerRoot, envDir), 0755); err != nil { return nil, err } return &Workspace{ @@ -178,7 +183,7 @@ func (w *Workspace) Save(ctx context.Context, st *State) error { } // Only update the encrypted file if there were changes - if bytes.Compare(data, currentPlain) != 0 { + if !bytes.Equal(data, currentPlain) { encrypted, err := keychain.Reencrypt(ctx, manifestPath, data) if err != nil { return err diff --git a/dagger/state/workspace_test.go b/dagger/state/workspace_test.go new file mode 100644 index 00000000..a474f36a --- /dev/null +++ b/dagger/state/workspace_test.go @@ -0,0 +1,55 @@ +package state + +import ( + "context" + "os" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestWorkspace(t *testing.T) { + ctx := context.TODO() + + root, err := os.MkdirTemp(os.TempDir(), "dagger-*") + require.NoError(t, err) + + // Open should fail since the directory is not initialized + _, err = Open(ctx, root) + require.ErrorIs(t, ErrNotInit, err) + + // Init + workspace, err := Init(ctx, root) + require.NoError(t, err) + require.Equal(t, root, workspace.Path) + + // Create + st, err := workspace.Create(ctx, "test") + require.NoError(t, err) + require.Equal(t, "test", st.Name) + + // Open + workspace, err = Open(ctx, root) + require.NoError(t, err) + require.Equal(t, root, workspace.Path) + + // List + envs, err := workspace.List(ctx) + require.NoError(t, err) + require.Len(t, envs, 1) + require.Equal(t, "test", envs[0].Name) + + // Get + env, err := workspace.Get(ctx, "test") + require.NoError(t, err) + require.Equal(t, "test", env.Name) + + // Save + require.NoError(t, env.SetInput("foo", TextInput("bar"))) + require.NoError(t, workspace.Save(ctx, env)) + workspace, err = Open(ctx, root) + require.NoError(t, err) + env, err = workspace.Get(ctx, "test") + require.NoError(t, err) + require.Contains(t, env.Inputs, "foo") +}