1package storage
2
3import (
4	"encoding/json"
5	"io/ioutil"
6	"os"
7	"path/filepath"
8	"testing"
9
10	"github.com/google/uuid"
11	"github.com/stretchr/testify/require"
12)
13
14func readFilesystemID(t *testing.T, path string) string {
15	metadata := make(map[string]string)
16
17	f, err := os.Open(filepath.Join(path, metadataFilename))
18	require.NoError(t, err)
19	defer f.Close()
20
21	require.NoError(t, json.NewDecoder(f).Decode(&metadata))
22	return metadata["gitaly_filesystem_id"]
23}
24
25func TestWriteMetdataFile(t *testing.T) {
26	tempDir, err := ioutil.TempDir("", t.Name())
27	require.NoError(t, err)
28	defer func() {
29		require.NoError(t, os.RemoveAll(tempDir))
30	}()
31
32	require.NoError(t, WriteMetadataFile(tempDir))
33	require.NotEmpty(t, readFilesystemID(t, tempDir))
34}
35
36func TestWriteMetadataFile_AlreadyExists(t *testing.T) {
37	tempDir, err := ioutil.TempDir("", t.Name())
38	require.NoError(t, err)
39	defer func() {
40		require.NoError(t, os.RemoveAll(tempDir))
41	}()
42
43	metadataPath := filepath.Join(tempDir, ".gitaly-metadata")
44	metadataFile, err := os.Create(metadataPath)
45	require.NoError(t, err)
46
47	m := Metadata{
48		GitalyFilesystemID: uuid.New().String(),
49	}
50
51	require.NoError(t, json.NewEncoder(metadataFile).Encode(&m))
52	require.NoError(t, metadataFile.Close())
53
54	require.NoError(t, WriteMetadataFile(tempDir))
55
56	require.Equal(t, m.GitalyFilesystemID, readFilesystemID(t, tempDir), "WriteMetadataFile should not clobber the existing file")
57}
58
59func TestReadMetadataFile(t *testing.T) {
60	metadata, err := ReadMetadataFile("testdata")
61	require.NoError(t, err)
62	require.Equal(t, "test filesystem id", metadata.GitalyFilesystemID, "filesystem id should match the harded value in testdata/.gitaly-metadata")
63}
64
65func TestReadMetadataFile_FileNotExists(t *testing.T) {
66	_, err := ReadMetadataFile("/path/doesnt/exist")
67	require.Error(t, err)
68}
69