github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/internal/sbomsync/builder_test.go (about)

     1  package sbomsync
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/magiconair/properties/assert"
     7  
     8  	"github.com/anchore/syft/syft/artifact"
     9  	"github.com/anchore/syft/syft/pkg"
    10  	"github.com/anchore/syft/syft/sbom"
    11  )
    12  
    13  func TestNewBuilder(t *testing.T) {
    14  	tests := []struct {
    15  		name string
    16  		sbom sbom.SBOM
    17  	}{
    18  		{
    19  			"TestNewBuilder with empty sbom",
    20  			sbom.SBOM{
    21  				Artifacts: sbom.Artifacts{
    22  					Packages: pkg.NewCollection(),
    23  				},
    24  			},
    25  		},
    26  	}
    27  	for _, tt := range tests {
    28  		t.Run(tt.name, func(t *testing.T) {
    29  			builder := NewBuilder(&tt.sbom)
    30  			builder.AddPackages(pkg.Package{})
    31  			accessor := builder.(Accessor)
    32  			accessor.ReadFromSBOM(func(s *sbom.SBOM) {
    33  				packageCount := s.Artifacts.Packages.PackageCount()
    34  				assert.Equal(t, packageCount, 1, "expected 1 package in sbom")
    35  			})
    36  		})
    37  	}
    38  }
    39  
    40  func Test_sbomBuilder_DeletePackages(t *testing.T) {
    41  	testPackage := pkg.Package{
    42  		Name:    "test",
    43  		Version: "1.0.0",
    44  		Type:    pkg.DebPkg,
    45  	}
    46  	testPackage.SetID()
    47  
    48  	keepMe := pkg.Package{
    49  		Name:    "keepMe",
    50  		Version: "1.0.0",
    51  		Type:    pkg.DebPkg,
    52  	}
    53  
    54  	prexistingRelationships := []artifact.Relationship{
    55  		{
    56  			From: testPackage,
    57  			To:   testPackage,
    58  			Type: artifact.DependencyOfRelationship,
    59  		},
    60  	}
    61  
    62  	tests := []struct {
    63  		name string
    64  		sbom sbom.SBOM
    65  	}{
    66  		{
    67  			"Test_sbomBuilder_DeletePackages deletes a given package",
    68  			sbom.SBOM{
    69  				Artifacts: sbom.Artifacts{
    70  					Packages: pkg.NewCollection(),
    71  				},
    72  			},
    73  		},
    74  	}
    75  	for _, tt := range tests {
    76  		t.Run(tt.name, func(t *testing.T) {
    77  			builder := NewBuilder(&tt.sbom)
    78  			builder.AddPackages(testPackage, keepMe)
    79  			accessor := builder.(Accessor)
    80  			accessor.WriteToSBOM(func(s *sbom.SBOM) {
    81  				s.Relationships = prexistingRelationships
    82  			})
    83  
    84  			builder.DeletePackages(testPackage.ID())
    85  			newAccess := builder.(Accessor)
    86  			newAccess.ReadFromSBOM(func(s *sbom.SBOM) {
    87  				packageCount := s.Artifacts.Packages.PackageCount()
    88  
    89  				// deleted target package
    90  				assert.Equal(t, packageCount, 1, "expected 1 packages in sbom")
    91  				relationshipCount := len(s.Relationships)
    92  
    93  				// deleted relationships that reference the deleted package
    94  				assert.Equal(t, relationshipCount, 0, "expected 0 relationships in sbom")
    95  			})
    96  		})
    97  	}
    98  }