walker_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package ftp
  2. import (
  3. "fmt"
  4. "strings"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestFieldsReturnCorrectData(t *testing.T) {
  10. w := Walker{
  11. cur: item{
  12. path: "/root/",
  13. err: fmt.Errorf("This is an error"),
  14. entry: Entry{
  15. Name: "root",
  16. Size: 123,
  17. Time: time.Now(),
  18. Type: EntryTypeFolder,
  19. },
  20. },
  21. }
  22. assert.Equal(t, "This is an error", w.Err().Error())
  23. assert.Equal(t, "/root/", w.Path())
  24. assert.Equal(t, EntryTypeFolder, w.Stat().Type)
  25. }
  26. func TestSkipDirIsCorrectlySet(t *testing.T) {
  27. w := Walker{}
  28. w.SkipDir()
  29. assert.Equal(t, false, w.descend)
  30. }
  31. func TestNoDescendDoesNotAddToStack(t *testing.T) {
  32. w := new(Walker)
  33. w.cur = item{
  34. path: "/root/",
  35. err: nil,
  36. entry: Entry{
  37. Name: "root",
  38. Size: 123,
  39. Time: time.Now(),
  40. Type: EntryTypeFolder,
  41. },
  42. }
  43. w.stack = []item{
  44. item{
  45. path: "file",
  46. err: nil,
  47. entry: Entry{
  48. Name: "file",
  49. Size: 123,
  50. Time: time.Now(),
  51. Type: EntryTypeFile,
  52. },
  53. },
  54. }
  55. w.SkipDir()
  56. result := w.Step()
  57. assert.Equal(t, true, result, "Result should return true")
  58. assert.Equal(t, 0, len(w.stack))
  59. assert.Equal(t, true, w.descend)
  60. }
  61. func TestEmptyStackReturnsFalse(t *testing.T) {
  62. w := new(Walker)
  63. w.cur = item{
  64. path: "/root/",
  65. err: nil,
  66. entry: Entry{
  67. Name: "root",
  68. Size: 123,
  69. Time: time.Now(),
  70. Type: EntryTypeFolder,
  71. },
  72. }
  73. w.stack = []item{}
  74. w.SkipDir()
  75. result := w.Step()
  76. assert.Equal(t, false, result, "Result should return false")
  77. }
  78. func TestCurAndStackSetCorrectly(t *testing.T) {
  79. w := new(Walker)
  80. w.cur = item{
  81. path: "root/file1",
  82. err: nil,
  83. entry: Entry{
  84. Name: "file1",
  85. Size: 123,
  86. Time: time.Now(),
  87. Type: EntryTypeFile,
  88. },
  89. }
  90. w.stack = []item{
  91. item{
  92. path: "file",
  93. err: nil,
  94. entry: Entry{
  95. Name: "file",
  96. Size: 123,
  97. Time: time.Now(),
  98. Type: EntryTypeFile,
  99. },
  100. },
  101. item{
  102. path: "root/file1",
  103. err: nil,
  104. entry: Entry{
  105. Name: "file1",
  106. Size: 123,
  107. Time: time.Now(),
  108. Type: EntryTypeFile,
  109. },
  110. },
  111. }
  112. result := w.Step()
  113. result = w.Step()
  114. assert.Equal(t, true, result, "Result should return true")
  115. assert.Equal(t, 0, len(w.stack))
  116. assert.Equal(t, "file", w.cur.entry.Name)
  117. }
  118. func TestStackIsPopulatedCorrectly(t *testing.T) {
  119. mock, err := newFtpMock(t, "127.0.0.1")
  120. if err != nil {
  121. t.Fatal(err)
  122. }
  123. defer mock.Close()
  124. c, cErr := Connect(mock.Addr())
  125. if cErr != nil {
  126. t.Fatal(err)
  127. }
  128. w := Walker{
  129. cur: item{
  130. path: "/root",
  131. entry: Entry{
  132. Name: "root",
  133. Size: 123,
  134. Time: time.Now(),
  135. Type: EntryTypeFolder,
  136. },
  137. },
  138. serverConn: c,
  139. }
  140. w.descend = true
  141. w.Step()
  142. assert.Equal(t, 0, len(w.stack))
  143. assert.Equal(t, "lo", w.cur.entry.Name)
  144. assert.Equal(t, true, strings.HasSuffix(w.cur.path, "/"))
  145. }