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