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

     1  package deb
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/google/go-cmp/cmp"
     7  	"github.com/nextlinux/gosbom/gosbom/linux"
     8  	"github.com/nextlinux/gosbom/gosbom/pkg"
     9  )
    10  
    11  func Test_packageURL(t *testing.T) {
    12  	tests := []struct {
    13  		name     string
    14  		distro   *linux.Release
    15  		metadata pkg.DpkgMetadata
    16  		expected string
    17  	}{
    18  		{
    19  			name: "go case",
    20  			distro: &linux.Release{
    21  				ID:        "debian",
    22  				VersionID: "11",
    23  				IDLike: []string{
    24  					"debian",
    25  				},
    26  			},
    27  			metadata: pkg.DpkgMetadata{
    28  				Package: "p",
    29  				Version: "v",
    30  			},
    31  			expected: "pkg:deb/debian/p@v?distro=debian-11",
    32  		},
    33  		{
    34  			name: "missing ID_LIKE",
    35  			distro: &linux.Release{
    36  				ID:        "debian",
    37  				VersionID: "11",
    38  			},
    39  			metadata: pkg.DpkgMetadata{
    40  				Package: "p",
    41  				Version: "v",
    42  			},
    43  			expected: "pkg:deb/debian/p@v?distro=debian-11",
    44  		},
    45  		{
    46  			name: "with arch info",
    47  			distro: &linux.Release{
    48  				ID: "ubuntu",
    49  				IDLike: []string{
    50  					"debian",
    51  				},
    52  				VersionID: "16.04",
    53  			},
    54  			metadata: pkg.DpkgMetadata{
    55  				Package:      "p",
    56  				Version:      "v",
    57  				Architecture: "a",
    58  			},
    59  			expected: "pkg:deb/ubuntu/p@v?arch=a&distro=ubuntu-16.04",
    60  		},
    61  		{
    62  			name: "missing distro",
    63  			metadata: pkg.DpkgMetadata{
    64  				Package: "p",
    65  				Version: "v",
    66  			},
    67  			expected: "",
    68  		},
    69  		{
    70  			name: "with upstream qualifier with source pkg name info",
    71  			distro: &linux.Release{
    72  				ID:        "debian",
    73  				VersionID: "11",
    74  				IDLike: []string{
    75  					"debian",
    76  				},
    77  			},
    78  			metadata: pkg.DpkgMetadata{
    79  				Package: "p",
    80  				Source:  "s",
    81  				Version: "v",
    82  			},
    83  			expected: "pkg:deb/debian/p@v?upstream=s&distro=debian-11",
    84  		},
    85  		{
    86  			name: "with upstream qualifier with source pkg name and version info",
    87  			distro: &linux.Release{
    88  				ID:        "debian",
    89  				VersionID: "11",
    90  				IDLike: []string{
    91  					"debian",
    92  				},
    93  			},
    94  			metadata: pkg.DpkgMetadata{
    95  				Package:       "p",
    96  				Source:        "s",
    97  				Version:       "v",
    98  				SourceVersion: "2.3",
    99  			},
   100  			expected: "pkg:deb/debian/p@v?upstream=s%402.3&distro=debian-11",
   101  		},
   102  	}
   103  
   104  	for _, test := range tests {
   105  		t.Run(test.name, func(t *testing.T) {
   106  			actual := packageURL(test.metadata, test.distro)
   107  			if diff := cmp.Diff(test.expected, actual); diff != "" {
   108  				t.Errorf("unexpected packageURL (-want +got):\n%s", diff)
   109  			}
   110  		})
   111  	}
   112  }