From bf2dd798b88d5ab86fbb399c962b4867012ae3bf Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Fri, 7 Apr 2023 16:27:40 +0200 Subject: [PATCH] chore: Tidy up persistent state tests --- .golangci.yml | 1 + pkg/chezmoi/boltpersistentstate_test.go | 18 +++++++ pkg/chezmoi/mockpersistentstate_test.go | 53 ++----------------- pkg/chezmoi/persistentstate_test.go | 70 +++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 50 deletions(-) create mode 100644 pkg/chezmoi/persistentstate_test.go diff --git a/.golangci.yml b/.golangci.yml index 4af9f309523..f05cd2b4f90 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -135,6 +135,7 @@ linters-settings: - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.ActualStateEntry - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.Encryption - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.Format + - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.PersistentState - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.SourceStateOrigin - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.SourceStateEntry - github\.com/twpayne/chezmoi/v2/pkg/chezmoi\.System diff --git a/pkg/chezmoi/boltpersistentstate_test.go b/pkg/chezmoi/boltpersistentstate_test.go index 6a47dfff857..72e9cc7bf05 100644 --- a/pkg/chezmoi/boltpersistentstate_test.go +++ b/pkg/chezmoi/boltpersistentstate_test.go @@ -1,6 +1,7 @@ package chezmoi import ( + "os" "testing" "github.com/stretchr/testify/assert" @@ -129,6 +130,23 @@ func TestBoltPersistentStateMock(t *testing.T) { }) } +func TestBoltPersistentStateGeneric(t *testing.T) { + system := NewRealSystem(vfs.OSFS) + var tempDirs []string + defer func() { + for _, tempDir := range tempDirs { + assert.NoError(t, os.RemoveAll(tempDir)) + } + }() + testPersistentState(t, func() PersistentState { + tempDir, err := os.MkdirTemp("", "chezmoi-test") + require.NoError(t, err) + b, err := NewBoltPersistentState(system, NewAbsPath(tempDir).JoinString("chezmoistate.boltdb"), BoltPersistentStateReadWrite) + require.NoError(t, err) + return b + }) +} + func TestBoltPersistentStateReadOnly(t *testing.T) { chezmoitest.WithTestFS(t, nil, func(fileSystem vfs.FS) { var ( diff --git a/pkg/chezmoi/mockpersistentstate_test.go b/pkg/chezmoi/mockpersistentstate_test.go index 4961f768aa4..4fe96a28da1 100644 --- a/pkg/chezmoi/mockpersistentstate_test.go +++ b/pkg/chezmoi/mockpersistentstate_test.go @@ -1,58 +1,11 @@ package chezmoi import ( - "io" "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) func TestMockPersistentState(t *testing.T) { - var ( - bucket = []byte("bucket") - key = []byte("key") - value = []byte("value") - ) - - s1 := NewMockPersistentState() - - require.NoError(t, s1.Delete(bucket, value)) - - actualValue, err := s1.Get(bucket, key) - require.NoError(t, err) - assert.Nil(t, actualValue) - - require.NoError(t, s1.Set(bucket, key, value)) - - actualValue, err = s1.Get(bucket, key) - require.NoError(t, err) - assert.Equal(t, value, actualValue) - - require.NoError(t, s1.ForEach(bucket, func(k, v []byte) error { - assert.Equal(t, key, k) - assert.Equal(t, value, v) - return nil - })) - - assert.Equal(t, io.EOF, s1.ForEach(bucket, func(k, v []byte) error { - return io.EOF - })) - - s2 := NewMockPersistentState() - require.NoError(t, s1.CopyTo(s2)) - actualValue, err = s2.Get(bucket, key) - assert.NoError(t, err) - assert.Equal(t, value, actualValue) - - require.NoError(t, s1.Close()) - - actualValue, err = s1.Get(bucket, key) - assert.NoError(t, err) - assert.Equal(t, value, actualValue) - - require.NoError(t, s1.Delete(bucket, key)) - actualValue, err = s1.Get(bucket, key) - require.NoError(t, err) - assert.Nil(t, actualValue) + testPersistentState(t, func() PersistentState { + return NewMockPersistentState() + }) } diff --git a/pkg/chezmoi/persistentstate_test.go b/pkg/chezmoi/persistentstate_test.go new file mode 100644 index 00000000000..eb9fd636213 --- /dev/null +++ b/pkg/chezmoi/persistentstate_test.go @@ -0,0 +1,70 @@ +package chezmoi + +import ( + "io" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func testPersistentState(t *testing.T, constructor func() PersistentState) { + t.Helper() + + var ( + bucket1 = []byte("bucket1") + bucket2 = []byte("bucket2") + key = []byte("key1") + value = []byte("value") + ) + + s1 := constructor() + + require.NoError(t, s1.Delete(bucket1, value)) + + actualValue, err := s1.Get(bucket1, key) + require.NoError(t, err) + assert.Nil(t, actualValue) + + require.NoError(t, s1.Set(bucket1, key, value)) + + actualValue, err = s1.Get(bucket1, key) + require.NoError(t, err) + assert.Equal(t, value, actualValue) + + require.NoError(t, s1.ForEach(bucket1, func(k, v []byte) error { + assert.Equal(t, key, k) + assert.Equal(t, value, v) + return nil + })) + + assert.Equal(t, io.EOF, s1.ForEach(bucket1, func(k, v []byte) error { + return io.EOF + })) + + s2 := constructor() + require.NoError(t, s1.CopyTo(s2)) + actualValue, err = s2.Get(bucket1, key) + assert.NoError(t, err) + assert.Equal(t, value, actualValue) + + require.NoError(t, s2.Close()) + + actualValue, err = s1.Get(bucket1, key) + assert.NoError(t, err) + assert.Equal(t, value, actualValue) + + require.NoError(t, s1.Delete(bucket1, key)) + actualValue, err = s1.Get(bucket1, key) + require.NoError(t, err) + assert.Nil(t, actualValue) + + require.NoError(t, s1.Set(bucket2, key, value)) + actualValue, err = s1.Get(bucket2, key) + require.NoError(t, err) + assert.Equal(t, value, actualValue) + require.NoError(t, s1.DeleteBucket(bucket2)) + actualValue, err = s1.Get(bucket2, key) + require.NoError(t, err) + assert.Nil(t, actualValue) +}