2023-10-20 12:32:35 +00:00
|
|
|
package cwhub
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
2023-11-09 14:19:38 +00:00
|
|
|
func testInstall(hub *Hub, t *testing.T, item *Item) {
|
2023-10-20 12:32:35 +00:00
|
|
|
// Install the parser
|
2023-11-09 14:19:38 +00:00
|
|
|
err := item.downloadLatest(false, false)
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to download %s", item.Name)
|
|
|
|
|
2023-11-09 11:07:09 +00:00
|
|
|
err = hub.localSync()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
|
|
assert.True(t, hub.Items[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Installed, "%s should not be installed", item.Name)
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted", item.Name)
|
|
|
|
|
2023-11-09 14:19:38 +00:00
|
|
|
err = item.enable()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to enable %s", item.Name)
|
|
|
|
|
2023-11-09 11:07:09 +00:00
|
|
|
err = hub.localSync()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
|
|
assert.True(t, hub.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
|
|
|
|
}
|
|
|
|
|
2023-11-09 14:19:38 +00:00
|
|
|
func testTaint(hub *Hub, t *testing.T, item *Item) {
|
2023-10-20 12:32:35 +00:00
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted", item.Name)
|
|
|
|
|
|
|
|
f, err := os.OpenFile(item.LocalPath, os.O_APPEND|os.O_WRONLY, 0600)
|
|
|
|
require.NoError(t, err, "failed to open %s (%s)", item.LocalPath, item.Name)
|
|
|
|
|
|
|
|
defer f.Close()
|
|
|
|
|
|
|
|
_, err = f.WriteString("tainted")
|
|
|
|
require.NoError(t, err, "failed to write to %s (%s)", item.LocalPath, item.Name)
|
|
|
|
|
|
|
|
// Local sync and check status
|
2023-11-09 11:07:09 +00:00
|
|
|
err = hub.localSync()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
|
|
assert.True(t, hub.Items[item.Type][item.Name].Tainted, "%s should be tainted", item.Name)
|
|
|
|
}
|
|
|
|
|
2023-11-09 14:19:38 +00:00
|
|
|
func testUpdate(hub *Hub, t *testing.T, item *Item) {
|
2023-10-20 12:32:35 +00:00
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].UpToDate, "%s should not be up-to-date", item.Name)
|
|
|
|
|
|
|
|
// Update it + check status
|
2023-11-09 14:19:38 +00:00
|
|
|
err := item.downloadLatest(true, true)
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to update %s", item.Name)
|
|
|
|
|
|
|
|
// Local sync and check status
|
2023-11-09 11:07:09 +00:00
|
|
|
err = hub.localSync()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
|
|
assert.True(t, hub.Items[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted anymore", item.Name)
|
|
|
|
}
|
|
|
|
|
2023-11-09 14:19:38 +00:00
|
|
|
func testDisable(hub *Hub, t *testing.T, item *Item) {
|
2023-10-20 12:32:35 +00:00
|
|
|
assert.True(t, hub.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
|
|
|
|
|
|
|
|
// Remove
|
2023-11-09 14:19:38 +00:00
|
|
|
err := item.disable(false, false)
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to disable %s", item.Name)
|
|
|
|
|
|
|
|
// Local sync and check status
|
2023-11-09 11:07:09 +00:00
|
|
|
err = hub.localSync()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to run localSync")
|
2023-11-09 11:07:09 +00:00
|
|
|
require.Empty(t, hub.Warnings)
|
2023-10-20 12:32:35 +00:00
|
|
|
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Tainted, "%s should not be tainted anymore", item.Name)
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
|
|
|
|
assert.True(t, hub.Items[item.Type][item.Name].Downloaded, "%s should still be downloaded", item.Name)
|
|
|
|
|
|
|
|
// Purge
|
2023-11-09 14:19:38 +00:00
|
|
|
err = item.disable(true, false)
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to purge %s", item.Name)
|
|
|
|
|
|
|
|
// Local sync and check status
|
2023-11-09 11:07:09 +00:00
|
|
|
err = hub.localSync()
|
2023-10-20 12:32:35 +00:00
|
|
|
require.NoError(t, err, "failed to run localSync")
|
2023-11-09 11:07:09 +00:00
|
|
|
require.Empty(t, hub.Warnings)
|
2023-10-20 12:32:35 +00:00
|
|
|
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
|
|
|
|
assert.False(t, hub.Items[item.Type][item.Name].Downloaded, "%s should not be downloaded", item.Name)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInstallParser(t *testing.T) {
|
|
|
|
/*
|
|
|
|
- install a random parser
|
|
|
|
- check its status
|
|
|
|
- taint it
|
|
|
|
- check its status
|
|
|
|
- force update it
|
|
|
|
- check its status
|
|
|
|
- remove it
|
|
|
|
*/
|
|
|
|
hub := envSetup(t)
|
|
|
|
|
|
|
|
// map iteration is random by itself
|
|
|
|
for _, it := range hub.Items[PARSERS] {
|
|
|
|
testInstall(hub, t, it)
|
|
|
|
it = hub.Items[PARSERS][it.Name]
|
|
|
|
testTaint(hub, t, it)
|
|
|
|
it = hub.Items[PARSERS][it.Name]
|
|
|
|
testUpdate(hub, t, it)
|
|
|
|
it = hub.Items[PARSERS][it.Name]
|
|
|
|
testDisable(hub, t, it)
|
|
|
|
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestInstallCollection(t *testing.T) {
|
|
|
|
/*
|
|
|
|
- install a random parser
|
|
|
|
- check its status
|
|
|
|
- taint it
|
|
|
|
- check its status
|
|
|
|
- force update it
|
|
|
|
- check its status
|
|
|
|
- remove it
|
|
|
|
*/
|
|
|
|
hub := envSetup(t)
|
|
|
|
|
|
|
|
// map iteration is random by itself
|
|
|
|
for _, it := range hub.Items[COLLECTIONS] {
|
|
|
|
testInstall(hub, t, it)
|
|
|
|
it = hub.Items[COLLECTIONS][it.Name]
|
|
|
|
testTaint(hub, t, it)
|
|
|
|
it = hub.Items[COLLECTIONS][it.Name]
|
|
|
|
testUpdate(hub, t, it)
|
|
|
|
it = hub.Items[COLLECTIONS][it.Name]
|
|
|
|
testDisable(hub, t, it)
|
|
|
|
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|