mirror of https://github.com/daffainfo/nuclei.git
60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package installer
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/projectdiscovery/nuclei/v3/pkg/catalog/config"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTemplateInstallation(t *testing.T) {
|
|
// test that the templates are installed correctly
|
|
// along with necessary changes that are made
|
|
HideProgressBar = true
|
|
|
|
tm := &TemplateManager{}
|
|
dir, err := os.MkdirTemp("", "nuclei-templates-*")
|
|
require.Nil(t, err)
|
|
defer os.RemoveAll(dir)
|
|
cfgdir, err := os.MkdirTemp("", "nuclei-config-*")
|
|
require.Nil(t, err)
|
|
defer os.RemoveAll(cfgdir)
|
|
|
|
// set the config directory to a temporary directory
|
|
config.DefaultConfig.SetConfigDir(cfgdir)
|
|
// set the templates directory to a temporary directory
|
|
templatesTempDir := filepath.Join(dir, "templates")
|
|
config.DefaultConfig.SetTemplatesDir(templatesTempDir)
|
|
|
|
err = tm.FreshInstallIfNotExists()
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "rate limit") {
|
|
t.Skip("Skipping test due to github rate limit")
|
|
}
|
|
require.Nil(t, err)
|
|
}
|
|
|
|
// we should switch to more fine granular tests for template
|
|
// integrity, but for now, we just check that the templates are installed
|
|
counter := 0
|
|
err = filepath.Walk(templatesTempDir, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !info.IsDir() {
|
|
counter++
|
|
}
|
|
return nil
|
|
})
|
|
require.Nil(t, err)
|
|
|
|
// we should have at least 1000 templates
|
|
require.Greater(t, counter, 1000)
|
|
// every time we install templates, it should override the ignore file with latest one
|
|
require.FileExists(t, config.DefaultConfig.GetIgnoreFilePath())
|
|
t.Logf("Installed %d templates", counter)
|
|
}
|