github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/gosbom/pkg/cataloger/rpm/package_test.go (about)

     1  package rpm
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/nextlinux/gosbom/gosbom/linux"
     7  	"github.com/nextlinux/gosbom/gosbom/pkg"
     8  	"github.com/sergi/go-diff/diffmatchpatch"
     9  )
    10  
    11  func Test_packageURL(t *testing.T) {
    12  	tests := []struct {
    13  		name     string
    14  		distro   *linux.Release
    15  		metadata pkg.RpmMetadata
    16  		expected string
    17  	}{
    18  		{
    19  			name: "go case",
    20  			distro: &linux.Release{
    21  				ID:        "rhel",
    22  				VersionID: "8.4",
    23  			},
    24  			metadata: pkg.RpmMetadata{
    25  				Name:    "p",
    26  				Version: "v",
    27  				Release: "r",
    28  				Epoch:   nil,
    29  			},
    30  			expected: "pkg:rpm/rhel/p@v-r?distro=rhel-8.4",
    31  		},
    32  		{
    33  			name: "with arch and epoch",
    34  			distro: &linux.Release{
    35  				ID:        "centos",
    36  				VersionID: "7",
    37  			},
    38  			metadata: pkg.RpmMetadata{
    39  				Name:    "p",
    40  				Version: "v",
    41  				Arch:    "a",
    42  				Release: "r",
    43  				Epoch:   intRef(1),
    44  			},
    45  			expected: "pkg:rpm/centos/p@v-r?arch=a&epoch=1&distro=centos-7",
    46  		},
    47  		{
    48  			name: "missing distro",
    49  			metadata: pkg.RpmMetadata{
    50  				Name:    "p",
    51  				Version: "v",
    52  				Release: "r",
    53  				Epoch:   nil,
    54  			},
    55  			expected: "pkg:rpm/p@v-r",
    56  		},
    57  		{
    58  			name: "with upstream source rpm info",
    59  			distro: &linux.Release{
    60  				ID:        "rhel",
    61  				VersionID: "8.4",
    62  			},
    63  			metadata: pkg.RpmMetadata{
    64  				Name:      "p",
    65  				Version:   "v",
    66  				Release:   "r",
    67  				SourceRpm: "sourcerpm",
    68  			},
    69  			expected: "pkg:rpm/rhel/p@v-r?upstream=sourcerpm&distro=rhel-8.4",
    70  		},
    71  	}
    72  
    73  	for _, test := range tests {
    74  		t.Run(test.name, func(t *testing.T) {
    75  			actual := packageURL(test.metadata, test.distro)
    76  			if actual != test.expected {
    77  				dmp := diffmatchpatch.New()
    78  				diffs := dmp.DiffMain(test.expected, actual, true)
    79  				t.Errorf("diff: %s", dmp.DiffPrettyText(diffs))
    80  			}
    81  		})
    82  	}
    83  }