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  }