1
0

storage_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package lfsutil
  2. import (
  3. "bytes"
  4. "io"
  5. "os"
  6. "path/filepath"
  7. "runtime"
  8. "strings"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestLocalStorage_storagePath(t *testing.T) {
  13. if runtime.GOOS == "windows" {
  14. t.Skip("Skipping testing on Windows")
  15. return
  16. }
  17. s := &LocalStorage{
  18. Root: "/lfs-objects",
  19. }
  20. tests := []struct {
  21. name string
  22. oid OID
  23. expPath string
  24. }{
  25. {
  26. name: "empty oid",
  27. oid: "",
  28. },
  29. {
  30. name: "valid oid",
  31. oid: "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
  32. expPath: "/lfs-objects/e/f/ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
  33. },
  34. }
  35. for _, test := range tests {
  36. t.Run(test.name, func(t *testing.T) {
  37. assert.Equal(t, test.expPath, s.storagePath(test.oid))
  38. })
  39. }
  40. }
  41. func TestLocalStorage_Upload(t *testing.T) {
  42. s := &LocalStorage{
  43. Root: filepath.Join(os.TempDir(), "lfs-objects"),
  44. }
  45. t.Cleanup(func() {
  46. _ = os.RemoveAll(s.Root)
  47. })
  48. tests := []struct {
  49. name string
  50. oid OID
  51. content string
  52. expWritten int64
  53. expErr error
  54. }{
  55. {
  56. name: "invalid oid",
  57. oid: "bad_oid",
  58. expErr: ErrInvalidOID,
  59. },
  60. {
  61. name: "valid oid",
  62. oid: "ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f",
  63. content: "Hello world!",
  64. expWritten: 12,
  65. },
  66. }
  67. for _, test := range tests {
  68. t.Run(test.name, func(t *testing.T) {
  69. written, err := s.Upload(test.oid, io.NopCloser(strings.NewReader(test.content)))
  70. assert.Equal(t, test.expWritten, written)
  71. assert.Equal(t, test.expErr, err)
  72. })
  73. }
  74. }
  75. func TestLocalStorage_Download(t *testing.T) {
  76. oid := OID("ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f")
  77. s := &LocalStorage{
  78. Root: filepath.Join(os.TempDir(), "lfs-objects"),
  79. }
  80. t.Cleanup(func() {
  81. _ = os.RemoveAll(s.Root)
  82. })
  83. fpath := s.storagePath(oid)
  84. err := os.MkdirAll(filepath.Dir(fpath), os.ModePerm)
  85. if err != nil {
  86. t.Fatal(err)
  87. }
  88. err = os.WriteFile(fpath, []byte("Hello world!"), os.ModePerm)
  89. if err != nil {
  90. t.Fatal(err)
  91. }
  92. tests := []struct {
  93. name string
  94. oid OID
  95. expContent string
  96. expErr error
  97. }{
  98. {
  99. name: "object not exists",
  100. oid: "bad_oid",
  101. expErr: ErrObjectNotExist,
  102. },
  103. {
  104. name: "valid oid",
  105. oid: oid,
  106. expContent: "Hello world!",
  107. },
  108. }
  109. for _, test := range tests {
  110. t.Run(test.name, func(t *testing.T) {
  111. var buf bytes.Buffer
  112. err := s.Download(test.oid, &buf)
  113. assert.Equal(t, test.expContent, buf.String())
  114. assert.Equal(t, test.expErr, err)
  115. })
  116. }
  117. }