github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/syft/pkg/cataloger/dotnet/parse_dotnet_deps_test.go (about)

     1  package dotnet
     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/lineaje-labs/syft/syft/pkg/cataloger/internal/pkgtest"
    10  )
    11  
    12  func TestParseDotnetDeps(t *testing.T) {
    13  	fixture := "test-fixtures/TestLibrary.deps.json"
    14  	fixtureLocationSet := file.NewLocationSet(file.NewLocation(fixture))
    15  	rootPkg := pkg.Package{
    16  		Name:      "TestLibrary",
    17  		Version:   "1.0.0",
    18  		PURL:      "pkg:nuget/TestLibrary@1.0.0",
    19  		Locations: fixtureLocationSet,
    20  		Language:  pkg.Dotnet,
    21  		Type:      pkg.DotnetPkg,
    22  		Metadata: pkg.DotnetDepsEntry{
    23  			Name:    "TestLibrary",
    24  			Version: "1.0.0",
    25  		},
    26  	}
    27  	testCommon := pkg.Package{
    28  		Name:      "TestCommon",
    29  		Version:   "1.0.0",
    30  		PURL:      "pkg:nuget/TestCommon@1.0.0",
    31  		Locations: fixtureLocationSet,
    32  		Language:  pkg.Dotnet,
    33  		Type:      pkg.DotnetPkg,
    34  		Metadata: pkg.DotnetDepsEntry{
    35  			Name:    "TestCommon",
    36  			Version: "1.0.0",
    37  		},
    38  	}
    39  	awssdkcore := pkg.Package{
    40  		Name:      "AWSSDK.Core",
    41  		Version:   "3.7.10.6",
    42  		PURL:      "pkg:nuget/AWSSDK.Core@3.7.10.6",
    43  		Locations: fixtureLocationSet,
    44  		Language:  pkg.Dotnet,
    45  		Type:      pkg.DotnetPkg,
    46  		Metadata: pkg.DotnetDepsEntry{
    47  			Name:     "AWSSDK.Core",
    48  			Version:  "3.7.10.6",
    49  			Sha512:   "sha512-kHBB+QmosVaG6DpngXQ8OlLVVNMzltNITfsRr68Z90qO7dSqJ2EHNd8dtBU1u3AQQLqqFHOY0lfmbpexeH6Pew==",
    50  			Path:     "awssdk.core/3.7.10.6",
    51  			HashPath: "awssdk.core.3.7.10.6.nupkg.sha512",
    52  		},
    53  	}
    54  	msftDependencyInjectionAbstractions := pkg.Package{
    55  		Name:      "Microsoft.Extensions.DependencyInjection.Abstractions",
    56  		Version:   "6.0.0",
    57  		PURL:      "pkg:nuget/Microsoft.Extensions.DependencyInjection.Abstractions@6.0.0",
    58  		Locations: fixtureLocationSet,
    59  		Language:  pkg.Dotnet,
    60  		Type:      pkg.DotnetPkg,
    61  		Metadata: pkg.DotnetDepsEntry{
    62  			Name:     "Microsoft.Extensions.DependencyInjection.Abstractions",
    63  			Version:  "6.0.0",
    64  			Sha512:   "sha512-xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg==",
    65  			Path:     "microsoft.extensions.dependencyinjection.abstractions/6.0.0",
    66  			HashPath: "microsoft.extensions.dependencyinjection.abstractions.6.0.0.nupkg.sha512",
    67  		},
    68  	}
    69  	msftDependencyInjection := pkg.Package{
    70  		Name:      "Microsoft.Extensions.DependencyInjection",
    71  		Version:   "6.0.0",
    72  		PURL:      "pkg:nuget/Microsoft.Extensions.DependencyInjection@6.0.0",
    73  		Locations: fixtureLocationSet,
    74  		Language:  pkg.Dotnet,
    75  		Type:      pkg.DotnetPkg,
    76  		Metadata: pkg.DotnetDepsEntry{
    77  			Name:     "Microsoft.Extensions.DependencyInjection",
    78  			Version:  "6.0.0",
    79  			Sha512:   "sha512-k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
    80  			Path:     "microsoft.extensions.dependencyinjection/6.0.0",
    81  			HashPath: "microsoft.extensions.dependencyinjection.6.0.0.nupkg.sha512",
    82  		},
    83  	}
    84  	msftLoggingAbstractions := pkg.Package{
    85  		Name:      "Microsoft.Extensions.Logging.Abstractions",
    86  		Version:   "6.0.0",
    87  		PURL:      "pkg:nuget/Microsoft.Extensions.Logging.Abstractions@6.0.0",
    88  		Locations: fixtureLocationSet,
    89  		Language:  pkg.Dotnet,
    90  		Type:      pkg.DotnetPkg,
    91  		Metadata: pkg.DotnetDepsEntry{
    92  			Name:     "Microsoft.Extensions.Logging.Abstractions",
    93  			Version:  "6.0.0",
    94  			Sha512:   "sha512-/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA==",
    95  			Path:     "microsoft.extensions.logging.abstractions/6.0.0",
    96  			HashPath: "microsoft.extensions.logging.abstractions.6.0.0.nupkg.sha512",
    97  		},
    98  	}
    99  	msftExtensionsLogging := pkg.Package{
   100  		Name:      "Microsoft.Extensions.Logging",
   101  		Version:   "6.0.0",
   102  		PURL:      "pkg:nuget/Microsoft.Extensions.Logging@6.0.0",
   103  		Locations: fixtureLocationSet,
   104  		Language:  pkg.Dotnet,
   105  		Type:      pkg.DotnetPkg,
   106  		Metadata: pkg.DotnetDepsEntry{
   107  			Name:     "Microsoft.Extensions.Logging",
   108  			Version:  "6.0.0",
   109  			Sha512:   "sha512-eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==",
   110  			Path:     "microsoft.extensions.logging/6.0.0",
   111  			HashPath: "microsoft.extensions.logging.6.0.0.nupkg.sha512",
   112  		},
   113  	}
   114  	msftExtensionsOptions := pkg.Package{
   115  		Name:      "Microsoft.Extensions.Options",
   116  		Version:   "6.0.0",
   117  		PURL:      "pkg:nuget/Microsoft.Extensions.Options@6.0.0",
   118  		Locations: fixtureLocationSet,
   119  		Language:  pkg.Dotnet,
   120  		Type:      pkg.DotnetPkg,
   121  		Metadata: pkg.DotnetDepsEntry{
   122  			Name:     "Microsoft.Extensions.Options",
   123  			Version:  "6.0.0",
   124  			Sha512:   "sha512-dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==",
   125  			Path:     "microsoft.extensions.options/6.0.0",
   126  			HashPath: "microsoft.extensions.options.6.0.0.nupkg.sha512",
   127  		},
   128  	}
   129  	msftExtensionsPrimitives := pkg.Package{
   130  		Name:      "Microsoft.Extensions.Primitives",
   131  		Version:   "6.0.0",
   132  		PURL:      "pkg:nuget/Microsoft.Extensions.Primitives@6.0.0",
   133  		Locations: fixtureLocationSet,
   134  		Language:  pkg.Dotnet,
   135  		Type:      pkg.DotnetPkg,
   136  		Metadata: pkg.DotnetDepsEntry{
   137  			Name:     "Microsoft.Extensions.Primitives",
   138  			Version:  "6.0.0",
   139  			Sha512:   "sha512-9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==",
   140  			Path:     "microsoft.extensions.primitives/6.0.0",
   141  			HashPath: "microsoft.extensions.primitives.6.0.0.nupkg.sha512",
   142  		},
   143  	}
   144  	newtonsoftJson := pkg.Package{
   145  		Name:      "Newtonsoft.Json",
   146  		Version:   "13.0.1",
   147  		PURL:      "pkg:nuget/Newtonsoft.Json@13.0.1",
   148  		Locations: fixtureLocationSet,
   149  		Language:  pkg.Dotnet,
   150  		Type:      pkg.DotnetPkg,
   151  		Metadata: pkg.DotnetDepsEntry{
   152  			Name:     "Newtonsoft.Json",
   153  			Version:  "13.0.1",
   154  			Sha512:   "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
   155  			Path:     "newtonsoft.json/13.0.1",
   156  			HashPath: "newtonsoft.json.13.0.1.nupkg.sha512",
   157  		},
   158  	}
   159  	serilogSinksConsole := pkg.Package{
   160  		Name:      "Serilog.Sinks.Console",
   161  		Version:   "4.0.1",
   162  		PURL:      "pkg:nuget/Serilog.Sinks.Console@4.0.1",
   163  		Locations: fixtureLocationSet,
   164  		Language:  pkg.Dotnet,
   165  		Type:      pkg.DotnetPkg,
   166  		Metadata: pkg.DotnetDepsEntry{
   167  			Name:     "Serilog.Sinks.Console",
   168  			Version:  "4.0.1",
   169  			Sha512:   "sha512-apLOvSJQLlIbKlbx+Y2UDHSP05kJsV7mou+fvJoRGs/iR+jC22r8cuFVMjjfVxz/AD4B2UCltFhE1naRLXwKNw==",
   170  			Path:     "serilog.sinks.console/4.0.1",
   171  			HashPath: "serilog.sinks.console.4.0.1.nupkg.sha512",
   172  		},
   173  	}
   174  	serilog := pkg.Package{
   175  		Name:      "Serilog",
   176  		Version:   "2.10.0",
   177  		PURL:      "pkg:nuget/Serilog@2.10.0",
   178  		Locations: fixtureLocationSet,
   179  		Language:  pkg.Dotnet,
   180  		Type:      pkg.DotnetPkg,
   181  		Metadata: pkg.DotnetDepsEntry{
   182  			Name:     "Serilog",
   183  			Version:  "2.10.0",
   184  			Sha512:   "sha512-+QX0hmf37a0/OZLxM3wL7V6/ADvC1XihXN4Kq/p6d8lCPfgkRdiuhbWlMaFjR9Av0dy5F0+MBeDmDdRZN/YwQA==",
   185  			Path:     "serilog/2.10.0",
   186  			HashPath: "serilog.2.10.0.nupkg.sha512",
   187  		},
   188  	}
   189  	systemDiagnosticsDiagnosticsource := pkg.Package{
   190  		Name:      "System.Diagnostics.DiagnosticSource",
   191  		Version:   "6.0.0",
   192  		PURL:      "pkg:nuget/System.Diagnostics.DiagnosticSource@6.0.0",
   193  		Locations: fixtureLocationSet,
   194  		Language:  pkg.Dotnet,
   195  		Type:      pkg.DotnetPkg,
   196  		Metadata: pkg.DotnetDepsEntry{
   197  			Name:     "System.Diagnostics.DiagnosticSource",
   198  			Version:  "6.0.0",
   199  			Sha512:   "sha512-frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
   200  			Path:     "system.diagnostics.diagnosticsource/6.0.0",
   201  			HashPath: "system.diagnostics.diagnosticsource.6.0.0.nupkg.sha512",
   202  		},
   203  	}
   204  	systemRuntimeCompilerServicesUnsafe := pkg.Package{
   205  		Name:      "System.Runtime.CompilerServices.Unsafe",
   206  		Version:   "6.0.0",
   207  		PURL:      "pkg:nuget/System.Runtime.CompilerServices.Unsafe@6.0.0",
   208  		Locations: fixtureLocationSet,
   209  		Language:  pkg.Dotnet,
   210  		Type:      pkg.DotnetPkg,
   211  		Metadata: pkg.DotnetDepsEntry{
   212  			Name:     "System.Runtime.CompilerServices.Unsafe",
   213  			Version:  "6.0.0",
   214  			Sha512:   "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
   215  			Path:     "system.runtime.compilerservices.unsafe/6.0.0",
   216  			HashPath: "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
   217  		}}
   218  
   219  	expectedPkgs := []pkg.Package{
   220  		awssdkcore,
   221  		msftDependencyInjection,
   222  		msftDependencyInjectionAbstractions,
   223  		msftExtensionsLogging,
   224  		msftLoggingAbstractions,
   225  		msftExtensionsOptions,
   226  		msftExtensionsPrimitives,
   227  		newtonsoftJson,
   228  		serilog,
   229  		serilogSinksConsole,
   230  		systemDiagnosticsDiagnosticsource,
   231  		systemRuntimeCompilerServicesUnsafe,
   232  		testCommon,
   233  		rootPkg,
   234  	}
   235  
   236  	// ┌── (✓ = is represented in the test)
   237  	// ↓
   238  	//
   239  	// ✓ TestLibrary/1.0.0 (project)
   240  	// ✓  ├── [a] Microsoft.Extensions.DependencyInjection/6.0.0                     [file version: 6.0.21.52210]
   241  	// ✓  │    ├── [b] Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0   [file version: 6.0.21.52210]
   242  	// ✓  │    └── [c!] System.Runtime.CompilerServices.Unsafe/6.0.0                 [NO TARGET INFO]
   243  	// ✓  ├── Microsoft.Extensions.Logging/6.0.0                                     [file version: 6.0.21.52210]
   244  	// ✓  │    ├── Microsoft.Extensions.DependencyInjection/6.0.0                    ...to [a]
   245  	// ✓  │    ├── Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0       ...to [b]
   246  	// ✓  │    ├── Microsoft.Extensions.Logging.Abstractions/6.0.0                   [file version: 6.0.21.52210]
   247  	// ✓  │    ├── Microsoft.Extensions.Options/6.0.0                                [file version: 6.0.21.52210]
   248  	// ✓  │    │    ├── Microsoft.Extensions.DependencyInjection.Abstractions/6.0.0  ...to [b]
   249  	// ✓  │    │    └── Microsoft.Extensions.Primitives/6.0.0                        [file version: 6.0.21.52210]
   250  	// ✓  │    │         └── System.Runtime.CompilerServices.Unsafe/6.0.0            ...to [c!]
   251  	// ✓  │    └── System.Diagnostics.DiagnosticSource/6.0.0                         [NO RUNTIME INFO]
   252  	// ✓  │         └── System.Runtime.CompilerServices.Unsafe/6.0.0                 ...to [c!]
   253  	// ✓  ├── Newtonsoft.Json/13.0.1                                                 [file version: 13.0.1.25517]
   254  	// ✓  ├── [d] Serilog/2.10.0                                                     [file version: 2.10.0.0]
   255  	// ✓  ├── Serilog.Sinks.Console/4.0.1                                            [file version: 4.0.1.0]
   256  	// ✓  │    └── Serilog/2.10.0                                                    ...to [d]
   257  	// ✓  └── [e!] TestCommon/1.0.0                                                  [NOT SERVICEABLE / NO SHA]
   258  	// ✓       └── AWSSDK.Core/3.7.10.6                                              [file version: 3.7.10.6]
   259  
   260  	expectedRelationships := []artifact.Relationship{
   261  		{
   262  			From: awssdkcore,
   263  			To:   testCommon,
   264  			Type: artifact.DependencyOfRelationship,
   265  		},
   266  		{
   267  			From: msftDependencyInjection,
   268  			To:   msftExtensionsLogging,
   269  			Type: artifact.DependencyOfRelationship,
   270  		},
   271  		{
   272  			From: msftDependencyInjection,
   273  			To:   rootPkg,
   274  			Type: artifact.DependencyOfRelationship,
   275  		},
   276  		{
   277  			From: msftDependencyInjectionAbstractions,
   278  			To:   msftDependencyInjection,
   279  			Type: artifact.DependencyOfRelationship,
   280  		},
   281  		{
   282  			From: msftDependencyInjectionAbstractions,
   283  			To:   msftExtensionsLogging,
   284  			Type: artifact.DependencyOfRelationship,
   285  		},
   286  		{
   287  			From: msftDependencyInjectionAbstractions,
   288  			To:   msftExtensionsOptions,
   289  			Type: artifact.DependencyOfRelationship,
   290  		},
   291  		{
   292  			From: msftExtensionsLogging,
   293  			To:   rootPkg,
   294  			Type: artifact.DependencyOfRelationship,
   295  		},
   296  		{
   297  			From: msftLoggingAbstractions,
   298  			To:   msftExtensionsLogging,
   299  			Type: artifact.DependencyOfRelationship,
   300  		},
   301  		{
   302  			From: msftExtensionsOptions,
   303  			To:   msftExtensionsLogging,
   304  			Type: artifact.DependencyOfRelationship,
   305  		},
   306  		{
   307  			From: msftExtensionsPrimitives,
   308  			To:   msftExtensionsOptions,
   309  			Type: artifact.DependencyOfRelationship,
   310  		},
   311  		{
   312  			From: newtonsoftJson,
   313  			To:   rootPkg,
   314  			Type: artifact.DependencyOfRelationship,
   315  		},
   316  		{
   317  			From: serilog,
   318  			To:   serilogSinksConsole,
   319  			Type: artifact.DependencyOfRelationship,
   320  		},
   321  		{
   322  			From: serilog,
   323  			To:   rootPkg,
   324  			Type: artifact.DependencyOfRelationship,
   325  		},
   326  		{
   327  			From: serilogSinksConsole,
   328  			To:   rootPkg,
   329  			Type: artifact.DependencyOfRelationship,
   330  		},
   331  		{
   332  			From: systemDiagnosticsDiagnosticsource,
   333  			To:   msftExtensionsLogging,
   334  			Type: artifact.DependencyOfRelationship,
   335  		},
   336  		{
   337  			From: systemRuntimeCompilerServicesUnsafe,
   338  			To:   msftDependencyInjection,
   339  			Type: artifact.DependencyOfRelationship,
   340  		},
   341  		{
   342  			From: systemRuntimeCompilerServicesUnsafe,
   343  			To:   msftExtensionsPrimitives,
   344  			Type: artifact.DependencyOfRelationship,
   345  		},
   346  		{
   347  			From: systemRuntimeCompilerServicesUnsafe,
   348  			To:   systemDiagnosticsDiagnosticsource,
   349  			Type: artifact.DependencyOfRelationship,
   350  		},
   351  		{
   352  			From: testCommon,
   353  			To:   rootPkg,
   354  			Type: artifact.DependencyOfRelationship,
   355  		},
   356  	}
   357  
   358  	pkgtest.TestFileParser(t, fixture, parseDotnetDeps, expectedPkgs, expectedRelationships)
   359  }