diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d29e45a..932cfad 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,9 +18,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python 3.12 - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install dependencies diff --git a/dev-requirements.txt b/dev-requirements.txt index 3eaf575..59aee41 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -3,3 +3,4 @@ pytest pytest-cov pytest-mock wheel +chromedriver-autoinstaller \ No newline at end of file diff --git a/tests/mock_attrs.json b/tests/mock_attrs.json index 1243e9a..f71524c 100644 --- a/tests/mock_attrs.json +++ b/tests/mock_attrs.json @@ -224,7 +224,7 @@ "NetworkID": "", "EndpointID": "", "Gateway": "", - "IPAddress": "", + "IPAddress": "www.linuxserver.io", "IPPrefixLen": 0, "IPv6Gateway": "", "GlobalIPv6Address": "", diff --git a/tests/sbom_blob.txt b/tests/sbom_blob.txt new file mode 100644 index 0000000..995c717 --- /dev/null +++ b/tests/sbom_blob.txt @@ -0,0 +1,544 @@ +NAME VERSION TYPE +Bouncy Castle for .NET (netstandard2.0) 1.9.0.1 dotnet +Dapper 2.0.151.35995 dotnet +Diacritical 1.0.4.0 dotnet +DryIoc 5.4.3.0 dotnet +DryIoc.Microsoft.DependencyInjection net6.0 6.2.0.0 dotnet +Dynamitey 2.0.9.136 dotnet +Equ 2.3.0 dotnet +FluentMigrator 3.3.2.9 dotnet (+19 duplicates) +FluentValidation 9.5.4.0 dotnet +ICSharpCode.SharpZipLib 1.3.3.11 dotnet +Ical.Net 1.0.0.0 dotnet +ImpromptuInterface 7.0.1.0 dotnet +Json.NET 13.0.3.27908 dotnet +Lidarr 2.3.2.4178 dotnet (+7 duplicates) +MailKit 3.6.0.0 dotnet +Microsoft.AspNetCore 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Antiforgery 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authentication 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authentication.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authentication.Cookies 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authentication.Core 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authentication.OAuth 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authorization 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Authorization.Policy 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Components 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Components.Authorization 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Components.Forms 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Components.Server 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Components.Web 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Connections.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.CookiePolicy 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Cors 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Cryptography.Internal 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Cryptography.KeyDerivation 6.0.2924.17108 dotnet +Microsoft.AspNetCore.DataProtection 6.0.2924.17108 dotnet +Microsoft.AspNetCore.DataProtection.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.DataProtection.Extensions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Diagnostics 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Diagnostics.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Diagnostics.HealthChecks 6.0.2924.17108 dotnet +Microsoft.AspNetCore.HostFiltering 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Hosting 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Hosting.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Hosting.Server.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Html.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http.Connections 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http.Connections.Common 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http.Extensions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http.Features 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Http.Results 6.0.2924.17108 dotnet +Microsoft.AspNetCore.HttpLogging 6.0.2924.17108 dotnet +Microsoft.AspNetCore.HttpOverrides 6.0.2924.17108 dotnet +Microsoft.AspNetCore.HttpsPolicy 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Identity 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Localization 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Localization.Routing 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Metadata 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.ApiExplorer 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Core 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Cors 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.DataAnnotations 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Formatters.Json 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Formatters.Xml 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Localization 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.Razor 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.RazorPages 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.TagHelpers 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Mvc.ViewFeatures 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Razor 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Razor.Runtime 6.0.2924.17108 dotnet +Microsoft.AspNetCore.ResponseCaching 6.0.2924.17108 dotnet +Microsoft.AspNetCore.ResponseCaching.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.ResponseCompression 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Rewrite 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Routing 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Routing.Abstractions 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.HttpSys 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.IIS 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.IISIntegration 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.Kestrel 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.Kestrel.Core 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.Kestrel.Transport.Quic 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets 6.0.2924.17108 dotnet +Microsoft.AspNetCore.Session 6.0.2924.17108 dotnet +Microsoft.AspNetCore.SignalR 6.0.2924.17108 dotnet +Microsoft.AspNetCore.SignalR.Common 6.0.2924.17108 dotnet +Microsoft.AspNetCore.SignalR.Core 6.0.2924.17108 dotnet +Microsoft.AspNetCore.SignalR.Protocols.Json 6.0.2924.17108 dotnet +Microsoft.AspNetCore.StaticFiles 6.0.2924.17108 dotnet +Microsoft.AspNetCore.WebSockets 6.0.2924.17108 dotnet +Microsoft.AspNetCore.WebUtilities 6.0.2924.17108 dotnet +Microsoft.Bcl.AsyncInterfaces 6.0.21.52210 dotnet +Microsoft.Bcl.TimeProvider 8.0.23.53103 dotnet +Microsoft.CSharp 6.0.2924.17105 dotnet +Microsoft.Data.SqlClient 2.1.2+2a61e8301e9d21ada2338a9279cf27653e781757 dotnet +Microsoft.Extensions.Caching.Abstractions 6.0.21.52210 dotnet +Microsoft.Extensions.Caching.Memory 6.0.222.6406 dotnet +Microsoft.Extensions.Configuration 6.0.322.12309 dotnet +Microsoft.Extensions.Configuration.Abstractions 6.0.21.52210 dotnet +Microsoft.Extensions.Configuration.Binder 6.0.21.52210 dotnet +Microsoft.Extensions.Configuration.CommandLine 6.0.21.52210 dotnet +Microsoft.Extensions.Configuration.EnvironmentVariables 6.0.222.6406 dotnet +Microsoft.Extensions.Configuration.FileExtensions 6.0.21.52210 dotnet +Microsoft.Extensions.Configuration.Ini 6.0.21.52210 dotnet +Microsoft.Extensions.Configuration.Json 6.0.21.52210 dotnet +Microsoft.Extensions.Configuration.KeyPerFile 6.0.2924.17108 dotnet +Microsoft.Extensions.Configuration.UserSecrets 6.0.222.6406 dotnet +Microsoft.Extensions.Configuration.Xml 6.0.21.52210 dotnet +Microsoft.Extensions.DependencyInjection 6.0.1022.47605 dotnet +Microsoft.Extensions.DependencyInjection.Abstractions 7.0.22.51805 dotnet +Microsoft.Extensions.Diagnostics.HealthChecks 6.0.2924.17108 dotnet +Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions 6.0.2924.17108 dotnet +Microsoft.Extensions.Features 6.0.2924.17108 dotnet +Microsoft.Extensions.FileProviders.Abstractions 6.0.21.52210 dotnet +Microsoft.Extensions.FileProviders.Composite 6.0.21.52210 dotnet +Microsoft.Extensions.FileProviders.Embedded 6.0.2924.17108 dotnet +Microsoft.Extensions.FileProviders.Physical 6.0.21.52210 dotnet +Microsoft.Extensions.FileSystemGlobbing 6.0.21.52210 dotnet +Microsoft.Extensions.Hosting 6.0.222.6406 dotnet +Microsoft.Extensions.Hosting.Abstractions 6.0.21.52210 dotnet +Microsoft.Extensions.Hosting.WindowsServices 6.0.1823.26907 dotnet +Microsoft.Extensions.Http 6.0.21.52210 dotnet +Microsoft.Extensions.Identity.Core 6.0.2924.17108 dotnet +Microsoft.Extensions.Identity.Stores 6.0.2924.17108 dotnet +Microsoft.Extensions.Localization 6.0.2924.17108 dotnet +Microsoft.Extensions.Localization.Abstractions 6.0.2924.17108 dotnet +Microsoft.Extensions.Logging 6.0.21.52210 dotnet +Microsoft.Extensions.Logging.Abstractions 6.0.1823.26907 dotnet +Microsoft.Extensions.Logging.Configuration 6.0.21.52210 dotnet +Microsoft.Extensions.Logging.Console 6.0.21.52210 dotnet +Microsoft.Extensions.Logging.Debug 6.0.21.52210 dotnet +Microsoft.Extensions.Logging.EventLog 6.0.21.52210 dotnet +Microsoft.Extensions.Logging.EventSource 6.0.21.52210 dotnet +Microsoft.Extensions.Logging.TraceSource 6.0.21.52210 dotnet +Microsoft.Extensions.ObjectPool 6.0.2924.17108 dotnet +Microsoft.Extensions.Options 6.0.21.52210 dotnet +Microsoft.Extensions.Options.ConfigurationExtensions 6.0.21.52210 dotnet +Microsoft.Extensions.Options.DataAnnotations 6.0.21.52210 dotnet +Microsoft.Extensions.Primitives 6.0.21.52210 dotnet +Microsoft.Extensions.WebEncoders 6.0.2924.17108 dotnet +Microsoft.Identity.Client 4.21.1.0 dotnet +Microsoft.IdentityModel.JsonWebTokens 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet +Microsoft.IdentityModel.Logging 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet +Microsoft.IdentityModel.Protocols 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet +Microsoft.IdentityModel.Protocols.OpenIdConnect 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet +Microsoft.IdentityModel.Tokens 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet +Microsoft.JSInterop 6.0.2924.17108 dotnet +Microsoft.Net.Http.Headers 6.0.2924.17108 dotnet +Microsoft.OpenApi 1.2.3.0 dotnet +Microsoft.VisualBasic 6.0.2924.17105 dotnet +Microsoft.VisualBasic.Core 11.100.2924.17105 dotnet +Microsoft.Win32.Primitives 6.0.2924.17105 dotnet +Microsoft.Win32.Registry 6.0.2924.17105 dotnet +Microsoft.Win32.SystemEvents 6.0.21.52210 dotnet +MimeKit 3.6.0.0 dotnet +Mono.Nat 3.0.1 dotnet +Mono.Posix.NETStandard 1.0.0.0 dotnet +MonoTorrent 2.0.7 dotnet +NLog v5.2.0 5.2.0.1813 dotnet +NLog.Extensions.Logging v5.0.4 5.0.4.221 dotnet +NLog.Targets.Syslog 7.0.0.0 dotnet +NodaTime 3.0.0.0 dotnet +Npgsql 7.0.6.0 dotnet +Polly 8.3.1.3207 dotnet +Polly.Contrib.WaitAndRetry 1.1.1.0+7596d2dacf22d88bbd814bc49c28424fb6e921e9 dotnet +Polly.Core 8.3.1.3207 dotnet +ReusableTasks 2.0.0 dotnet +Sentry 3.25.0.0 dotnet +SixLabors.ImageSharp 3.1.4.0 dotnet +SpotifyAPI.Web 1.0.0.0 dotnet +Swashbuckle.AspNetCore.Swagger 6.5.0.0 dotnet +Swashbuckle.AspNetCore.SwaggerGen 6.5.0.0 dotnet +System 6.0.2924.17105 dotnet +System.AppContext 6.0.2924.17105 dotnet +System.Buffers 6.0.2924.17105 dotnet +System.Collections 6.0.2924.17105 dotnet +System.Collections.Concurrent 6.0.2924.17105 dotnet +System.Collections.Immutable 6.0.2924.17105 dotnet +System.Collections.NonGeneric 6.0.2924.17105 dotnet +System.Collections.Specialized 6.0.2924.17105 dotnet +System.ComponentModel 6.0.2924.17105 dotnet +System.ComponentModel.Annotations 6.0.2924.17105 dotnet +System.ComponentModel.DataAnnotations 6.0.2924.17105 dotnet +System.ComponentModel.EventBasedAsync 6.0.2924.17105 dotnet +System.ComponentModel.Primitives 6.0.2924.17105 dotnet +System.ComponentModel.TypeConverter 6.0.2924.17105 dotnet +System.Configuration 6.0.2924.17105 dotnet +System.Configuration.ConfigurationManager 6.0.922.41905 dotnet +System.Console 6.0.2924.17105 dotnet +System.Core 6.0.2924.17105 dotnet +System.Data 6.0.2924.17105 dotnet +System.Data.Common 6.0.2924.17105 dotnet +System.Data.DataSetExtensions 6.0.2924.17105 dotnet +System.Data.SQLite 1.0.115.5 dotnet +System.Data.SqlServerCe 4.0.8876.1 dotnet +System.Diagnostics.Contracts 6.0.2924.17105 dotnet +System.Diagnostics.Debug 6.0.2924.17105 dotnet +System.Diagnostics.DiagnosticSource 6.0.2924.17105 dotnet +System.Diagnostics.EventLog 6.0.21.52210 dotnet +System.Diagnostics.FileVersionInfo 6.0.2924.17105 dotnet +System.Diagnostics.Process 6.0.2924.17105 dotnet +System.Diagnostics.StackTrace 6.0.2924.17105 dotnet +System.Diagnostics.TextWriterTraceListener 6.0.2924.17105 dotnet +System.Diagnostics.Tools 6.0.2924.17105 dotnet +System.Diagnostics.TraceSource 6.0.2924.17105 dotnet +System.Diagnostics.Tracing 6.0.2924.17105 dotnet +System.Drawing 6.0.2924.17105 dotnet +System.Drawing.Common 6.0.21.52210 dotnet +System.Drawing.Primitives 6.0.2924.17105 dotnet +System.Dynamic.Runtime 6.0.2924.17105 dotnet +System.Formats.Asn1 6.0.2924.17105 dotnet +System.Globalization 6.0.2924.17105 dotnet +System.Globalization.Calendars 6.0.2924.17105 dotnet +System.Globalization.Extensions 6.0.2924.17105 dotnet +System.IO 6.0.2924.17105 dotnet +System.IO.Abstractions 17.0.24.38649 dotnet +System.IO.Compression 6.0.2924.17105 dotnet +System.IO.Compression.Brotli 6.0.2924.17105 dotnet +System.IO.Compression.FileSystem 6.0.2924.17105 dotnet +System.IO.Compression.ZipFile 6.0.2924.17105 dotnet +System.IO.FileSystem 6.0.2924.17105 dotnet +System.IO.FileSystem.AccessControl 6.0.2924.17105 dotnet +System.IO.FileSystem.DriveInfo 6.0.2924.17105 dotnet +System.IO.FileSystem.Primitives 6.0.2924.17105 dotnet +System.IO.FileSystem.Watcher 6.0.2924.17105 dotnet +System.IO.IsolatedStorage 6.0.2924.17105 dotnet +System.IO.MemoryMappedFiles 6.0.2924.17105 dotnet +System.IO.Pipelines 6.0.522.21309 dotnet +System.IO.Pipes 6.0.2924.17105 dotnet +System.IO.Pipes.AccessControl 6.0.2924.17105 dotnet +System.IO.UnmanagedMemoryStream 6.0.2924.17105 dotnet +System.IdentityModel.Tokens.Jwt 6.8.0.11012235604.824068adaeb7b158df2b36d8787f689646e715e0 dotnet +System.Linq 6.0.2924.17105 dotnet +System.Linq.Expressions 6.0.2924.17105 dotnet +System.Linq.Parallel 6.0.2924.17105 dotnet +System.Linq.Queryable 6.0.2924.17105 dotnet +System.Memory 6.0.2924.17105 dotnet +System.Net 6.0.2924.17105 dotnet +System.Net.Http 6.0.2924.17105 dotnet +System.Net.Http.Json 6.0.2924.17105 dotnet +System.Net.HttpListener 6.0.2924.17105 dotnet +System.Net.Mail 6.0.2924.17105 dotnet +System.Net.NameResolution 6.0.2924.17105 dotnet +System.Net.NetworkInformation 6.0.2924.17105 dotnet +System.Net.Ping 6.0.2924.17105 dotnet +System.Net.Primitives 6.0.2924.17105 dotnet +System.Net.Quic 6.0.2924.17105 dotnet +System.Net.Requests 6.0.2924.17105 dotnet +System.Net.Security 6.0.2924.17105 dotnet +System.Net.ServicePoint 6.0.2924.17105 dotnet +System.Net.Sockets 6.0.2924.17105 dotnet +System.Net.WebClient 6.0.2924.17105 dotnet +System.Net.WebHeaderCollection 6.0.2924.17105 dotnet +System.Net.WebProxy 6.0.2924.17105 dotnet +System.Net.WebSockets 6.0.2924.17105 dotnet +System.Net.WebSockets.Client 6.0.2924.17105 dotnet +System.Numerics 6.0.2924.17105 dotnet +System.Numerics.Vectors 6.0.2924.17105 dotnet +System.ObjectModel 6.0.2924.17105 dotnet +System.Private.CoreLib 6.0.2924.17105 dotnet +System.Private.DataContractSerialization 6.0.2924.17105 dotnet +System.Private.Uri 6.0.2924.17105 dotnet +System.Private.Xml 6.0.2924.17105 dotnet +System.Private.Xml.Linq 6.0.2924.17105 dotnet +System.Reflection 6.0.2924.17105 dotnet +System.Reflection.DispatchProxy 6.0.2924.17105 dotnet +System.Reflection.Emit 6.0.2924.17105 dotnet +System.Reflection.Emit.ILGeneration 6.0.2924.17105 dotnet +System.Reflection.Emit.Lightweight 6.0.2924.17105 dotnet +System.Reflection.Extensions 6.0.2924.17105 dotnet +System.Reflection.Metadata 6.0.2924.17105 dotnet +System.Reflection.Primitives 6.0.2924.17105 dotnet +System.Reflection.TypeExtensions 6.0.2924.17105 dotnet +System.Resources.Reader 6.0.2924.17105 dotnet +System.Resources.ResourceManager 6.0.2924.17105 dotnet +System.Resources.Writer 6.0.2924.17105 dotnet +System.Runtime 6.0.2924.17105 dotnet +System.Runtime.Caching 4.700.19.56404 dotnet +System.Runtime.CompilerServices.VisualC 6.0.2924.17105 dotnet +System.Runtime.Extensions 6.0.2924.17105 dotnet +System.Runtime.Handles 6.0.2924.17105 dotnet +System.Runtime.InteropServices 6.0.2924.17105 dotnet +System.Runtime.InteropServices.RuntimeInformation 6.0.2924.17105 dotnet +System.Runtime.Intrinsics 6.0.2924.17105 dotnet +System.Runtime.Loader 6.0.2924.17105 dotnet +System.Runtime.Numerics 6.0.2924.17105 dotnet +System.Runtime.Serialization 6.0.2924.17105 dotnet +System.Runtime.Serialization.Formatters 6.0.2924.17105 dotnet +System.Runtime.Serialization.Json 6.0.2924.17105 dotnet +System.Runtime.Serialization.Primitives 6.0.2924.17105 dotnet +System.Runtime.Serialization.Xml 6.0.2924.17105 dotnet +System.Security 6.0.2924.17105 dotnet +System.Security.AccessControl 6.0.2924.17105 dotnet +System.Security.Claims 6.0.2924.17105 dotnet +System.Security.Cryptography.Algorithms 6.0.2924.17105 dotnet +System.Security.Cryptography.Cng 6.0.2924.17105 dotnet +System.Security.Cryptography.Csp 6.0.2924.17105 dotnet +System.Security.Cryptography.Encoding 6.0.2924.17105 dotnet +System.Security.Cryptography.OpenSsl 6.0.2924.17105 dotnet +System.Security.Cryptography.Pkcs 6.0.1823.26907 dotnet +System.Security.Cryptography.Primitives 6.0.2924.17105 dotnet +System.Security.Cryptography.ProtectedData 6.0.21.52210 dotnet +System.Security.Cryptography.X509Certificates 6.0.2924.17105 dotnet +System.Security.Cryptography.Xml 6.0.822.36306 dotnet +System.Security.Permissions 6.0.21.52210 dotnet +System.Security.Principal 6.0.2924.17105 dotnet +System.Security.Principal.Windows 6.0.2924.17105 dotnet +System.Security.SecureString 6.0.2924.17105 dotnet +System.ServiceModel.Web 6.0.2924.17105 dotnet +System.ServiceProcess 6.0.2924.17105 dotnet +System.ServiceProcess.ServiceController 6.0.1823.26907 dotnet +System.Text.Encoding 6.0.2924.17105 dotnet +System.Text.Encoding.CodePages 6.0.2924.17105 dotnet +System.Text.Encoding.Extensions 6.0.2924.17105 dotnet +System.Text.Encodings.Web 6.0.2924.17105 dotnet +System.Text.Json 6.0.2924.17105 dotnet +System.Text.RegularExpressions 6.0.2924.17105 dotnet +System.Threading 6.0.2924.17105 dotnet +System.Threading.Channels 6.0.2924.17105 dotnet +System.Threading.Overlapped 6.0.2924.17105 dotnet +System.Threading.Tasks 6.0.2924.17105 dotnet +System.Threading.Tasks.Dataflow 6.0.2924.17105 dotnet +System.Threading.Tasks.Extensions 6.0.2924.17105 dotnet +System.Threading.Tasks.Parallel 6.0.2924.17105 dotnet +System.Threading.Thread 6.0.2924.17105 dotnet +System.Threading.ThreadPool 6.0.2924.17105 dotnet +System.Threading.Timer 6.0.2924.17105 dotnet +System.Transactions 6.0.2924.17105 dotnet +System.Transactions.Local 6.0.2924.17105 dotnet +System.ValueTuple 6.0.2924.17105 dotnet +System.Web 6.0.2924.17105 dotnet +System.Web.HttpUtility 6.0.2924.17105 dotnet +System.Windows 6.0.2924.17105 dotnet +System.Windows.Extensions 6.0.21.52210 dotnet +System.Xml 6.0.2924.17105 dotnet +System.Xml.Linq 6.0.2924.17105 dotnet +System.Xml.ReaderWriter 6.0.2924.17105 dotnet +System.Xml.Serialization 6.0.2924.17105 dotnet +System.Xml.XDocument 6.0.2924.17105 dotnet +System.Xml.XPath 6.0.2924.17105 dotnet +System.Xml.XPath.XDocument 6.0.2924.17105 dotnet +System.Xml.XmlDocument 6.0.2924.17105 dotnet +System.Xml.XmlSerializer 6.0.2924.17105 dotnet +TagLib# 2.2.0.27 dotnet +WindowsBase 6.0.2924.17105 dotnet +alpine-baselayout 3.4.3-r2 apk +alpine-baselayout-data 3.4.3-r2 apk +alpine-keys 2.4-r1 apk +alpine-release 3.19.1-r0 apk +anyhow 1.0.71 rust-crate +aom-libs 3.7.1-r0 apk +apk-tools 2.14.4-r0 apk +arg_enum_proc_macro 0.3.2 rust-crate +arrayvec 0.7.2 rust-crate +av-metrics 0.9.0 rust-crate +av1-grain 0.2.2 rust-crate +bash 5.2.21-r0 apk +bitflags 1.3.2 rust-crate +bitstream-io 1.6.0 rust-crate +brotli-libs 1.1.0-r1 apk +busybox 1.36.1-r15 apk +busybox-binsh 1.36.1-r15 apk +c-ares 1.27.0-r0 apk +ca-certificates 20240226-r0 apk +ca-certificates-bundle 20240226-r0 apk +cfg-if 1.0.0 rust-crate +chromaprint 1.5.1-r6 apk +chromaprint-libs 1.5.1-r6 apk +cjson 1.7.17-r0 apk +clap 4.0.32 rust-crate +clap_complete 4.0.7 rust-crate +clap_derive 4.0.21 rust-crate +clap_lex 0.3.0 rust-crate +console 0.15.5 rust-crate +coreutils 9.4-r2 apk +coreutils-env 9.4-r2 apk +coreutils-fmt 9.4-r2 apk +coreutils-sha512sum 9.4-r2 apk +crossbeam 0.8.2 rust-crate +crossbeam-channel 0.5.8 rust-crate +crossbeam-deque 0.8.3 rust-crate +crossbeam-epoch 0.9.14 rust-crate +crossbeam-queue 0.3.8 rust-crate +crossbeam-utils 0.8.15 rust-crate +curl 8.5.0-r0 apk +either 1.8.1 rust-crate +fern 0.6.2 rust-crate +ffmpeg-libavcodec 6.1.1-r0 apk +ffmpeg-libavformat 6.1.1-r0 apk +ffmpeg-libavutil 6.1.1-r0 apk +ffmpeg-libswresample 6.1.1-r0 apk +findutils 4.9.0-r5 apk +getrandom 0.2.9 rust-crate +heck 0.4.1 rust-crate +hwdata-pci 0.377.2-r0 apk +icu-data-en 74.1-r0 apk +icu-libs 74.1-r0 apk +interpolate_name 0.2.3 rust-crate +io-lifetimes 1.0.10 rust-crate +is-terminal 0.4.7 rust-crate +itertools 0.10.5 rust-crate +ivf 0.1.2 rust-crate +jq 1.7.1-r0 apk +lab 0.11.0 rust-crate +lame-libs 3.100-r5 apk +lazy_static 1.4.0 rust-crate +lcms2 2.15-r4 apk +libSvtAv1Enc 1.7.0-r0 apk +libacl 2.3.1-r4 apk +libattr 2.5.1-r5 apk +libbluray 1.3.4-r1 apk +libbsd 0.11.7-r3 apk +libbz2 1.0.8-r6 apk +libc 0.2.144 rust-crate +libc-utils 0.7.2-r5 apk +libcrypto3 3.1.4-r6 apk +libcurl 8.5.0-r0 apk +libdav1d 1.3.0-r1 apk +libdrm 2.4.118-r0 apk +libffi 3.4.4-r3 apk +libgcc 13.2.1_git20231014-r0 apk +libgcrypt 1.10.3-r0 apk +libgomp 13.2.1_git20231014-r0 apk +libgpg-error 1.47-r2 apk +libhwy 1.0.7-r0 apk +libidn2 2.3.4-r4 apk +libintl 0.22.3-r0 apk +libjxl 0.8.2-r0 apk +libmd 1.1.0-r0 apk +libncursesw 6.4_p20231125-r0 apk +libogg 1.3.5-r5 apk +libopenmpt 0.7.3-r1 apk +libpciaccess 0.17-r2 apk +libproc2 4.0.4-r0 apk +librist 0.2.10-r0 apk +libsharpyuv 1.3.2-r0 apk +libsodium 1.0.19-r0 apk +libsrt 1.5.3-r0 apk +libssh 0.10.6-r0 apk +libssl3 3.1.4-r6 apk +libstdc++ 13.2.1_git20231014-r0 apk +libtheora 1.1.1-r18 apk +libunistring 1.1-r2 apk +libva 2.20.0-r0 apk +libvdpau 1.5-r2 apk +libvorbis 1.3.7-r2 apk +libvpx 1.13.1-r0 apk +libwebp 1.3.2-r0 apk +libwebpmux 1.3.2-r0 apk +libx11 1.8.7-r0 apk +libxau 1.0.11-r3 apk +libxcb 1.16-r0 apk +libxdmcp 1.1.4-r3 apk +libxext 1.3.5-r3 apk +libxfixes 6.0.1-r3 apk +libxml2 2.11.7-r0 apk +libxslt 1.1.39-r0 apk +libzmq 4.3.5-r2 apk +linux-pam 1.5.3-r7 apk +linux-raw-sys 0.3.7 rust-crate +log 0.4.17 rust-crate +maybe-rayon 0.1.1 rust-crate +mbedtls 2.28.8-r0 apk +memchr 2.5.0 rust-crate +memoffset 0.8.0 rust-crate +minimal-lexical 0.2.1 rust-crate +mpg123-libs 1.32.3-r0 apk +mscorlib 6.0.2924.17105 dotnet +musl 1.2.4_git20230717-r4 apk +musl-utils 1.2.4_git20230717-r4 apk +ncurses-terminfo-base 6.4_p20231125-r0 apk +netcat-openbsd 1.226-r0 apk +netstandard 6.0.2924.17105 dotnet +new_debug_unreachable 1.0.4 rust-crate +nghttp2-libs 1.58.0-r0 apk +nom 7.1.3 rust-crate +noop_proc_macro 0.3.0 rust-crate +num-bigint 0.4.3 rust-crate +num-derive 0.3.3 rust-crate +num-integer 0.1.45 rust-crate +num-rational 0.4.1 rust-crate +num-traits 0.2.15 rust-crate +num_cpus 1.15.0 rust-crate +numactl 2.0.16-r4 apk +once_cell 1.17.1 rust-crate +oniguruma 6.9.9-r0 apk +opus 1.4-r0 apk +os_str_bytes 6.5.0 rust-crate +paste 1.0.12 rust-crate +ppv-lite86 0.2.17 rust-crate +proc-macro-error 1.0.4 rust-crate +proc-macro-error-attr 1.0.4 rust-crate +proc-macro2 1.0.57 rust-crate +procps-ng 4.0.4-r0 apk +quote 1.0.27 rust-crate +rand 0.8.5 rust-crate +rand_chacha 0.3.1 rust-crate +rand_core 0.6.4 rust-crate +rav1e 0.6.6 rust-crate +rav1e-libs 0.6.6-r2 apk +rayon 1.7.0 rust-crate +rayon-core 1.11.0 rust-crate +readline 8.2.1-r2 apk +rust_hawktracer 0.7.0 rust-crate +rust_hawktracer_normal_macro 0.4.1 rust-crate +rust_hawktracer_proc_macro 0.4.1 rust-crate +rustix 0.37.19 rust-crate +scan_fmt 0.2.6 rust-crate +scanelf 1.3.7-r2 apk +scopeguard 1.1.0 rust-crate +serde 1.0.163 rust-crate +serde_derive 1.0.163 rust-crate +shadow 4.14.2-r0 apk +signal-hook 0.3.15 rust-crate +signal-hook-registry 1.4.1 rust-crate +simd_helpers 0.1.0 rust-crate +skalibs 2.14.0.1-r0 apk +soxr 0.1.3-r7 apk +sqlite-libs 3.44.2-r0 apk +ssl_client 1.36.1-r15 apk +syn 1.0.109 rust-crate +syn 2.0.16 rust-crate +termcolor 1.2.0 rust-crate +terminal_size 0.2.6 rust-crate +thiserror 1.0.40 rust-crate +thiserror-impl 1.0.40 rust-crate +tzdata 2024a-r0 apk +unicode-ident 1.0.8 rust-crate +unicode-width 0.1.10 rust-crate +utmps-libs 0.1.2.2-r0 apk +v_frame 0.3.3 rust-crate +wayland-libs-client 1.22.0-r4 apk +x264-libs 0.164_git20231001-r0 apk +x265-libs 3.5-r4 apk +xmlstarlet 1.6.1-r2 apk +xvidcore 1.3.7-r2 apk +xz-libs 5.4.5-r0 apk +y4m 0.8.0 rust-crate +zlib 1.3.1-r0 apk diff --git a/tests/test_ci.py b/tests/test_ci.py index a1085a8..467ad38 100644 --- a/tests/test_ci.py +++ b/tests/test_ci.py @@ -4,6 +4,8 @@ import json import pytest from docker.models.containers import Container +import chromedriver_autoinstaller +from docker import DockerClient from ci.ci import CI, SetEnvs @@ -13,13 +15,33 @@ os.environ["BASE"] = "alpine" os.environ["ACCESS_KEY"] = "secret-access-key" os.environ["SECRET_KEY"] = "secret-key" os.environ["META_TAG"] = "test-meta-tag" -os.environ["TAGS"] = "amd64|arm64" +os.environ["TAGS"] = "amd64-nightly-5.10.1.9109-ls85|arm64v8-nightly-5.10.1.9109-ls85" os.environ["CI_LOG_LEVEL"] = "DEBUG" os.environ["NODE_NAME"] = "test-node" +os.environ["SSL"] = "true" +os.environ["PORT"] = "443" +os.environ["WEB_SCREENSHOT"] = "true" +os.environ["WEB_AUTH"] = "" @pytest.fixture -def ci(tmpdir) -> CI: +def sbom_blob() -> bytes: + with open("tests/sbom_blob.txt", "rb") as f: + yield f.read() + +@pytest.fixture +def syft_mock_container(sbom_blob:bytes) -> Mock: + container = Mock(spec=Container) + container.logs = Mock(return_value=sbom_blob) + container.reload = Mock(return_value=None) + container.remove = Mock(return_value=None) + yield container + +@pytest.fixture +def ci(tmpdir, syft_mock_container: Mock) -> CI: ci = CI() + ci.client = Mock(DockerClient) + ci.client.containers = Mock() + ci.client.containers.run = Mock(return_value=syft_mock_container) ci.outdir = tmpdir yield ci @@ -54,8 +76,15 @@ def mock_container(mock_attrs, mock_image_attrs, log_blob) -> Mock: container.attrs = mock_attrs container.image.attrs = mock_image_attrs container.logs = Mock(return_value=log_blob) + container.reload = Mock(return_value=None) + container.remove = Mock(return_value=None) yield container +@pytest.fixture +def chromedriver_path(tmpdir): + path: None | str = chromedriver_autoinstaller.install(path=tmpdir) + yield path + def test_convert_env(set_envs: SetEnvs): envs = "ENV1=VALUE1|ENV2=VALUE2" assert set_envs._split_key_value_string(envs) == {"ENV1": "VALUE1", "ENV2": "VALUE2"} @@ -81,9 +110,9 @@ def test_add_test_result(ci: CI): ci._add_test_result(tag=tag, test=f"test-{tag}", status="PASS", message="-", start_time="") assert ci.tag_report_tests[tag] == {'test': {f"test-{tag}": {"status": "PASS", "message": "-", "runtime": "-"}}} -def test_mock_container(ci:CI,mock_container: Mock): - info = ci.get_build_info(mock_container,"amd64") - mock_info = { +def test_get_build_info(ci: CI, mock_container: Mock): + info: dict[str, str] = ci.get_build_info(mock_container,ci.tags[0]) + mock_info: dict[str, str] = { "version": "2.4.3.4248-ls7", "created": "2024-08-21T02:17:44+00:00", "size": '275.93MB', @@ -91,21 +120,33 @@ def test_mock_container(ci:CI,mock_container: Mock): "builder": "test-node" } assert info == mock_info - - ci.watch_container_logs(mock_container, "amd64") - assert ci.tag_report_tests["amd64"]["test"]["Container startup"]["status"] == "PASS" +def test_get_platform(ci: CI): + assert ci.get_platform(ci.tags[0]) == "amd64" + assert ci.get_platform(ci.tags[1]) == "arm64" + +def test_watch_container_logs(ci: CI, mock_container: Mock): + ci.watch_container_logs(mock_container, ci.tags[0]) + assert ci.tag_report_tests[ci.tags[0]]["test"]["Container startup"]["status"] == "PASS" + +def test_take_screenshot(ci:CI,mock_container: Mock): + screenshot: bool = ci.take_screenshot(mock_container, ci.tags[0]) + if screenshot: + assert os.path.isfile(os.path.join(ci.outdir, f"{ci.tags[0]}.png")) is True + assert ci.tag_report_tests[ci.tags[0]]["test"]["Get screenshot"]["status"] == "PASS" + else: + assert ci.tag_report_tests[ci.tags[0]]["test"]["Get screenshot"]["status"] == "FAIL" def test_create_html_ansi_file(ci:CI, log_blob:bytes): logs = log_blob.decode("utf-8") - ci.create_html_ansi_file(logs,"amd64","log") - assert os.path.isfile(os.path.join(ci.outdir,"amd64.log.html")) is True - + ci.create_html_ansi_file(logs,ci.tags[0],"log") + assert os.path.isfile(os.path.join(ci.outdir,f"{ci.tags[0]}.log.html")) is True + def test_report_render(ci:CI, report_containers:dict): ci.report_containers = report_containers ci.report_render() assert os.path.isfile(os.path.join(ci.outdir,"index.html")) is True - + def test_json_render(ci:CI, report_containers:dict): ci.report_containers = report_containers ci.json_render() @@ -114,3 +155,7 @@ def test_json_render(ci:CI, report_containers:dict): def test_badge_render(ci:CI): ci.badge_render() assert os.path.isfile(os.path.join(ci.outdir,"ci-status.yml")) is True + +def test_generate_sbom(ci:CI, syft_mock_container:Mock, sbom_blob:bytes): + sbom = ci.generate_sbom(ci.tags[0]) + assert "VERSION" in sbom