enable_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package cwhub
  2. import (
  3. "os"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func testInstall(hub *Hub, t *testing.T, item Item) {
  9. // Install the parser
  10. err := hub.DownloadLatest(&item, false, false)
  11. require.NoError(t, err, "failed to download %s", item.Name)
  12. _, err = hub.LocalSync()
  13. require.NoError(t, err, "failed to run localSync")
  14. assert.True(t, hub.Items[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
  15. assert.False(t, hub.Items[item.Type][item.Name].Installed, "%s should not be installed", item.Name)
  16. assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted", item.Name)
  17. err = hub.EnableItem(&item)
  18. require.NoError(t, err, "failed to enable %s", item.Name)
  19. _, err = hub.LocalSync()
  20. require.NoError(t, err, "failed to run localSync")
  21. assert.True(t, hub.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
  22. }
  23. func testTaint(hub *Hub, t *testing.T, item Item) {
  24. assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted", item.Name)
  25. f, err := os.OpenFile(item.LocalPath, os.O_APPEND|os.O_WRONLY, 0600)
  26. require.NoError(t, err, "failed to open %s (%s)", item.LocalPath, item.Name)
  27. defer f.Close()
  28. _, err = f.WriteString("tainted")
  29. require.NoError(t, err, "failed to write to %s (%s)", item.LocalPath, item.Name)
  30. // Local sync and check status
  31. _, err = hub.LocalSync()
  32. require.NoError(t, err, "failed to run localSync")
  33. assert.True(t, hub.Items[item.Type][item.Name].Tainted, "%s should be tainted", item.Name)
  34. }
  35. func testUpdate(hub *Hub, t *testing.T, item Item) {
  36. assert.False(t, hub.Items[item.Type][item.Name].UpToDate, "%s should not be up-to-date", item.Name)
  37. // Update it + check status
  38. err := hub.DownloadLatest(&item, true, true)
  39. require.NoError(t, err, "failed to update %s", item.Name)
  40. // Local sync and check status
  41. _, err = hub.LocalSync()
  42. require.NoError(t, err, "failed to run localSync")
  43. assert.True(t, hub.Items[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
  44. assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted anymore", item.Name)
  45. }
  46. func testDisable(hub *Hub, t *testing.T, item Item) {
  47. assert.True(t, hub.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
  48. // Remove
  49. err := hub.DisableItem(&item, false, false)
  50. require.NoError(t, err, "failed to disable %s", item.Name)
  51. // Local sync and check status
  52. warns, err := hub.LocalSync()
  53. require.NoError(t, err, "failed to run localSync")
  54. require.Empty(t, warns, "unexpected warnings : %+v", warns)
  55. assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted anymore", item.Name)
  56. assert.False(t, hub.Items[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
  57. assert.True(t, hub.Items[item.Type][item.Name].Downloaded, "%s should still be downloaded", item.Name)
  58. // Purge
  59. err = hub.DisableItem(&item, true, false)
  60. require.NoError(t, err, "failed to purge %s", item.Name)
  61. // Local sync and check status
  62. warns, err = hub.LocalSync()
  63. require.NoError(t, err, "failed to run localSync")
  64. require.Empty(t, warns, "unexpected warnings : %+v", warns)
  65. assert.False(t, hub.Items[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
  66. assert.False(t, hub.Items[item.Type][item.Name].Downloaded, "%s should not be downloaded", item.Name)
  67. }
  68. func TestInstallParser(t *testing.T) {
  69. /*
  70. - install a random parser
  71. - check its status
  72. - taint it
  73. - check its status
  74. - force update it
  75. - check its status
  76. - remove it
  77. */
  78. hub := envSetup(t)
  79. // map iteration is random by itself
  80. for _, it := range hub.Items[PARSERS] {
  81. testInstall(hub, t, it)
  82. it = hub.Items[PARSERS][it.Name]
  83. testTaint(hub, t, it)
  84. it = hub.Items[PARSERS][it.Name]
  85. testUpdate(hub, t, it)
  86. it = hub.Items[PARSERS][it.Name]
  87. testDisable(hub, t, it)
  88. break
  89. }
  90. }
  91. func TestInstallCollection(t *testing.T) {
  92. /*
  93. - install a random parser
  94. - check its status
  95. - taint it
  96. - check its status
  97. - force update it
  98. - check its status
  99. - remove it
  100. */
  101. hub := envSetup(t)
  102. // map iteration is random by itself
  103. for _, it := range hub.Items[COLLECTIONS] {
  104. testInstall(hub, t, it)
  105. it = hub.Items[COLLECTIONS][it.Name]
  106. testTaint(hub, t, it)
  107. it = hub.Items[COLLECTIONS][it.Name]
  108. testUpdate(hub, t, it)
  109. it = hub.Items[COLLECTIONS][it.Name]
  110. testDisable(hub, t, it)
  111. break
  112. }
  113. }