diff --git a/src/Tgstation.Server.Api/Models/Request/ByondVersionDeleteRequest.cs b/src/Tgstation.Server.Api/Models/Request/ByondVersionDeleteRequest.cs
index 3a81b191cc..692c270a5e 100644
--- a/src/Tgstation.Server.Api/Models/Request/ByondVersionDeleteRequest.cs
+++ b/src/Tgstation.Server.Api/Models/Request/ByondVersionDeleteRequest.cs
@@ -1,13 +1,15 @@
-using System;
-
-using Tgstation.Server.Api.Models.Internal;
+using Tgstation.Server.Api.Models.Internal;
namespace Tgstation.Server.Api.Models.Request
{
///
- /// A request to delete a specific .
+ /// A request to delete a specific .
///
- public class ByondVersionDeleteRequest : EngineVersion
+ public class ByondVersionDeleteRequest
{
+ ///
+ /// The to delete.
+ ///
+ public EngineVersion? EngineVersion { get; set; }
}
}
diff --git a/src/Tgstation.Server.Api/Models/Request/ByondVersionRequest.cs b/src/Tgstation.Server.Api/Models/Request/ByondVersionRequest.cs
index c56edecfd6..de00f22994 100644
--- a/src/Tgstation.Server.Api/Models/Request/ByondVersionRequest.cs
+++ b/src/Tgstation.Server.Api/Models/Request/ByondVersionRequest.cs
@@ -3,10 +3,15 @@
namespace Tgstation.Server.Api.Models.Request
{
///
- /// A request to install a .
+ /// A request to switch to a given .
///
- public sealed class ByondVersionRequest : EngineVersion
+ public sealed class ByondVersionRequest
{
+ ///
+ /// The to switch to.
+ ///
+ public EngineVersion? EngineVersion { get; set; }
+
///
/// If a custom BYOND version is to be uploaded.
///
diff --git a/src/Tgstation.Server.Host/Controllers/ByondController.cs b/src/Tgstation.Server.Host/Controllers/ByondController.cs
index 33b9d55ee1..22dcc4f2c1 100644
--- a/src/Tgstation.Server.Host/Controllers/ByondController.cs
+++ b/src/Tgstation.Server.Host/Controllers/ByondController.cs
@@ -153,7 +153,8 @@ namespace Tgstation.Server.Host.Controllers
#pragma warning restore CA1506
#pragma warning restore CA1502
{
- var earlyOut = ValidateByondVersion(model);
+ ArgumentNullException.ThrowIfNull(model);
+ var earlyOut = ValidateEngineVersion(model.EngineVersion);
if (earlyOut != null)
return earlyOut;
@@ -170,7 +171,7 @@ namespace Tgstation.Server.Host.Controllers
async instance =>
{
var byondManager = instance.EngineManager;
- var versionAlreadyInstalled = !uploadingZip && byondManager.InstalledVersions.Any(x => x.Equals(model));
+ var versionAlreadyInstalled = !uploadingZip && byondManager.InstalledVersions.Any(x => x.Equals(model.EngineVersion));
if (versionAlreadyInstalled)
{
Logger.LogInformation(
@@ -181,7 +182,7 @@ namespace Tgstation.Server.Host.Controllers
try
{
- await byondManager.ChangeVersion(null, model, null, false, cancellationToken);
+ await byondManager.ChangeVersion(null, model.EngineVersion, null, false, cancellationToken);
}
catch (InvalidOperationException ex)
{
@@ -195,7 +196,7 @@ namespace Tgstation.Server.Host.Controllers
if (!versionAlreadyInstalled)
{
- if (model.CustomIteration.HasValue)
+ if (model.EngineVersion.CustomIteration.HasValue)
return BadRequest(new ErrorMessageResponse(ErrorCode.EngineNonExistentCustomVersion));
Logger.LogInformation(
@@ -207,7 +208,7 @@ namespace Tgstation.Server.Host.Controllers
// run the install through the job manager
var job = new Models.Job
{
- Description = $"Install {(!uploadingZip ? String.Empty : "custom ")}{model.Engine.Value} version {model.Version}",
+ Description = $"Install {(!uploadingZip ? String.Empty : "custom ")}{model.EngineVersion.Engine.Value} version {model.EngineVersion.Version}",
StartedBy = AuthenticationContext.User,
CancelRightsType = RightsType.Byond,
CancelRight = (ulong)ByondRights.CancelInstall,
@@ -244,7 +245,7 @@ namespace Tgstation.Server.Host.Controllers
await using (zipFileStream)
await core.EngineManager.ChangeVersion(
progressHandler,
- model,
+ model.EngineVersion,
zipFileStream,
true,
jobCancellationToken);
@@ -283,7 +284,8 @@ namespace Tgstation.Server.Host.Controllers
[ProducesResponseType(typeof(ErrorMessageResponse), 410)]
public async ValueTask Delete([FromBody] ByondVersionDeleteRequest model, CancellationToken cancellationToken)
{
- var earlyOut = ValidateByondVersion(model);
+ ArgumentNullException.ThrowIfNull(model);
+ var earlyOut = ValidateEngineVersion(model.EngineVersion);
if (earlyOut != null)
return earlyOut;
@@ -292,11 +294,11 @@ namespace Tgstation.Server.Host.Controllers
{
var byondManager = instance.EngineManager;
- if (model.Equals(byondManager.ActiveVersion))
+ if (model.EngineVersion.Equals(byondManager.ActiveVersion))
return ValueTask.FromResult(
Conflict(new ErrorMessageResponse(ErrorCode.EngineCannotDeleteActiveVersion)));
- var versionNotInstalled = !byondManager.InstalledVersions.Any(x => x.Equals(model));
+ var versionNotInstalled = !byondManager.InstalledVersions.Any(x => x.Equals(model.EngineVersion));
return ValueTask.FromResult(
versionNotInstalled
@@ -307,7 +309,7 @@ namespace Tgstation.Server.Host.Controllers
if (notInstalledResponse != null)
return notInstalledResponse;
- var isByondVersion = model.Engine.Value == EngineType.Byond;
+ var isByondVersion = model.EngineVersion.Engine.Value == EngineType.Byond;
// run the install through the job manager
var job = new Models.Job
@@ -317,7 +319,7 @@ namespace Tgstation.Server.Host.Controllers
CancelRightsType = RightsType.Byond,
CancelRight = (ulong)(
isByondVersion
- ? model.Version.Build != -1
+ ? model.EngineVersion.Version.Build != -1
? ByondRights.InstallOfficialOrChangeActiveByondVersion
: ByondRights.InstallCustomByondVersion
: ByondRights.InstallCustomOpenDreamVersion | ByondRights.InstallOfficialOrChangeActiveOpenDreamVersion),
@@ -327,7 +329,7 @@ namespace Tgstation.Server.Host.Controllers
await jobManager.RegisterOperation(
job,
(instanceCore, databaseContextFactory, job, progressReporter, jobCancellationToken)
- => instanceCore.EngineManager.DeleteVersion(progressReporter, model, jobCancellationToken),
+ => instanceCore.EngineManager.DeleteVersion(progressReporter, model.EngineVersion, jobCancellationToken),
cancellationToken);
var apiResponse = job.ToApi();
@@ -339,11 +341,9 @@ namespace Tgstation.Server.Host.Controllers
///
/// The to validate and normalize.
/// The to return, if any.
- BadRequestObjectResult ValidateByondVersion(EngineVersion version)
+ BadRequestObjectResult ValidateEngineVersion(EngineVersion version)
{
- ArgumentNullException.ThrowIfNull(version);
-
- if (!version.Engine.HasValue)
+ if (version == null || !version.Engine.HasValue)
return BadRequest(new ErrorMessageResponse(ErrorCode.ModelValidationFailure));
var isByond = version.Engine.Value == EngineType.Byond;
diff --git a/tests/Tgstation.Server.Client.Tests/TestApiClient.cs b/tests/Tgstation.Server.Client.Tests/TestApiClient.cs
index e0156fc0f4..941d254133 100644
--- a/tests/Tgstation.Server.Client.Tests/TestApiClient.cs
+++ b/tests/Tgstation.Server.Client.Tests/TestApiClient.cs
@@ -51,7 +51,7 @@ namespace Tgstation.Server.Client.Tests
var result = await client.Read(Routes.Byond, default);
Assert.AreEqual(sample.EngineVersion, result.EngineVersion);
- Assert.AreEqual(0, result.EngineVersion.Version.Build); // sucks but we can't do better really
+ Assert.AreEqual(-1, result.EngineVersion.Version.Build);
Assert.IsFalse(result.EngineVersion.CustomIteration.HasValue);
}
diff --git a/tests/Tgstation.Server.Tests/Live/Instance/ByondTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/ByondTest.cs
index 77135b84c4..0779707fd7 100644
--- a/tests/Tgstation.Server.Tests/Live/Instance/ByondTest.cs
+++ b/tests/Tgstation.Server.Tests/Live/Instance/ByondTest.cs
@@ -114,7 +114,10 @@ namespace Tgstation.Server.Tests.Live.Instance
() => byondClient.SetActiveVersion(
new ByondVersionRequest
{
- Engine = testEngine,
+ EngineVersion = new EngineVersion
+ {
+ Engine = testEngine,
+ }
},
null,
cancellationToken),
@@ -132,36 +135,48 @@ namespace Tgstation.Server.Tests.Live.Instance
{
var deleteThisOneBecauseItWasntPartOfTheOriginalTest = await byondClient.DeleteVersion(new ByondVersionDeleteRequest
{
- Engine = testEngine,
- Version = testVersion.Version,
- CustomIteration = 2,
+ EngineVersion = new EngineVersion
+ {
+ Engine = testEngine,
+ Version = testVersion.Version,
+ CustomIteration = 2,
+ }
}, cancellationToken);
await WaitForJob(deleteThisOneBecauseItWasntPartOfTheOriginalTest, 30, false, null, cancellationToken);
var nonExistentUninstallResponseTask = ApiAssert.ThrowsException(() => byondClient.DeleteVersion(
new ByondVersionDeleteRequest
{
- Version = new(509, 1000),
- Engine = testEngine,
+ EngineVersion = new EngineVersion
+ {
+ Version = new(509, 1000),
+ Engine = testEngine,
+ }
},
cancellationToken), ErrorCode.ResourceNotPresent);
var uninstallResponseTask = byondClient.DeleteVersion(
new ByondVersionDeleteRequest
{
- Version = testVersion.Version,
- Engine = testVersion.Engine,
- SourceSHA = testVersion.SourceSHA,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ Engine = testVersion.Engine,
+ SourceSHA = testVersion.SourceSHA,
+ }
},
cancellationToken);
var badBecauseActiveResponseTask = ApiAssert.ThrowsException(() => byondClient.DeleteVersion(
new ByondVersionDeleteRequest
{
- Version = testVersion.Version,
- Engine = testVersion.Engine,
- SourceSHA = testVersion.SourceSHA,
- CustomIteration = 1,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ Engine = testVersion.Engine,
+ SourceSHA = testVersion.SourceSHA,
+ CustomIteration = 1,
+ }
},
cancellationToken), ErrorCode.EngineCannotDeleteActiveVersion);
@@ -190,12 +205,15 @@ namespace Tgstation.Server.Tests.Live.Instance
{
var newModel = new ByondVersionRequest
{
- Version = new Version(5011, 1385)
+ EngineVersion = new EngineVersion
+ {
+ Version = new Version(5011, 1385),
+ }
};
await ApiAssert.ThrowsException(() => byondClient.SetActiveVersion(newModel, null, cancellationToken), ErrorCode.ModelValidationFailure);
- newModel.Engine = testEngine;
+ newModel.EngineVersion.Engine = testEngine;
var test = await byondClient.SetActiveVersion(newModel, null, cancellationToken);
Assert.IsNotNull(test.InstallJob);
@@ -206,22 +224,25 @@ namespace Tgstation.Server.Tests.Live.Instance
{
var newModel = new ByondVersionRequest
{
- Version = testVersion.Version,
- Engine = testVersion.Engine,
- SourceSHA = testVersion.SourceSHA,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ Engine = testVersion.Engine,
+ SourceSHA = testVersion.SourceSHA,
+ }
};
var test = await byondClient.SetActiveVersion(newModel, null, cancellationToken);
Assert.IsNotNull(test.InstallJob);
await WaitForJob(test.InstallJob, 180, false, null, cancellationToken);
var currentShit = await byondClient.ActiveVersion(cancellationToken);
- Assert.AreEqual(newModel, currentShit.EngineVersion);
+ Assert.AreEqual(newModel.EngineVersion, currentShit.EngineVersion);
Assert.IsFalse(currentShit.EngineVersion.CustomIteration.HasValue);
var dreamMaker = "DreamMaker";
if (new PlatformIdentifier().IsWindows)
dreamMaker += ".exe";
- var dreamMakerDir = Path.Combine(metadata.Path, "Byond", newModel.Version.ToString(), "byond", "bin");
+ var dreamMakerDir = Path.Combine(metadata.Path, "Byond", newModel.EngineVersion.Version.ToString(), "byond", "bin");
Assert.IsTrue(Directory.Exists(dreamMakerDir), $"Directory {dreamMakerDir} does not exist!");
Assert.IsTrue(
@@ -271,10 +292,13 @@ namespace Tgstation.Server.Tests.Live.Instance
var test = await byondClient.SetActiveVersion(
new ByondVersionRequest
{
- Engine = testVersion.Engine,
- Version = testVersion.Version,
- SourceSHA = testVersion.SourceSHA,
- UploadCustomZip = true
+ EngineVersion = new EngineVersion
+ {
+ Engine = testVersion.Engine,
+ Version = testVersion.Version,
+ SourceSHA = testVersion.SourceSHA,
+ },
+ UploadCustomZip = true,
},
stableBytesMs,
cancellationToken);
@@ -287,10 +311,14 @@ namespace Tgstation.Server.Tests.Live.Instance
var test2 = await byondClient.SetActiveVersion(
new ByondVersionRequest
{
- Version = testVersion.Version,
- SourceSHA = testVersion.SourceSHA,
- Engine = testVersion.Engine,
- UploadCustomZip = true
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ SourceSHA = testVersion.SourceSHA,
+ Engine = testVersion.Engine,
+ },
+ UploadCustomZip = true,
+
},
stableBytesMs,
cancellationToken);
@@ -305,23 +333,32 @@ namespace Tgstation.Server.Tests.Live.Instance
// test a few switches
var installResponse = await byondClient.SetActiveVersion(new ByondVersionRequest
{
- Version = testVersion.Version,
- SourceSHA = testVersion.SourceSHA,
- Engine = testVersion.Engine,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ SourceSHA = testVersion.SourceSHA,
+ Engine = testVersion.Engine,
+ }
}, null, cancellationToken);
Assert.IsNull(installResponse.InstallJob);
await ApiAssert.ThrowsException(() => byondClient.SetActiveVersion(new ByondVersionRequest
{
- Version = testVersion.Version,
- Engine = testEngine,
- CustomIteration = 3,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ Engine = testEngine,
+ CustomIteration = 3,
+ }
}, null, cancellationToken), ErrorCode.EngineNonExistentCustomVersion);
installResponse = await byondClient.SetActiveVersion(new ByondVersionRequest
{
- Version = new Version(testVersion.Version.Major, testVersion.Version.Minor),
- Engine = testEngine,
- CustomIteration = 1,
+ EngineVersion = new EngineVersion
+ {
+ Version = new Version(testVersion.Version.Major, testVersion.Version.Minor),
+ Engine = testEngine,
+ CustomIteration = 1,
+ }
}, null, cancellationToken);
Assert.IsNull(installResponse.InstallJob);
}
diff --git a/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs
index 69435c0674..96b8b86492 100644
--- a/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs
+++ b/tests/Tgstation.Server.Tests/Live/Instance/InstanceTest.cs
@@ -182,9 +182,12 @@ namespace Tgstation.Server.Tests.Live.Instance
installJob2 = await instanceClient.Byond.SetActiveVersion(new ByondVersionRequest
{
UploadCustomZip = true,
- Version = compatVersion.Version,
- Engine = compatVersion.Engine,
- SourceSHA = compatVersion.SourceSHA
+ EngineVersion = new EngineVersion
+ {
+ Version = compatVersion.Version,
+ Engine = compatVersion.Engine,
+ SourceSHA = compatVersion.SourceSHA,
+ },
}, stableBytesMs, cancellationToken);
}
diff --git a/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs b/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs
index 7f96f041c5..7ba10fdaa7 100644
--- a/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs
+++ b/tests/Tgstation.Server.Tests/Live/Instance/WatchdogTest.cs
@@ -250,9 +250,12 @@ namespace Tgstation.Server.Tests.Live.Instance
var setActiveResponse = await instanceClient.Byond.SetActiveVersion(
new ByondVersionRequest
{
- Version = testCustomVersion,
- Engine = testVersion.Engine,
- CustomIteration = testCustomRevision,
+ EngineVersion = new EngineVersion
+ {
+ Version = testCustomVersion,
+ Engine = testVersion.Engine,
+ CustomIteration = testCustomRevision,
+ }
},
null,
cancellationToken);
@@ -263,9 +266,12 @@ namespace Tgstation.Server.Tests.Live.Instance
var deleteJob = await instanceClient.Byond.DeleteVersion(
new ByondVersionDeleteRequest
{
- Version = testVersion.Version,
- SourceSHA = testVersion.SourceSHA,
- Engine = testVersion.Engine,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ SourceSHA = testVersion.SourceSHA,
+ Engine = testVersion.Engine,
+ }
},
cancellationToken);
@@ -280,9 +286,12 @@ namespace Tgstation.Server.Tests.Live.Instance
setActiveResponse = await instanceClient.Byond.SetActiveVersion(
new ByondVersionRequest
{
- Version = testVersion.Version,
- Engine = testVersion.Engine,
- SourceSHA = testVersion.SourceSHA
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ Engine = testVersion.Engine,
+ SourceSHA = testVersion.SourceSHA
+ }
},
null,
cancellationToken);
@@ -297,9 +306,12 @@ namespace Tgstation.Server.Tests.Live.Instance
setActiveResponse = await instanceClient.Byond.SetActiveVersion(
new ByondVersionRequest
{
- Version = testCustomVersion,
- Engine = testVersion.Engine,
- CustomIteration = testCustomRevision,
+ EngineVersion = new EngineVersion
+ {
+ Version = testCustomVersion,
+ Engine = testVersion.Engine,
+ CustomIteration = testCustomRevision,
+ }
},
null,
cancellationToken);
@@ -310,9 +322,12 @@ namespace Tgstation.Server.Tests.Live.Instance
deleteJob = await instanceClient.Byond.DeleteVersion(
new ByondVersionDeleteRequest
{
- Version = testVersion.Version,
- Engine = testVersion.Engine,
- SourceSHA = testVersion.SourceSHA,
+ EngineVersion = new EngineVersion
+ {
+ Version = testVersion.Version,
+ Engine = testVersion.Engine,
+ SourceSHA = testVersion.SourceSHA,
+ }
},
cancellationToken);
@@ -989,9 +1004,12 @@ namespace Tgstation.Server.Tests.Live.Instance
var byondInstallJobTask = instanceClient.Byond.SetActiveVersion(
new ByondVersionRequest
{
- Version = versionToInstall.Version,
- Engine = versionToInstall.Engine,
- SourceSHA = versionToInstall.SourceSHA,
+ EngineVersion = new EngineVersion
+ {
+ Version = versionToInstall.Version,
+ Engine = versionToInstall.Engine,
+ SourceSHA = versionToInstall.SourceSHA,
+ }
},
null,
cancellationToken);
diff --git a/tools/Tgstation.Server.Migrator.Comms/Program.cs b/tools/Tgstation.Server.Migrator.Comms/Program.cs
index 754d9e69d5..91ad70de97 100644
--- a/tools/Tgstation.Server.Migrator.Comms/Program.cs
+++ b/tools/Tgstation.Server.Migrator.Comms/Program.cs
@@ -230,7 +230,10 @@ static class Program
Console.WriteLine($"Found installed BYOND version: {byondVersion.Major}.{byondVersion.Minor}");
byondVersionRequest = new ByondVersionRequest
{
- Version = byondVersion
+ EngineVersion = new EngineVersion
+ {
+ Version = byondVersion
+ }
};
}