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