102 lines
2.7 KiB
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))
|
|
}
|
|
})
|
|
}
|
|
}
|