github.com/adacta-ru/mattermost-server/v6@v6.0.0/config/memory_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package config_test 5 6 import ( 7 "os" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/adacta-ru/mattermost-server/v6/config" 14 ) 15 16 func setupConfigMemory(t *testing.T) { 17 t.Helper() 18 os.Clearenv() 19 } 20 21 func TestMemoryGetFile(t *testing.T) { 22 setupConfigMemory(t) 23 24 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 25 InitialConfig: minimalConfig, 26 InitialFiles: map[string][]byte{ 27 "empty-file": {}, 28 "test-file": []byte("test"), 29 }, 30 }) 31 require.NoError(t, err) 32 defer ms.Close() 33 34 t.Run("get empty filename", func(t *testing.T) { 35 _, err := ms.GetFile("") 36 require.Error(t, err) 37 }) 38 39 t.Run("get non-existent file", func(t *testing.T) { 40 _, err := ms.GetFile("unknown") 41 require.Error(t, err) 42 }) 43 44 t.Run("get empty file", func(t *testing.T) { 45 data, err := ms.GetFile("empty-file") 46 require.NoError(t, err) 47 require.Empty(t, data) 48 }) 49 50 t.Run("get non-empty file", func(t *testing.T) { 51 data, err := ms.GetFile("test-file") 52 require.NoError(t, err) 53 require.Equal(t, []byte("test"), data) 54 }) 55 } 56 57 func TestMemorySetFile(t *testing.T) { 58 setupConfigMemory(t) 59 60 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 61 InitialConfig: minimalConfig, 62 }) 63 require.NoError(t, err) 64 defer ms.Close() 65 66 t.Run("set new file", func(t *testing.T) { 67 err := ms.SetFile("new", []byte("new file")) 68 require.NoError(t, err) 69 70 data, err := ms.GetFile("new") 71 require.NoError(t, err) 72 require.Equal(t, []byte("new file"), data) 73 }) 74 75 t.Run("overwrite existing file", func(t *testing.T) { 76 err := ms.SetFile("existing", []byte("existing file")) 77 require.NoError(t, err) 78 79 err = ms.SetFile("existing", []byte("overwritten file")) 80 require.NoError(t, err) 81 82 data, err := ms.GetFile("existing") 83 require.NoError(t, err) 84 require.Equal(t, []byte("overwritten file"), data) 85 }) 86 } 87 88 func TestMemoryHasFile(t *testing.T) { 89 t.Run("has non-existent", func(t *testing.T) { 90 setupConfigMemory(t) 91 92 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 93 InitialConfig: minimalConfig, 94 }) 95 require.NoError(t, err) 96 defer ms.Close() 97 98 has, err := ms.HasFile("non-existent") 99 require.NoError(t, err) 100 require.False(t, has) 101 }) 102 103 t.Run("has existing", func(t *testing.T) { 104 setupConfigMemory(t) 105 106 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 107 InitialConfig: minimalConfig, 108 }) 109 require.NoError(t, err) 110 defer ms.Close() 111 112 err = ms.SetFile("existing", []byte("existing file")) 113 require.NoError(t, err) 114 115 has, err := ms.HasFile("existing") 116 require.NoError(t, err) 117 require.True(t, has) 118 }) 119 120 t.Run("has manually created file", func(t *testing.T) { 121 setupConfigMemory(t) 122 123 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 124 InitialConfig: minimalConfig, 125 InitialFiles: map[string][]byte{ 126 "manual": []byte("manual file"), 127 }, 128 }) 129 require.NoError(t, err) 130 defer ms.Close() 131 132 has, err := ms.HasFile("manual") 133 require.NoError(t, err) 134 require.True(t, has) 135 }) 136 } 137 138 func TestMemoryRemoveFile(t *testing.T) { 139 t.Run("remove non-existent", func(t *testing.T) { 140 setupConfigMemory(t) 141 142 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 143 InitialConfig: minimalConfig, 144 }) 145 require.NoError(t, err) 146 defer ms.Close() 147 148 err = ms.RemoveFile("non-existent") 149 require.NoError(t, err) 150 }) 151 152 t.Run("remove existing", func(t *testing.T) { 153 setupConfigMemory(t) 154 155 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 156 InitialConfig: minimalConfig, 157 }) 158 require.NoError(t, err) 159 defer ms.Close() 160 161 err = ms.SetFile("existing", []byte("existing file")) 162 require.NoError(t, err) 163 164 err = ms.RemoveFile("existing") 165 require.NoError(t, err) 166 167 has, err := ms.HasFile("existing") 168 require.NoError(t, err) 169 require.False(t, has) 170 171 _, err = ms.GetFile("existing") 172 require.Error(t, err) 173 }) 174 175 t.Run("remove manually created file", func(t *testing.T) { 176 setupConfigMemory(t) 177 178 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{ 179 InitialConfig: minimalConfig, 180 InitialFiles: map[string][]byte{ 181 "manual": []byte("manual file"), 182 }, 183 }) 184 require.NoError(t, err) 185 defer ms.Close() 186 187 err = ms.RemoveFile("manual") 188 require.NoError(t, err) 189 190 has, err := ms.HasFile("manual") 191 require.NoError(t, err) 192 require.False(t, has) 193 194 _, err = ms.GetFile("manual") 195 require.Error(t, err) 196 }) 197 } 198 199 func TestMemoryStoreString(t *testing.T) { 200 setupConfigMemory(t) 201 202 ms, err := config.NewMemoryStoreWithOptions(&config.MemoryStoreOptions{InitialConfig: emptyConfig}) 203 require.NoError(t, err) 204 defer ms.Close() 205 206 assert.Equal(t, "memory://", ms.String()) 207 }