config_test.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package settings
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. // GIVEN default config
  9. // WHEN setPrivilegeElevator gets called
  10. // THEN sudobin should stay as "sudo" (given sudo exists)
  11. func TestConfiguration_setPrivilegeElevator(t *testing.T) {
  12. oldPath := os.Getenv("PATH")
  13. path, err := os.MkdirTemp("", "yay-test")
  14. assert.NoError(t, err)
  15. doas := filepath.Join(path, "sudo")
  16. _, err = os.Create(doas)
  17. os.Chmod(doas, 0o755)
  18. assert.NoError(t, err)
  19. defer os.RemoveAll(path)
  20. config := DefaultConfig()
  21. config.SudoLoop = true
  22. config.SudoFlags = "-v"
  23. os.Setenv("PATH", path)
  24. err = config.setPrivilegeElevator()
  25. os.Setenv("PATH", oldPath)
  26. assert.NoError(t, err)
  27. assert.Equal(t, "sudo", config.SudoBin)
  28. assert.Equal(t, "-v", config.SudoFlags)
  29. assert.True(t, config.SudoLoop)
  30. }
  31. // GIVEN default config and sudo loop enabled
  32. // GIVEN only su in path
  33. // WHEN setPrivilegeElevator gets called
  34. // THEN sudobin should be changed to "su"
  35. func TestConfiguration_setPrivilegeElevator_su(t *testing.T) {
  36. oldPath := os.Getenv("PATH")
  37. path, err := os.MkdirTemp("", "yay-test")
  38. assert.NoError(t, err)
  39. doas := filepath.Join(path, "su")
  40. _, err = os.Create(doas)
  41. os.Chmod(doas, 0o755)
  42. assert.NoError(t, err)
  43. defer os.RemoveAll(path)
  44. config := DefaultConfig()
  45. config.SudoLoop = true
  46. config.SudoFlags = "-v"
  47. os.Setenv("PATH", path)
  48. err = config.setPrivilegeElevator()
  49. os.Setenv("PATH", oldPath)
  50. assert.NoError(t, err)
  51. assert.Equal(t, "su", config.SudoBin)
  52. assert.Equal(t, "", config.SudoFlags)
  53. assert.False(t, config.SudoLoop)
  54. }
  55. // GIVEN default config and sudo loop enabled
  56. // GIVEN no sudo in path
  57. // WHEN setPrivilegeElevator gets called
  58. // THEN sudobin should be changed to "su"
  59. func TestConfiguration_setPrivilegeElevator_no_path(t *testing.T) {
  60. oldPath := os.Getenv("PATH")
  61. os.Setenv("PATH", "")
  62. config := DefaultConfig()
  63. config.SudoLoop = true
  64. config.SudoFlags = "-v"
  65. err := config.setPrivilegeElevator()
  66. os.Setenv("PATH", oldPath)
  67. assert.Error(t, err)
  68. assert.Equal(t, "sudo", config.SudoBin)
  69. assert.Equal(t, "", config.SudoFlags)
  70. assert.False(t, config.SudoLoop)
  71. }
  72. // GIVEN default config and sudo loop enabled
  73. // GIVEN doas in path
  74. // WHEN setPrivilegeElevator gets called
  75. // THEN sudobin should be changed to "doas"
  76. func TestConfiguration_setPrivilegeElevator_doas(t *testing.T) {
  77. oldPath := os.Getenv("PATH")
  78. path, err := os.MkdirTemp("", "yay-test")
  79. assert.NoError(t, err)
  80. doas := filepath.Join(path, "doas")
  81. _, err = os.Create(doas)
  82. os.Chmod(doas, 0o755)
  83. assert.NoError(t, err)
  84. defer os.RemoveAll(path)
  85. config := DefaultConfig()
  86. config.SudoLoop = true
  87. config.SudoFlags = "-v"
  88. os.Setenv("PATH", path)
  89. err = config.setPrivilegeElevator()
  90. os.Setenv("PATH", oldPath)
  91. assert.NoError(t, err)
  92. assert.Equal(t, "doas", config.SudoBin)
  93. assert.Equal(t, "", config.SudoFlags)
  94. assert.False(t, config.SudoLoop)
  95. }
  96. // GIVEN config with wrapper and sudo loop enabled
  97. // GIVEN wrapper is in path
  98. // WHEN setPrivilegeElevator gets called
  99. // THEN sudobin should be kept as the wrapper
  100. func TestConfiguration_setPrivilegeElevator_custom_script(t *testing.T) {
  101. oldPath := os.Getenv("PATH")
  102. path, err := os.MkdirTemp("", "yay-test")
  103. assert.NoError(t, err)
  104. wrapper := filepath.Join(path, "custom-wrapper")
  105. _, err = os.Create(wrapper)
  106. os.Chmod(wrapper, 0o755)
  107. assert.NoError(t, err)
  108. defer os.RemoveAll(path)
  109. config := DefaultConfig()
  110. config.SudoLoop = true
  111. config.SudoBin = wrapper
  112. config.SudoFlags = "-v"
  113. os.Setenv("PATH", path)
  114. err = config.setPrivilegeElevator()
  115. os.Setenv("PATH", oldPath)
  116. assert.NoError(t, err)
  117. assert.Equal(t, wrapper, config.SudoBin)
  118. assert.Equal(t, "-v", config.SudoFlags)
  119. assert.True(t, config.SudoLoop)
  120. }