From eef41fc908b5ce03d7487e91ba048c9c541a4c66 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Fri, 3 Apr 2020 16:36:56 -0600 Subject: [PATCH] Changes I forgot to include --- Wabbajack.BuildServer.Test/NexusCacheTests.cs | 71 +++++++++++++++++++ .../Wabbajack.BuildServer.Test.csproj | 1 + .../sql/wabbajack_db.sql | 60 ++++++++++++++++ .../Controllers/NexusCache.cs | 15 +++- .../Wabbajack.BuildServer.csproj | 1 + 5 files changed, 147 insertions(+), 1 deletion(-) create mode 100644 Wabbajack.BuildServer.Test/NexusCacheTests.cs diff --git a/Wabbajack.BuildServer.Test/NexusCacheTests.cs b/Wabbajack.BuildServer.Test/NexusCacheTests.cs new file mode 100644 index 00000000..004f176d --- /dev/null +++ b/Wabbajack.BuildServer.Test/NexusCacheTests.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Wabbajack.BuildServer.Model.Models; +using Wabbajack.Common; +using Wabbajack.Lib; +using Wabbajack.Lib.NexusApi; +using Xunit; +using Xunit.Abstractions; +using Xunit.Priority; + +namespace Wabbajack.BuildServer.Test +{ + public class NexusCacheTests : ABuildServerSystemTest + { + public NexusCacheTests(ITestOutputHelper output, SingletonAdaptor fixture) : base(output, fixture) + { + } + + [Fact, Priority(2)] + public async Task CanIngestNexusCacheExports() + { + await @"sql\nexus_export.json".RelativeTo(AbsolutePath.EntryPoint).CopyToAsync("nexus_export.json".RelativeTo(Fixture.ServerTempFolder)); + var result = await _authedClient.GetStringAsync(MakeURL("nexus_cache/ingest")); + + Assert.Equal("15237", result); + } + + [Fact] + public async Task TestCanGetModInfo() + { + var sqlService = Fixture.GetService(); + var modId = long.MaxValue >> 1; + await sqlService.AddNexusModInfo(Game.SkyrimSpecialEdition, modId, DateTime.Now, + new ModInfo {author = "Buzz", uploaded_by = "bille"}); + + var api = await NexusApiClient.Get(); + + var modInfoResponse = await api.GetModInfo(Game.SkyrimSpecialEdition, modId); + + Assert.Equal("Buzz", modInfoResponse.author); + Assert.Equal("bille", modInfoResponse.uploaded_by); + + } + + [Fact] + public async Task TestCanGetModFiles() + { + var sqlService = Fixture.GetService(); + var modId = long.MaxValue >> 1; + var fileId = long.MaxValue >> 2; + await sqlService.AddNexusModFiles(Game.SkyrimSpecialEdition, modId, DateTime.Now, + new NexusApiClient.GetModFilesResponse {files = new List + { + new NexusFileInfo + { + file_name = "blerg" + } + }}); + + var api = await NexusApiClient.Get(); + + var modInfoResponse = await api.GetModFiles(Game.SkyrimSpecialEdition, modId); + + Assert.Single(modInfoResponse.files); + Assert.Equal("blerg", modInfoResponse.files.First().file_name); + } + } +} diff --git a/Wabbajack.BuildServer.Test/Wabbajack.BuildServer.Test.csproj b/Wabbajack.BuildServer.Test/Wabbajack.BuildServer.Test.csproj index 5d137ab6..71882a79 100644 --- a/Wabbajack.BuildServer.Test/Wabbajack.BuildServer.Test.csproj +++ b/Wabbajack.BuildServer.Test/Wabbajack.BuildServer.Test.csproj @@ -56,6 +56,7 @@ + diff --git a/Wabbajack.BuildServer.Test/sql/wabbajack_db.sql b/Wabbajack.BuildServer.Test/sql/wabbajack_db.sql index 72734f00..556563ec 100644 --- a/Wabbajack.BuildServer.Test/sql/wabbajack_db.sql +++ b/Wabbajack.BuildServer.Test/sql/wabbajack_db.sql @@ -269,6 +269,66 @@ FROM LEFT JOIN dbo.ArchiveContent ac on af.Child = ac.Child LEFT JOIN dbo.IndexedFile idx on af.Child = idx.Hash GO + +/****** Object: Table [dbo].[NexusFileInfos] Script Date: 4/1/2020 2:41:00 PM ******/ +CREATE TABLE [dbo].[NexusFileInfos]( + [Game] [int] NOT NULL, + [ModId] [bigint] NOT NULL, + [FileId] [bigint] NOT NULL, + [LastChecked] [datetime] NOT NULL, + [Data] [nvarchar](max) NOT NULL, + CONSTRAINT [PK_NexusFileInfos] PRIMARY KEY CLUSTERED + ( + [Game] ASC, + [ModId] ASC, + [FileId] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +/****** Object: Table [dbo].[NexusModFiles] Script Date: 4/1/2020 2:41:04 PM ******/ + +CREATE TABLE [dbo].[NexusModFiles]( + [Game] [int] NOT NULL, + [ModId] [bigint] NOT NULL, + [LastChecked] [datetime] NOT NULL, + [Data] [nvarchar](max) NOT NULL, + CONSTRAINT [PK_NexusModFiles] PRIMARY KEY CLUSTERED + ( + [Game] ASC, + [ModId] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +/****** Object: Table [dbo].[NexusModInfos] Script Date: 4/1/2020 2:41:07 PM ******/ + +CREATE TABLE [dbo].[NexusModInfos]( + [Game] [int] NOT NULL, + [ModId] [bigint] NOT NULL, + [LastChecked] [datetime] NOT NULL, + [Data] [nvarchar](max) NOT NULL, + CONSTRAINT [PK_NexusModInfos] PRIMARY KEY CLUSTERED + ( + [Game] ASC, + [ModId] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +/****** Object: Table [dbo].[ModLists] Script Date: 4/2/2020 3:59:19 PM ******/ +CREATE TABLE [dbo].[ModLists]( + [MachineURL] [nvarchar](50) NOT NULL, + [Summary] [nvarchar](max) NOT NULL, + [Metadata] [nvarchar](max) NOT NULL, + [DetailedStatus] [nvarchar](max) NOT NULL, + CONSTRAINT [PK_ModLists] PRIMARY KEY CLUSTERED + ( + [MachineURL] ASC + )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + /****** Object: Table [dbo].[Metrics] Script Date: 3/28/2020 4:58:59 PM ******/ SET ANSI_NULLS ON GO diff --git a/Wabbajack.BuildServer/Controllers/NexusCache.cs b/Wabbajack.BuildServer/Controllers/NexusCache.cs index b07e4801..20304693 100644 --- a/Wabbajack.BuildServer/Controllers/NexusCache.cs +++ b/Wabbajack.BuildServer/Controllers/NexusCache.cs @@ -1,12 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using CsvHelper; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using MongoDB.Driver; using Newtonsoft.Json; using Wabbajack.BuildServer.Model.Models; using Wabbajack.BuildServer.Models; +using Wabbajack.Common; +using Wabbajack.Lib; using Wabbajack.Lib.NexusApi; namespace Wabbajack.BuildServer.Controllers @@ -16,8 +24,13 @@ namespace Wabbajack.BuildServer.Controllers [Route("/v1/games/")] public class NexusCache : AControllerBase { - public NexusCache(ILogger logger, DBContext db, SqlService sql) : base(logger, db, sql) + private AppSettings _settings; + private static long CachedCount = 0; + private static long ForwardCount = 0; + + public NexusCache(ILogger logger, DBContext db, SqlService sql, AppSettings settings) : base(logger, db, sql) { + _settings = settings; } /// diff --git a/Wabbajack.BuildServer/Wabbajack.BuildServer.csproj b/Wabbajack.BuildServer/Wabbajack.BuildServer.csproj index e2893772..aea23a8d 100644 --- a/Wabbajack.BuildServer/Wabbajack.BuildServer.csproj +++ b/Wabbajack.BuildServer/Wabbajack.BuildServer.csproj @@ -17,6 +17,7 @@ +