union_test.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // Test Union filesystem interface
  2. package union_test
  3. import (
  4. "testing"
  5. _ "github.com/rclone/rclone/backend/local"
  6. _ "github.com/rclone/rclone/backend/memory"
  7. "github.com/rclone/rclone/backend/union"
  8. "github.com/rclone/rclone/fstest"
  9. "github.com/rclone/rclone/fstest/fstests"
  10. )
  11. var (
  12. unimplementableFsMethods = []string{"UnWrap", "WrapFs", "SetWrapper", "UserInfo", "Disconnect", "PublicLink", "PutUnchecked", "MergeDirs", "OpenWriterAt", "OpenChunkWriter"}
  13. unimplementableObjectMethods = []string{}
  14. )
  15. // TestIntegration runs integration tests against the remote
  16. func TestIntegration(t *testing.T) {
  17. if *fstest.RemoteName == "" {
  18. t.Skip("Skipping as -remote not set")
  19. }
  20. fstests.Run(t, &fstests.Opt{
  21. RemoteName: *fstest.RemoteName,
  22. UnimplementableFsMethods: unimplementableFsMethods,
  23. UnimplementableObjectMethods: unimplementableObjectMethods,
  24. })
  25. }
  26. func TestStandard(t *testing.T) {
  27. if *fstest.RemoteName != "" {
  28. t.Skip("Skipping as -remote set")
  29. }
  30. dirs := union.MakeTestDirs(t, 3)
  31. upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2]
  32. name := "TestUnion"
  33. fstests.Run(t, &fstests.Opt{
  34. RemoteName: name + ":",
  35. ExtraConfig: []fstests.ExtraConfigItem{
  36. {Name: name, Key: "type", Value: "union"},
  37. {Name: name, Key: "upstreams", Value: upstreams},
  38. {Name: name, Key: "action_policy", Value: "epall"},
  39. {Name: name, Key: "create_policy", Value: "epmfs"},
  40. {Name: name, Key: "search_policy", Value: "ff"},
  41. },
  42. UnimplementableFsMethods: unimplementableFsMethods,
  43. UnimplementableObjectMethods: unimplementableObjectMethods,
  44. QuickTestOK: true,
  45. })
  46. }
  47. func TestRO(t *testing.T) {
  48. if *fstest.RemoteName != "" {
  49. t.Skip("Skipping as -remote set")
  50. }
  51. dirs := union.MakeTestDirs(t, 3)
  52. upstreams := dirs[0] + " " + dirs[1] + ":ro " + dirs[2] + ":ro"
  53. name := "TestUnionRO"
  54. fstests.Run(t, &fstests.Opt{
  55. RemoteName: name + ":",
  56. ExtraConfig: []fstests.ExtraConfigItem{
  57. {Name: name, Key: "type", Value: "union"},
  58. {Name: name, Key: "upstreams", Value: upstreams},
  59. {Name: name, Key: "action_policy", Value: "epall"},
  60. {Name: name, Key: "create_policy", Value: "epmfs"},
  61. {Name: name, Key: "search_policy", Value: "ff"},
  62. },
  63. UnimplementableFsMethods: unimplementableFsMethods,
  64. UnimplementableObjectMethods: unimplementableObjectMethods,
  65. QuickTestOK: true,
  66. })
  67. }
  68. func TestNC(t *testing.T) {
  69. if *fstest.RemoteName != "" {
  70. t.Skip("Skipping as -remote set")
  71. }
  72. dirs := union.MakeTestDirs(t, 3)
  73. upstreams := dirs[0] + " " + dirs[1] + ":nc " + dirs[2] + ":nc"
  74. name := "TestUnionNC"
  75. fstests.Run(t, &fstests.Opt{
  76. RemoteName: name + ":",
  77. ExtraConfig: []fstests.ExtraConfigItem{
  78. {Name: name, Key: "type", Value: "union"},
  79. {Name: name, Key: "upstreams", Value: upstreams},
  80. {Name: name, Key: "action_policy", Value: "epall"},
  81. {Name: name, Key: "create_policy", Value: "epmfs"},
  82. {Name: name, Key: "search_policy", Value: "ff"},
  83. },
  84. UnimplementableFsMethods: unimplementableFsMethods,
  85. UnimplementableObjectMethods: unimplementableObjectMethods,
  86. QuickTestOK: true,
  87. })
  88. }
  89. func TestPolicy1(t *testing.T) {
  90. if *fstest.RemoteName != "" {
  91. t.Skip("Skipping as -remote set")
  92. }
  93. dirs := union.MakeTestDirs(t, 3)
  94. upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2]
  95. name := "TestUnionPolicy1"
  96. fstests.Run(t, &fstests.Opt{
  97. RemoteName: name + ":",
  98. ExtraConfig: []fstests.ExtraConfigItem{
  99. {Name: name, Key: "type", Value: "union"},
  100. {Name: name, Key: "upstreams", Value: upstreams},
  101. {Name: name, Key: "action_policy", Value: "all"},
  102. {Name: name, Key: "create_policy", Value: "lus"},
  103. {Name: name, Key: "search_policy", Value: "all"},
  104. },
  105. UnimplementableFsMethods: unimplementableFsMethods,
  106. UnimplementableObjectMethods: unimplementableObjectMethods,
  107. QuickTestOK: true,
  108. })
  109. }
  110. func TestPolicy2(t *testing.T) {
  111. if *fstest.RemoteName != "" {
  112. t.Skip("Skipping as -remote set")
  113. }
  114. dirs := union.MakeTestDirs(t, 3)
  115. upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2]
  116. name := "TestUnionPolicy2"
  117. fstests.Run(t, &fstests.Opt{
  118. RemoteName: name + ":",
  119. ExtraConfig: []fstests.ExtraConfigItem{
  120. {Name: name, Key: "type", Value: "union"},
  121. {Name: name, Key: "upstreams", Value: upstreams},
  122. {Name: name, Key: "action_policy", Value: "all"},
  123. {Name: name, Key: "create_policy", Value: "rand"},
  124. {Name: name, Key: "search_policy", Value: "ff"},
  125. },
  126. UnimplementableFsMethods: unimplementableFsMethods,
  127. UnimplementableObjectMethods: unimplementableObjectMethods,
  128. QuickTestOK: true,
  129. })
  130. }
  131. func TestPolicy3(t *testing.T) {
  132. if *fstest.RemoteName != "" {
  133. t.Skip("Skipping as -remote set")
  134. }
  135. dirs := union.MakeTestDirs(t, 3)
  136. upstreams := dirs[0] + " " + dirs[1] + " " + dirs[2]
  137. name := "TestUnionPolicy3"
  138. fstests.Run(t, &fstests.Opt{
  139. RemoteName: name + ":",
  140. ExtraConfig: []fstests.ExtraConfigItem{
  141. {Name: name, Key: "type", Value: "union"},
  142. {Name: name, Key: "upstreams", Value: upstreams},
  143. {Name: name, Key: "action_policy", Value: "all"},
  144. {Name: name, Key: "create_policy", Value: "all"},
  145. {Name: name, Key: "search_policy", Value: "all"},
  146. },
  147. UnimplementableFsMethods: unimplementableFsMethods,
  148. UnimplementableObjectMethods: unimplementableObjectMethods,
  149. QuickTestOK: true,
  150. })
  151. }