Cybersecurity-Projects/PROJECTS/intermediate/sbom-generator-vulnerabilit.../internal/scanner/integration_test.go

102 lines
2.7 KiB
Go

// ©AngelaMos | 2026
// integration_test.go
package scanner
import (
"encoding/json"
"path/filepath"
"testing"
"github.com/CarterPerez-dev/bomber/internal/graph"
"github.com/CarterPerez-dev/bomber/internal/parser"
"github.com/CarterPerez-dev/bomber/internal/sbom"
"github.com/CarterPerez-dev/bomber/pkg/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFullPipelineGoProject(t *testing.T) {
reg := parser.NewRegistry()
parser.RegisterAll(reg)
s := New(reg)
result, err := s.Scan(filepath.Join(testdataDir(t), "go-project"))
require.NoError(t, err)
require.Len(t, result.Graphs, 1)
g := result.Graphs[0]
assert.Greater(t, len(graph.AllPackages(g)), 1)
assert.Empty(t, graph.DetectCycles(g))
spdxGen := sbom.NewSPDXGenerator()
spdxData, err := spdxGen.Generate(result.Graphs)
require.NoError(t, err)
assert.True(t, json.Valid(spdxData))
cdxGen := sbom.NewCycloneDXGenerator()
cdxData, err := cdxGen.Generate(result.Graphs)
require.NoError(t, err)
assert.True(t, json.Valid(cdxData))
}
func TestFullPipelineMonorepo(t *testing.T) {
reg := parser.NewRegistry()
parser.RegisterAll(reg)
s := New(reg)
result, err := s.Scan(filepath.Join(testdataDir(t), "monorepo"))
require.NoError(t, err)
assert.GreaterOrEqual(t, len(result.Graphs), 2)
assert.GreaterOrEqual(t, len(result.Ecosystems), 2)
}
func TestFullPipelinePythonProject(t *testing.T) {
reg := parser.NewRegistry()
parser.RegisterAll(reg)
s := New(reg)
result, err := s.Scan(filepath.Join(testdataDir(t), "python-project"))
require.NoError(t, err)
require.Len(t, result.Graphs, 1)
g := result.Graphs[0]
all := graph.AllPackages(g)
assert.Greater(t, len(all), 1)
spdxGen := sbom.NewSPDXGenerator()
spdxData, err := spdxGen.Generate(result.Graphs)
require.NoError(t, err)
assert.True(t, json.Valid(spdxData))
}
func TestFullPipelineAllEcosystems(t *testing.T) {
reg := parser.NewRegistry()
parser.RegisterAll(reg)
ecosystems := []string{"go-project", "node-project", "python-project"}
for _, eco := range ecosystems {
t.Run(eco, func(t *testing.T) {
s := New(reg)
result, err := s.Scan(filepath.Join(testdataDir(t), eco))
require.NoError(t, err)
require.NotEmpty(t, result.Graphs)
assert.Greater(t, result.TotalPkgs, 0)
assert.Greater(t, result.DirectPkgs, 0)
for _, g := range result.Graphs {
spdxGen := sbom.NewSPDXGenerator()
spdxData, err := spdxGen.Generate([]*types.DependencyGraph{g})
require.NoError(t, err)
assert.True(t, json.Valid(spdxData))
cdxGen := sbom.NewCycloneDXGenerator()
cdxData, err := cdxGen.Generate([]*types.DependencyGraph{g})
require.NoError(t, err)
assert.True(t, json.Valid(cdxData))
}
})
}
}