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

     1  package javascript
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/anchore/syft/syft/artifact"
     7  	"github.com/anchore/syft/syft/file"
     8  	"github.com/anchore/syft/syft/pkg"
     9  	"github.com/anchore/syft/syft/pkg/cataloger/internal/pkgtest"
    10  )
    11  
    12  func TestParseYarnBerry(t *testing.T) {
    13  	var expectedRelationships []artifact.Relationship
    14  	fixture := "test-fixtures/yarn-berry/yarn.lock"
    15  	locations := file.NewLocationSet(file.NewLocation(fixture))
    16  
    17  	expectedPkgs := []pkg.Package{
    18  		{
    19  			Name:         "yarn-berry",
    20  			Version:      "0.0.0",
    21  			Locations:    locations,
    22  			PURL:         "pkg:npm/yarn-berry@0.0.0",
    23  			Language:     pkg.JavaScript,
    24  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    25  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    26  			Type:         pkg.NpmPkg,
    27  		},
    28  		{
    29  			Name:         "@babel/code-frame",
    30  			Version:      "7.10.4",
    31  			Locations:    locations,
    32  			PURL:         "pkg:npm/%40babel/code-frame@7.10.4",
    33  			Language:     pkg.JavaScript,
    34  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    35  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    36  			Type:         pkg.NpmPkg,
    37  		},
    38  		{
    39  			Name:         "@types/minimatch",
    40  			Version:      "3.0.3",
    41  			Locations:    locations,
    42  			PURL:         "pkg:npm/%40types/minimatch@3.0.3",
    43  			Language:     pkg.JavaScript,
    44  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    45  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    46  			Type:         pkg.NpmPkg,
    47  		},
    48  		{
    49  			Name:         "@types/qs",
    50  			Version:      "6.9.4",
    51  			Locations:    locations,
    52  			PURL:         "pkg:npm/%40types/qs@6.9.4",
    53  			Language:     pkg.JavaScript,
    54  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    55  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    56  			Type:         pkg.NpmPkg,
    57  		},
    58  		{
    59  			Name:         "ajv",
    60  			Version:      "6.12.3",
    61  			Locations:    locations,
    62  			PURL:         "pkg:npm/ajv@6.12.3",
    63  			Language:     pkg.JavaScript,
    64  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    65  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    66  			Type:         pkg.NpmPkg,
    67  		},
    68  		{
    69  			Name:         "asn1.js",
    70  			Version:      "4.10.1",
    71  			Locations:    locations,
    72  			PURL:         "pkg:npm/asn1.js@4.10.1",
    73  			Language:     pkg.JavaScript,
    74  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    75  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    76  			Type:         pkg.NpmPkg,
    77  		},
    78  		{
    79  			Name:         "atob",
    80  			Version:      "2.1.2",
    81  			Locations:    locations,
    82  			PURL:         "pkg:npm/atob@2.1.2",
    83  			Language:     pkg.JavaScript,
    84  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    85  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    86  			Type:         pkg.NpmPkg,
    87  		},
    88  		{
    89  			Name:         "aws-sdk",
    90  			Version:      "2.706.0",
    91  			PURL:         "pkg:npm/aws-sdk@2.706.0",
    92  			Locations:    locations,
    93  			Language:     pkg.JavaScript,
    94  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    95  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    96  			Type:         pkg.NpmPkg,
    97  		},
    98  		{
    99  			Name:         "c0n-fab_u.laTION",
   100  			Version:      "7.7.7",
   101  			Locations:    locations,
   102  			PURL:         "pkg:npm/c0n-fab_u.laTION@7.7.7",
   103  			Language:     pkg.JavaScript,
   104  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   105  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   106  			Type:         pkg.NpmPkg,
   107  		},
   108  		{
   109  			Name:         "jhipster-core",
   110  			Version:      "7.3.4",
   111  			Locations:    locations,
   112  			PURL:         "pkg:npm/jhipster-core@7.3.4",
   113  			Language:     pkg.JavaScript,
   114  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   115  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   116  			Type:         pkg.NpmPkg,
   117  		},
   118  	}
   119  
   120  	pkgtest.TestFileParser(t, fixture, parseYarnLock, expectedPkgs, expectedRelationships)
   121  }
   122  
   123  func TestParseYarnLock(t *testing.T) {
   124  	var expectedRelationships []artifact.Relationship
   125  	fixture := "test-fixtures/yarn/yarn.lock"
   126  	locations := file.NewLocationSet(file.NewLocation(fixture))
   127  
   128  	expectedPkgs := []pkg.Package{
   129  		{
   130  			Name:         "yarn",
   131  			Version:      "0.0.0",
   132  			Locations:    locations,
   133  			PURL:         "pkg:npm/yarn@0.0.0",
   134  			Language:     pkg.JavaScript,
   135  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   136  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   137  			Type:         pkg.NpmPkg,
   138  		},
   139  		{
   140  			Name:         "@babel/code-frame",
   141  			Version:      "7.10.4",
   142  			Locations:    locations,
   143  			PURL:         "pkg:npm/%40babel/code-frame@7.10.4",
   144  			Language:     pkg.JavaScript,
   145  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   146  			Metadata: pkg.NpmPackageLockJSONMetadata{
   147  				Resolved:  "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a",
   148  				Integrity: "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
   149  			},
   150  			Type: pkg.NpmPkg,
   151  		},
   152  		{
   153  			Name:         "@types/minimatch",
   154  			Version:      "3.0.3",
   155  			Locations:    locations,
   156  			PURL:         "pkg:npm/%40types/minimatch@3.0.3",
   157  			Language:     pkg.JavaScript,
   158  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   159  			Metadata: pkg.NpmPackageLockJSONMetadata{
   160  				Resolved:  "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d",
   161  				Integrity: "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
   162  			},
   163  			Type: pkg.NpmPkg,
   164  		},
   165  		{
   166  			Name:         "@types/qs",
   167  			Version:      "6.9.4",
   168  			Locations:    locations,
   169  			PURL:         "pkg:npm/%40types/qs@6.9.4",
   170  			Language:     pkg.JavaScript,
   171  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   172  			Metadata: pkg.NpmPackageLockJSONMetadata{
   173  				Resolved:  "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a",
   174  				Integrity: "sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==",
   175  			},
   176  			Type: pkg.NpmPkg,
   177  		},
   178  		{
   179  			Name:         "ajv",
   180  			Version:      "6.12.3",
   181  			Locations:    locations,
   182  			PURL:         "pkg:npm/ajv@6.12.3",
   183  			Language:     pkg.JavaScript,
   184  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   185  			Metadata: pkg.NpmPackageLockJSONMetadata{
   186  				Resolved:  "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706",
   187  				Integrity: "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
   188  			},
   189  			Type: pkg.NpmPkg,
   190  		},
   191  		{
   192  			Name:         "asn1.js",
   193  			Version:      "4.10.1",
   194  			Locations:    locations,
   195  			PURL:         "pkg:npm/asn1.js@4.10.1",
   196  			Language:     pkg.JavaScript,
   197  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   198  			Metadata: pkg.NpmPackageLockJSONMetadata{
   199  				Resolved:  "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0",
   200  				Integrity: "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
   201  			},
   202  			Type: pkg.NpmPkg,
   203  		},
   204  		{
   205  			Name:         "atob",
   206  			Version:      "2.1.2",
   207  			Locations:    locations,
   208  			PURL:         "pkg:npm/atob@2.1.2",
   209  			Language:     pkg.JavaScript,
   210  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   211  			Metadata: pkg.NpmPackageLockJSONMetadata{
   212  				Resolved:  "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9",
   213  				Integrity: "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
   214  			},
   215  			Type: pkg.NpmPkg,
   216  		},
   217  		{
   218  			Name:         "aws-sdk",
   219  			Version:      "2.706.0",
   220  			Locations:    locations,
   221  			PURL:         "pkg:npm/aws-sdk@2.706.0",
   222  			Language:     pkg.JavaScript,
   223  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   224  			Metadata: pkg.NpmPackageLockJSONMetadata{
   225  				Resolved:  "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.706.0.tgz#09f65e9a91ecac5a635daf934082abae30eca953",
   226  				Integrity: "sha512-7GT+yrB5Wb/zOReRdv/Pzkb2Qt+hz6B/8FGMVaoysX3NryHvQUdz7EQWi5yhg9CxOjKxdw5lFwYSs69YlSp1KA==",
   227  			},
   228  			Type: pkg.NpmPkg,
   229  		},
   230  		{
   231  			Name:         "jhipster-core",
   232  			Version:      "7.3.4",
   233  			Locations:    locations,
   234  			PURL:         "pkg:npm/jhipster-core@7.3.4",
   235  			Language:     pkg.JavaScript,
   236  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   237  			Metadata: pkg.NpmPackageLockJSONMetadata{
   238  				Resolved:  "https://registry.yarnpkg.com/jhipster-core/-/jhipster-core-7.3.4.tgz#c34b8c97c7f4e8b7518dae015517e2112c73cc80",
   239  				Integrity: "sha512-AUhT69kNkqppaJZVfan/xnKG4Gs9Ggj7YLtTZFVe+xg+THrbMb5Ng7PL07PDlDw4KAEA33GMCwuAf65E8EpC4g==",
   240  			},
   241  			Type: pkg.NpmPkg,
   242  		},
   243  		{
   244  			Name:         "something-i-made-up",
   245  			Version:      "7.7.7",
   246  			Locations:    locations,
   247  			PURL:         "pkg:npm/something-i-made-up@7.7.7",
   248  			Language:     pkg.JavaScript,
   249  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   250  			Metadata: pkg.NpmPackageLockJSONMetadata{
   251  				Resolved:  "https://registry.yarnpkg.com/something-i-made-up/-/c0n-fab_u.laTION-7.7.7.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0",
   252  				Integrity: "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
   253  			},
   254  			Type: pkg.NpmPkg,
   255  		},
   256  	}
   257  
   258  	pkgtest.TestFileParser(t, fixture, parseYarnLock, expectedPkgs, expectedRelationships)
   259  }