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 }