config_persistence_test.go 2.61 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
package node

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func TestActive(t *testing.T) {
	create := func() *ActiveConfigPersistence {
		dir := t.TempDir()
12
		config := NewConfigPersistence(dir + "/state")
13 14 15 16 17 18 19
		return config
	}

	t.Run("SequencerStateUnsetWhenFileDoesNotExist", func(t *testing.T) {
		config := create()
		state, err := config.SequencerState()
		require.NoError(t, err)
20
		require.Equal(t, StateUnset, state)
21 22 23 24 25 26 27
	})

	t.Run("PersistSequencerStarted", func(t *testing.T) {
		config1 := create()
		require.NoError(t, config1.SequencerStarted())
		state, err := config1.SequencerState()
		require.NoError(t, err)
28
		require.Equal(t, StateStarted, state)
29

30
		config2 := NewConfigPersistence(config1.file)
31 32
		state, err = config2.SequencerState()
		require.NoError(t, err)
33
		require.Equal(t, StateStarted, state)
34 35 36 37 38 39 40
	})

	t.Run("PersistSequencerStopped", func(t *testing.T) {
		config1 := create()
		require.NoError(t, config1.SequencerStopped())
		state, err := config1.SequencerState()
		require.NoError(t, err)
41
		require.Equal(t, StateStopped, state)
42

43
		config2 := NewConfigPersistence(config1.file)
44 45
		state, err = config2.SequencerState()
		require.NoError(t, err)
46
		require.Equal(t, StateStopped, state)
47 48 49 50 51 52 53
	})

	t.Run("PersistMultipleChanges", func(t *testing.T) {
		config := create()
		require.NoError(t, config.SequencerStarted())
		state, err := config.SequencerState()
		require.NoError(t, err)
54
		require.Equal(t, StateStarted, state)
55 56 57 58

		require.NoError(t, config.SequencerStopped())
		state, err = config.SequencerState()
		require.NoError(t, err)
59
		require.Equal(t, StateStopped, state)
60 61 62 63
	})

	t.Run("CreateParentDirs", func(t *testing.T) {
		dir := t.TempDir()
64
		config := NewConfigPersistence(dir + "/some/dir/state")
65 66 67 68

		// Should be unset before file exists
		state, err := config.SequencerState()
		require.NoError(t, err)
69
		require.Equal(t, StateUnset, state)
70 71 72 73 74 75 76
		require.NoFileExists(t, config.file)

		// Should create directories when updating
		require.NoError(t, config.SequencerStarted())
		require.FileExists(t, config.file)
		state, err = config.SequencerState()
		require.NoError(t, err)
77
		require.Equal(t, StateStarted, state)
78 79 80 81 82 83 84
	})
}

func TestDisabledConfigPersistence_AlwaysUnset(t *testing.T) {
	config := DisabledConfigPersistence{}
	state, err := config.SequencerState()
	require.NoError(t, err)
85
	require.Equal(t, StateUnset, state)
86 87 88 89

	require.NoError(t, config.SequencerStarted())
	state, err = config.SequencerState()
	require.NoError(t, err)
90
	require.Equal(t, StateUnset, state)
91 92 93 94

	require.NoError(t, config.SequencerStopped())
	state, err = config.SequencerState()
	require.NoError(t, err)
95
	require.Equal(t, StateUnset, state)
96
}