github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/rpm/parse_rpm_test.go (about)

     1  package rpm
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/anchore/syft/syft/file"
     7  	"github.com/anchore/syft/syft/pkg"
     8  	"github.com/anchore/syft/syft/pkg/cataloger/internal/pkgtest"
     9  )
    10  
    11  func TestParseRpmFiles(t *testing.T) {
    12  	abcRpmLocation := file.NewLocation("abc-1.01-9.hg20160905.el7.x86_64.rpm")
    13  	zorkRpmLocation := file.NewLocation("zork-1.0.3-1.el7.x86_64.rpm")
    14  	tests := []struct {
    15  		fixture  string
    16  		expected []pkg.Package
    17  	}{
    18  		{
    19  			fixture: "test-fixtures/rpms",
    20  			expected: []pkg.Package{
    21  				{
    22  					Name:         "abc",
    23  					Version:      "0:1.01-9.hg20160905.el7",
    24  					PURL:         "pkg:rpm/abc@1.01-9.hg20160905.el7?arch=x86_64&epoch=0&upstream=abc-1.01-9.hg20160905.el7.src.rpm",
    25  					Locations:    file.NewLocationSet(file.NewLocation("abc-1.01-9.hg20160905.el7.x86_64.rpm")),
    26  					FoundBy:      "rpm-file-cataloger",
    27  					Type:         pkg.RpmPkg,
    28  					MetadataType: pkg.RpmMetadataType,
    29  					Licenses: pkg.NewLicenseSet(
    30  						pkg.NewLicenseFromLocations("MIT", abcRpmLocation),
    31  					),
    32  					Metadata: pkg.RpmMetadata{
    33  						Name:      "abc",
    34  						Epoch:     intRef(0),
    35  						Arch:      "x86_64",
    36  						Release:   "9.hg20160905.el7",
    37  						Version:   "1.01",
    38  						SourceRpm: "abc-1.01-9.hg20160905.el7.src.rpm",
    39  						Size:      17396,
    40  						Vendor:    "Fedora Project",
    41  						Files: []pkg.RpmdbFileRecord{
    42  							{"/usr/bin/abc", 33261, 7120, file.Digest{"sha256", "8f8495a65c66762b60afa0c3949d81b275ca6fa0601696caba5af762f455d0b9"}, "root", "root", ""},
    43  							{"/usr/share/doc/abc-1.01", 16877, 4096, file.Digest{}, "root", "root", ""},
    44  							{"/usr/share/doc/abc-1.01/readme.md", 33188, 4984, file.Digest{"sha256", "808af8a28391e96ca0d91086789488dda3724fe7c8b2859efd464fb04b94b2d4"}, "root", "root", "d"},
    45  							{"/usr/share/doc/abc-1.01/readmeaig", 33188, 3324, file.Digest{"sha256", "530ec6175cf7fbeb7b595cbe7a50994429c4e62cae6666fb3a1d5745f3127b19"}, "root", "root", "d"},
    46  							{"/usr/share/man/man1/abc.1.gz", 33188, 1968, file.Digest{"sha256", "cf2cfe25b29087e60ffd5f31f974a0762172fc2f009704951f12ff750ea77ed6"}, "root", "root", "d"},
    47  						},
    48  					},
    49  				},
    50  				{
    51  					Name:         "zork",
    52  					Version:      "0:1.0.3-1.el7",
    53  					PURL:         "pkg:rpm/zork@1.0.3-1.el7?arch=x86_64&epoch=0&upstream=zork-1.0.3-1.el7.src.rpm",
    54  					Locations:    file.NewLocationSet(zorkRpmLocation),
    55  					FoundBy:      "rpm-file-cataloger",
    56  					Type:         pkg.RpmPkg,
    57  					MetadataType: pkg.RpmMetadataType,
    58  					Licenses: pkg.NewLicenseSet(
    59  						pkg.NewLicenseFromLocations("Public Domain", zorkRpmLocation),
    60  					),
    61  					Metadata: pkg.RpmMetadata{
    62  						Name:      "zork",
    63  						Epoch:     intRef(0),
    64  						Arch:      "x86_64",
    65  						Release:   "1.el7",
    66  						Version:   "1.0.3",
    67  						SourceRpm: "zork-1.0.3-1.el7.src.rpm",
    68  						Size:      262367,
    69  						Vendor:    "Fedora Project",
    70  						Files: []pkg.RpmdbFileRecord{
    71  							{"/usr/bin/zork", 33261, 115440, file.Digest{"sha256", "31b2ffc20b676a8fff795a45308f584273b9c47e8f7e196b4f36220b2734b472"}, "root", "root", ""},
    72  							{"/usr/share/doc/zork-1.0.3", 16877, 38, file.Digest{}, "root", "root", ""},
    73  							{"/usr/share/doc/zork-1.0.3/README.md", 33188, 5123, file.Digest{"sha256", "0013d67610a80c9f62d151a952f18d520b15b4c505b3ec2af34b96ab824654a4"}, "root", "root", "d"},
    74  							{"/usr/share/doc/zork-1.0.3/history", 33188, 4816, file.Digest{"sha256", "6949044a65adefca6ac0132c18cfccc4ba8fdaec948424b6ccb60afd8a6ac82f"}, "root", "root", "d"},
    75  							{"/usr/share/licenses/zork-1.0.3", 16877, 24, file.Digest{}, "root", "root", ""},
    76  							{"/usr/share/licenses/zork-1.0.3/readme.txt", 33188, 146, file.Digest{"sha256", "9d6f7500555a2ecc3cb289dcca1e37fb96894dab1e4ba692b4d36fd6c3bdf939"}, "root", "root", "l"},
    77  							{"/usr/share/man/man6/dungeon.6.gz", 33188, 3800, file.Digest{"sha256", "9b065d6a6f65b4d2d038fcca0af47a38e8723c32008d08659739ac34abe018da"}, "root", "root", "d"},
    78  							{"/usr/share/man/man6/zork.6.gz", 33188, 34, file.Digest{"sha256", "18fbcb598bc40a25befe26256e29366984d2288dd154f877b8ac5fc138dd0884"}, "root", "root", "d"},
    79  							{"/usr/share/zork/dtextc.dat", 33188, 133008, file.Digest{"sha256", "25ca42857c2b32054916d9258152293ead644023d5e03bec039ea92014e2ef91"}, "root", "root", ""},
    80  						},
    81  					},
    82  				},
    83  			},
    84  		},
    85  		{
    86  			fixture: "test-fixtures/bad",
    87  		},
    88  	}
    89  
    90  	for _, test := range tests {
    91  		t.Run(test.fixture, func(t *testing.T) {
    92  			pkgtest.NewCatalogTester().
    93  				FromDirectory(t, test.fixture).
    94  				Expects(test.expected, nil).
    95  				TestCataloger(t, NewFileCataloger())
    96  		})
    97  	}
    98  }