utils.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package cstest
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func Copy(sourceFile string, destinationFile string) error {
  10. input, err := os.ReadFile(sourceFile)
  11. if err != nil {
  12. return err
  13. }
  14. err = os.WriteFile(destinationFile, input, 0644)
  15. if err != nil {
  16. return err
  17. }
  18. return nil
  19. }
  20. // checkPathNotContained returns an error if 'subpath' is inside 'path'
  21. func checkPathNotContained(path string, subpath string) error {
  22. absPath, err := filepath.Abs(path)
  23. if err != nil {
  24. return err
  25. }
  26. absSubPath, err := filepath.Abs(subpath)
  27. if err != nil {
  28. return err
  29. }
  30. current := absSubPath
  31. for {
  32. if current == absPath {
  33. return fmt.Errorf("cannot copy a folder onto itself")
  34. }
  35. up := filepath.Dir(current)
  36. if current == up {
  37. break
  38. }
  39. current = up
  40. }
  41. return nil
  42. }
  43. func CopyDir(src string, dest string) error {
  44. err := checkPathNotContained(src, dest)
  45. if err != nil {
  46. return err
  47. }
  48. f, err := os.Open(src)
  49. if err != nil {
  50. return err
  51. }
  52. file, err := f.Stat()
  53. if err != nil {
  54. return err
  55. }
  56. if !file.IsDir() {
  57. return fmt.Errorf("Source " + file.Name() + " is not a directory!")
  58. }
  59. err = os.MkdirAll(dest, 0755)
  60. if err != nil {
  61. return err
  62. }
  63. files, err := os.ReadDir(src)
  64. if err != nil {
  65. return err
  66. }
  67. for _, f := range files {
  68. if f.IsDir() {
  69. err = CopyDir(src+"/"+f.Name(), dest+"/"+f.Name())
  70. if err != nil {
  71. return err
  72. }
  73. }
  74. if !f.IsDir() {
  75. content, err := os.ReadFile(src + "/" + f.Name())
  76. if err != nil {
  77. return err
  78. }
  79. err = os.WriteFile(dest+"/"+f.Name(), content, 0755)
  80. if err != nil {
  81. return err
  82. }
  83. }
  84. }
  85. return nil
  86. }
  87. func AssertErrorContains(t *testing.T, err error, expectedErr string) {
  88. if expectedErr != "" {
  89. assert.ErrorContains(t, err, expectedErr)
  90. return
  91. }
  92. assert.NoError(t, err)
  93. }