filemanager_test.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package filemanager
  2. import (
  3. "context"
  4. "fmt"
  5. "io"
  6. "math/rand"
  7. "os"
  8. "path/filepath"
  9. "testing"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func Test_NewFileManager(t *testing.T) {
  13. t.Run("file system", func(t *testing.T) {
  14. // Create File Manager
  15. tmpPath := filepath.Join(os.TempDir(), fmt.Sprintf("opencost-test-file-manager-%d", rand.Int31()))
  16. defer os.Remove(tmpPath) // remove managed file on completion to ensure it does not exist for next run
  17. fm, err := NewFileManager(tmpPath)
  18. require.NoError(t, err)
  19. // Attempt to download Managed file into a new file, this should fail because managed file has not been initalized
  20. downloadFile, err := os.CreateTemp("", "opencost-test-file-manager-*")
  21. require.NoError(t, err)
  22. err = fm.Download(context.TODO(), downloadFile)
  23. require.ErrorIs(t, err, ErrNotFound)
  24. // Create a file and add content to it
  25. uploadFile, err := os.CreateTemp("", "opencost-test-file-manager-*")
  26. require.NoError(t, err)
  27. _, err = uploadFile.WriteString("test-content")
  28. require.NoError(t, err)
  29. // Upload file to managed file
  30. err = fm.Upload(context.TODO(), uploadFile)
  31. require.NoError(t, err)
  32. // Download managed file to original file
  33. err = fm.Download(context.TODO(), downloadFile)
  34. require.NoError(t, err)
  35. // Check that content matches
  36. _, err = downloadFile.Seek(0, io.SeekStart)
  37. require.NoError(t, err)
  38. data, err := io.ReadAll(downloadFile)
  39. require.NoError(t, err)
  40. require.Equal(t, "test-content", string(data))
  41. })
  42. }