|
@@ -29,23 +29,15 @@ import (
|
|
|
var responseByPath map[string]string
|
|
|
|
|
|
func TestItemStatus(t *testing.T) {
|
|
|
- cfg := envSetup(t)
|
|
|
- defer envTearDown(cfg)
|
|
|
-
|
|
|
- // DownloadHubIdx()
|
|
|
- err := UpdateHubIdx(cfg.Hub)
|
|
|
- require.NoError(t, err, "failed to download index")
|
|
|
-
|
|
|
- err = GetHubIdx(cfg.Hub)
|
|
|
- require.NoError(t, err, "failed to load hub index")
|
|
|
+ hub := envSetup(t)
|
|
|
|
|
|
// get existing map
|
|
|
- x := GetItemMap(COLLECTIONS)
|
|
|
+ x := hub.GetItemMap(COLLECTIONS)
|
|
|
require.NotEmpty(t, x)
|
|
|
|
|
|
// Get item : good and bad
|
|
|
for k := range x {
|
|
|
- item := GetItem(COLLECTIONS, k)
|
|
|
+ item := hub.GetItem(COLLECTIONS, k)
|
|
|
require.NotNil(t, item)
|
|
|
|
|
|
item.Installed = true
|
|
@@ -65,76 +57,101 @@ func TestItemStatus(t *testing.T) {
|
|
|
require.Equal(t, "disabled,local", txt)
|
|
|
}
|
|
|
|
|
|
- DisplaySummary()
|
|
|
+ err := DisplaySummary()
|
|
|
+ require.NoError(t, err)
|
|
|
}
|
|
|
|
|
|
func TestGetters(t *testing.T) {
|
|
|
- cfg := envSetup(t)
|
|
|
- defer envTearDown(cfg)
|
|
|
-
|
|
|
- // DownloadHubIdx()
|
|
|
- err := UpdateHubIdx(cfg.Hub)
|
|
|
- require.NoError(t, err, "failed to download index")
|
|
|
-
|
|
|
- err = GetHubIdx(cfg.Hub)
|
|
|
- require.NoError(t, err, "failed to load hub index")
|
|
|
+ hub := envSetup(t)
|
|
|
|
|
|
// get non existing map
|
|
|
- empty := GetItemMap("ratata")
|
|
|
+ empty := hub.GetItemMap("ratata")
|
|
|
require.Nil(t, empty)
|
|
|
|
|
|
// get existing map
|
|
|
- x := GetItemMap(COLLECTIONS)
|
|
|
+ x := hub.GetItemMap(COLLECTIONS)
|
|
|
require.NotEmpty(t, x)
|
|
|
|
|
|
// Get item : good and bad
|
|
|
for k := range x {
|
|
|
- empty := GetItem(COLLECTIONS, k+"nope")
|
|
|
+ empty := hub.GetItem(COLLECTIONS, k+"nope")
|
|
|
require.Nil(t, empty)
|
|
|
|
|
|
- item := GetItem(COLLECTIONS, k)
|
|
|
+ item := hub.GetItem(COLLECTIONS, k)
|
|
|
require.NotNil(t, item)
|
|
|
|
|
|
// Add item and get it
|
|
|
item.Name += "nope"
|
|
|
- err := AddItem(COLLECTIONS, *item)
|
|
|
+ err := hub.AddItem(COLLECTIONS, *item)
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
- newitem := GetItem(COLLECTIONS, item.Name)
|
|
|
+ newitem := hub.GetItem(COLLECTIONS, item.Name)
|
|
|
require.NotNil(t, newitem)
|
|
|
|
|
|
- err = AddItem("ratata", *item)
|
|
|
+ err = hub.AddItem("ratata", *item)
|
|
|
cstest.RequireErrorContains(t, err, "ItemType ratata is unknown")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
func TestIndexDownload(t *testing.T) {
|
|
|
- cfg := envSetup(t)
|
|
|
- defer envTearDown(cfg)
|
|
|
+ hub := envSetup(t)
|
|
|
|
|
|
- // DownloadHubIdx()
|
|
|
- err := UpdateHubIdx(cfg.Hub)
|
|
|
+ _, err := InitHubUpdate(hub.cfg)
|
|
|
require.NoError(t, err, "failed to download index")
|
|
|
|
|
|
- err = GetHubIdx(cfg.Hub)
|
|
|
+ _, err = GetHub()
|
|
|
require.NoError(t, err, "failed to load hub index")
|
|
|
}
|
|
|
|
|
|
-func getTestCfg() *csconfig.Config {
|
|
|
- cfg := &csconfig.Config{Hub: &csconfig.HubCfg{}}
|
|
|
- cfg.Hub.InstallDir, _ = filepath.Abs("./install")
|
|
|
- cfg.Hub.HubDir, _ = filepath.Abs("./hubdir")
|
|
|
- cfg.Hub.HubIndexFile = filepath.Clean("./hubdir/.index.json")
|
|
|
+// testHub initializes a temporary hub with an empty json file, optionally updating it
|
|
|
+func testHub(t *testing.T, update bool) *Hub {
|
|
|
+ tmpDir, err := os.MkdirTemp("", "testhub")
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ hubCfg := &csconfig.HubCfg{
|
|
|
+ HubDir: filepath.Join(tmpDir, "crowdsec", "hub"),
|
|
|
+ HubIndexFile: filepath.Join(tmpDir, "crowdsec", "hub", ".index.json"),
|
|
|
+ InstallDir: filepath.Join(tmpDir, "crowdsec"),
|
|
|
+ InstallDataDir: filepath.Join(tmpDir, "installed-data"),
|
|
|
+ }
|
|
|
+
|
|
|
+ err = os.MkdirAll(hubCfg.HubDir, 0700)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ err = os.MkdirAll(hubCfg.InstallDir, 0700)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ err = os.MkdirAll(hubCfg.InstallDataDir, 0700)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ index, err := os.Create(hubCfg.HubIndexFile)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ _, err = index.WriteString(`{}`)
|
|
|
+ require.NoError(t, err)
|
|
|
|
|
|
- return cfg
|
|
|
+ index.Close()
|
|
|
+
|
|
|
+ t.Cleanup(func() {
|
|
|
+ os.RemoveAll(tmpDir)
|
|
|
+ })
|
|
|
+
|
|
|
+ constructor := InitHub
|
|
|
+
|
|
|
+ if update {
|
|
|
+ constructor = InitHubUpdate
|
|
|
+ }
|
|
|
+
|
|
|
+ hub, err := constructor(hubCfg)
|
|
|
+ require.NoError(t, err)
|
|
|
+
|
|
|
+ return hub
|
|
|
}
|
|
|
|
|
|
-func envSetup(t *testing.T) *csconfig.Config {
|
|
|
+func envSetup(t *testing.T) *Hub {
|
|
|
resetResponseByPath()
|
|
|
log.SetLevel(log.DebugLevel)
|
|
|
|
|
|
- cfg := getTestCfg()
|
|
|
-
|
|
|
defaultTransport := http.DefaultClient.Transport
|
|
|
|
|
|
t.Cleanup(func() {
|
|
@@ -144,14 +161,7 @@ func envSetup(t *testing.T) *csconfig.Config {
|
|
|
// Mock the http client
|
|
|
http.DefaultClient.Transport = newMockTransport()
|
|
|
|
|
|
- err := os.MkdirAll(cfg.Hub.InstallDir, 0700)
|
|
|
- require.NoError(t, err)
|
|
|
-
|
|
|
- err = os.MkdirAll(cfg.Hub.HubDir, 0700)
|
|
|
- require.NoError(t, err)
|
|
|
-
|
|
|
- err = UpdateHubIdx(cfg.Hub)
|
|
|
- require.NoError(t, err)
|
|
|
+ hub := testHub(t, true)
|
|
|
|
|
|
// if err := os.RemoveAll(cfg.Hub.InstallDir); err != nil {
|
|
|
// log.Fatalf("failed to remove %s : %s", cfg.Hub.InstallDir, err)
|
|
@@ -159,42 +169,33 @@ func envSetup(t *testing.T) *csconfig.Config {
|
|
|
// if err := os.MkdirAll(cfg.Hub.InstallDir, 0700); err != nil {
|
|
|
// log.Fatalf("failed to mkdir %s : %s", cfg.Hub.InstallDir, err)
|
|
|
// }
|
|
|
- return cfg
|
|
|
-}
|
|
|
-
|
|
|
-func envTearDown(cfg *csconfig.Config) {
|
|
|
- if err := os.RemoveAll(cfg.Hub.InstallDir); err != nil {
|
|
|
- log.Fatalf("failed to remove %s : %s", cfg.Hub.InstallDir, err)
|
|
|
- }
|
|
|
-
|
|
|
- if err := os.RemoveAll(cfg.Hub.HubDir); err != nil {
|
|
|
- log.Fatalf("failed to remove %s : %s", cfg.Hub.HubDir, err)
|
|
|
- }
|
|
|
+ return hub
|
|
|
}
|
|
|
|
|
|
-func testInstallItem(cfg *csconfig.HubCfg, t *testing.T, item Item) {
|
|
|
+func testInstallItem(hub *Hub, t *testing.T, item Item) {
|
|
|
// Install the parser
|
|
|
- err := DownloadLatest(cfg, &item, false, false)
|
|
|
+
|
|
|
+ err := hub.DownloadLatest(&item, false, false)
|
|
|
require.NoError(t, err, "failed to download %s", item.Name)
|
|
|
|
|
|
- _, err = LocalSync(cfg)
|
|
|
+ _, err = hub.LocalSync()
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
- assert.True(t, hubIdx.Items[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Installed, "%s should not be installed", item.Name)
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Tainted, "%s should not be tainted", item.Name)
|
|
|
+ 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)
|
|
|
|
|
|
- err = EnableItem(cfg, &item)
|
|
|
+ err = hub.EnableItem(&item)
|
|
|
require.NoError(t, err, "failed to enable %s", item.Name)
|
|
|
|
|
|
- _, err = LocalSync(cfg)
|
|
|
+ _, err = hub.LocalSync()
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
- assert.True(t, hubIdx.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
|
|
|
+ assert.True(t, hub.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
|
|
|
}
|
|
|
|
|
|
-func testTaintItem(cfg *csconfig.HubCfg, t *testing.T, item Item) {
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Tainted, "%s should not be tainted", item.Name)
|
|
|
+func testTaintItem(hub *Hub, t *testing.T, item Item) {
|
|
|
+ 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)
|
|
@@ -205,54 +206,54 @@ func testTaintItem(cfg *csconfig.HubCfg, t *testing.T, item Item) {
|
|
|
require.NoError(t, err, "failed to write to %s (%s)", item.LocalPath, item.Name)
|
|
|
|
|
|
// Local sync and check status
|
|
|
- _, err = LocalSync(cfg)
|
|
|
+ _, err = hub.LocalSync()
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
- assert.True(t, hubIdx.Items[item.Type][item.Name].Tainted, "%s should be tainted", item.Name)
|
|
|
+ assert.True(t, hub.Items[item.Type][item.Name].Tainted, "%s should be tainted", item.Name)
|
|
|
}
|
|
|
|
|
|
-func testUpdateItem(cfg *csconfig.HubCfg, t *testing.T, item Item) {
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].UpToDate, "%s should not be up-to-date", item.Name)
|
|
|
+func testUpdateItem(hub *Hub, t *testing.T, item Item) {
|
|
|
+ assert.False(t, hub.Items[item.Type][item.Name].UpToDate, "%s should not be up-to-date", item.Name)
|
|
|
|
|
|
// Update it + check status
|
|
|
- err := DownloadLatest(cfg, &item, true, true)
|
|
|
+ err := hub.DownloadLatest(&item, true, true)
|
|
|
require.NoError(t, err, "failed to update %s", item.Name)
|
|
|
|
|
|
// Local sync and check status
|
|
|
- _, err = LocalSync(cfg)
|
|
|
+ _, err = hub.LocalSync()
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
|
|
|
- assert.True(t, hubIdx.Items[item.Type][item.Name].UpToDate, "%s should be up-to-date", item.Name)
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Tainted, "%s should not be tainted anymore", item.Name)
|
|
|
+ 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)
|
|
|
}
|
|
|
|
|
|
-func testDisableItem(cfg *csconfig.HubCfg, t *testing.T, item Item) {
|
|
|
- assert.True(t, hubIdx.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
|
|
|
+func testDisableItem(hub *Hub, t *testing.T, item Item) {
|
|
|
+ assert.True(t, hub.Items[item.Type][item.Name].Installed, "%s should be installed", item.Name)
|
|
|
|
|
|
// Remove
|
|
|
- err := DisableItem(cfg, &item, false, false)
|
|
|
+ err := hub.DisableItem(&item, false, false)
|
|
|
require.NoError(t, err, "failed to disable %s", item.Name)
|
|
|
|
|
|
// Local sync and check status
|
|
|
- warns, err := LocalSync(cfg)
|
|
|
+ warns, err := hub.LocalSync()
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
require.Empty(t, warns, "unexpected warnings : %+v", warns)
|
|
|
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Tainted, "%s should not be tainted anymore", item.Name)
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
|
|
|
- assert.True(t, hubIdx.Items[item.Type][item.Name].Downloaded, "%s should still be downloaded", item.Name)
|
|
|
+ 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
|
|
|
- err = DisableItem(cfg, &item, true, false)
|
|
|
+ err = hub.DisableItem(&item, true, false)
|
|
|
require.NoError(t, err, "failed to purge %s", item.Name)
|
|
|
|
|
|
// Local sync and check status
|
|
|
- warns, err = LocalSync(cfg)
|
|
|
+ warns, err = hub.LocalSync()
|
|
|
require.NoError(t, err, "failed to run localSync")
|
|
|
require.Empty(t, warns, "unexpected warnings : %+v", warns)
|
|
|
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Installed, "%s should not be installed anymore", item.Name)
|
|
|
- assert.False(t, hubIdx.Items[item.Type][item.Name].Downloaded, "%s should not be downloaded", item.Name)
|
|
|
+ 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) {
|
|
@@ -265,20 +266,18 @@ func TestInstallParser(t *testing.T) {
|
|
|
- check its status
|
|
|
- remove it
|
|
|
*/
|
|
|
- cfg := envSetup(t)
|
|
|
- defer envTearDown(cfg)
|
|
|
+ hub := envSetup(t)
|
|
|
|
|
|
- getHubIdxOrFail(t)
|
|
|
// map iteration is random by itself
|
|
|
- for _, it := range hubIdx.Items[PARSERS] {
|
|
|
- testInstallItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[PARSERS][it.Name]
|
|
|
- testTaintItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[PARSERS][it.Name]
|
|
|
- testUpdateItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[PARSERS][it.Name]
|
|
|
- testDisableItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[PARSERS][it.Name]
|
|
|
+ for _, it := range hub.Items[PARSERS] {
|
|
|
+ testInstallItem(hub, t, it)
|
|
|
+ it = hub.Items[PARSERS][it.Name]
|
|
|
+ testTaintItem(hub, t, it)
|
|
|
+ it = hub.Items[PARSERS][it.Name]
|
|
|
+ testUpdateItem(hub, t, it)
|
|
|
+ it = hub.Items[PARSERS][it.Name]
|
|
|
+ testDisableItem(hub, t, it)
|
|
|
+ it = hub.Items[PARSERS][it.Name]
|
|
|
|
|
|
break
|
|
|
}
|
|
@@ -294,19 +293,17 @@ func TestInstallCollection(t *testing.T) {
|
|
|
- check its status
|
|
|
- remove it
|
|
|
*/
|
|
|
- cfg := envSetup(t)
|
|
|
- defer envTearDown(cfg)
|
|
|
+ hub := envSetup(t)
|
|
|
|
|
|
- getHubIdxOrFail(t)
|
|
|
// map iteration is random by itself
|
|
|
- for _, it := range hubIdx.Items[COLLECTIONS] {
|
|
|
- testInstallItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[COLLECTIONS][it.Name]
|
|
|
- testTaintItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[COLLECTIONS][it.Name]
|
|
|
- testUpdateItem(cfg.Hub, t, it)
|
|
|
- it = hubIdx.Items[COLLECTIONS][it.Name]
|
|
|
- testDisableItem(cfg.Hub, t, it)
|
|
|
+ for _, it := range hub.Items[COLLECTIONS] {
|
|
|
+ testInstallItem(hub, t, it)
|
|
|
+ it = hub.Items[COLLECTIONS][it.Name]
|
|
|
+ testTaintItem(hub, t, it)
|
|
|
+ it = hub.Items[COLLECTIONS][it.Name]
|
|
|
+ testUpdateItem(hub, t, it)
|
|
|
+ it = hub.Items[COLLECTIONS][it.Name]
|
|
|
+ testDisableItem(hub, t, it)
|
|
|
break
|
|
|
}
|
|
|
}
|