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