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  }