diff --git a/src/LiquidCode.Tester.Common/Models/SubmitForTesterModel.cs b/src/LiquidCode.Tester.Common/Models/SubmitForTesterModel.cs
index 9434997..c321117 100644
--- a/src/LiquidCode.Tester.Common/Models/SubmitForTesterModel.cs
+++ b/src/LiquidCode.Tester.Common/Models/SubmitForTesterModel.cs
@@ -7,5 +7,7 @@ public record SubmitForTesterModel(
string LanguageVersion,
string SourceCode,
string PackageUrl,
- string CallbackUrl
+ string CallbackUrl,
+ int? TimeLimitMs = null,
+ int? MemoryLimitMb = null
);
diff --git a/src/LiquidCode.Tester.Gateway/Controllers/TesterController.cs b/src/LiquidCode.Tester.Gateway/Controllers/TesterController.cs
index ac52d66..f15dadb 100644
--- a/src/LiquidCode.Tester.Gateway/Controllers/TesterController.cs
+++ b/src/LiquidCode.Tester.Gateway/Controllers/TesterController.cs
@@ -82,7 +82,9 @@ public class TesterController : ControllerBase
LanguageVersion: request.LanguageVersion,
SourceCode: request.SourceCode,
PackageUrl: packagePath, // Use local path instead of URL
- CallbackUrl: request.CallbackUrl
+ CallbackUrl: request.CallbackUrl,
+ TimeLimitMs: request.TimeLimitMs,
+ MemoryLimitMb: request.MemoryLimitMb
);
// Send to appropriate worker based on language
diff --git a/src/LiquidCode.Tester.Gateway/Models/LocalSubmitModel.cs b/src/LiquidCode.Tester.Gateway/Models/LocalSubmitModel.cs
index b150508..f0f8b5f 100644
--- a/src/LiquidCode.Tester.Gateway/Models/LocalSubmitModel.cs
+++ b/src/LiquidCode.Tester.Gateway/Models/LocalSubmitModel.cs
@@ -9,4 +9,14 @@ public class LocalSubmitModel
public string SourceCode { get; set; } = string.Empty;
public string CallbackUrl { get; set; } = string.Empty;
public IFormFile? Package { get; set; }
+
+ ///
+ /// Optional time limit override in milliseconds (for testing purposes)
+ ///
+ public int? TimeLimitMs { get; set; }
+
+ ///
+ /// Optional memory limit override in megabytes (for testing purposes)
+ ///
+ public int? MemoryLimitMb { get; set; }
}
diff --git a/src/LiquidCode.Tester.Gateway/Services/WorkerClientService.cs b/src/LiquidCode.Tester.Gateway/Services/WorkerClientService.cs
index 131d481..1231139 100644
--- a/src/LiquidCode.Tester.Gateway/Services/WorkerClientService.cs
+++ b/src/LiquidCode.Tester.Gateway/Services/WorkerClientService.cs
@@ -38,6 +38,16 @@ public class WorkerClientService : IWorkerClientService
form.Add(new StringContent(submit.SourceCode), "SourceCode");
form.Add(new StringContent(submit.CallbackUrl), "CallbackUrl");
+ // Add optional limit overrides (for testing purposes)
+ if (submit.TimeLimitMs.HasValue)
+ {
+ form.Add(new StringContent(submit.TimeLimitMs.Value.ToString()), "TimeLimitMs");
+ }
+ if (submit.MemoryLimitMb.HasValue)
+ {
+ form.Add(new StringContent(submit.MemoryLimitMb.Value.ToString()), "MemoryLimitMb");
+ }
+
// Add package file
var fileStream = File.OpenRead(packagePath);
var fileContent = new StreamContent(fileStream);
diff --git a/src/LiquidCode.Tester.Worker/Controllers/TestController.cs b/src/LiquidCode.Tester.Worker/Controllers/TestController.cs
index d2fbe14..e8f701b 100644
--- a/src/LiquidCode.Tester.Worker/Controllers/TestController.cs
+++ b/src/LiquidCode.Tester.Worker/Controllers/TestController.cs
@@ -51,7 +51,9 @@ public class TestController : ControllerBase
SourceCode = request.SourceCode,
CallbackUrl = request.CallbackUrl,
Package = null, // Will use file path instead
- PackageFilePath = packageFilePath
+ PackageFilePath = packageFilePath,
+ TimeLimitMs = request.TimeLimitMs,
+ MemoryLimitMb = request.MemoryLimitMb
};
// Start testing in background
@@ -109,4 +111,14 @@ public class TestRequest
public string CallbackUrl { get; set; } = string.Empty;
public IFormFile? Package { get; set; }
public string? PackageFilePath { get; set; } // Internal use - path to saved package file
+
+ ///
+ /// Optional time limit override in milliseconds (for testing purposes)
+ ///
+ public int? TimeLimitMs { get; set; }
+
+ ///
+ /// Optional memory limit override in megabytes (for testing purposes)
+ ///
+ public int? MemoryLimitMb { get; set; }
}
diff --git a/src/LiquidCode.Tester.Worker/Services/TestingService.cs b/src/LiquidCode.Tester.Worker/Services/TestingService.cs
index db37283..7ee9203 100644
--- a/src/LiquidCode.Tester.Worker/Services/TestingService.cs
+++ b/src/LiquidCode.Tester.Worker/Services/TestingService.cs
@@ -88,6 +88,17 @@ public class TestingService : ITestingService
_logger.LogInformation("Compilation successful");
+ // Check for limit overrides (for testing purposes)
+ var timeLimitOverride = request.TimeLimitMs;
+ var memoryLimitOverride = request.MemoryLimitMb;
+
+ if (timeLimitOverride.HasValue || memoryLimitOverride.HasValue)
+ {
+ _logger.LogInformation("Using limit overrides - TimeLimit: {TimeLimit}ms, MemoryLimit: {MemoryLimit}MB",
+ timeLimitOverride?.ToString() ?? "default",
+ memoryLimitOverride?.ToString() ?? "default");
+ }
+
// Send testing status
await SendStatusAsync(request, State.Testing, ErrorCode.None, "Running tests", 0, package.TestCases.Count);
@@ -100,12 +111,16 @@ public class TestingService : ITestingService
await SendStatusAsync(request, State.Testing, ErrorCode.None,
$"Running test {testCase.Number}", testCase.Number, package.TestCases.Count);
+ // Use override limits if provided, otherwise use test case limits
+ var timeLimit = timeLimitOverride ?? testCase.TimeLimit;
+ var memoryLimit = memoryLimitOverride ?? testCase.MemoryLimit;
+
// Execute solution
var executionResult = await executionService.ExecuteAsync(
compilationResult.ExecutablePath!,
testCase.InputFilePath,
- testCase.TimeLimit,
- testCase.MemoryLimit);
+ timeLimit,
+ memoryLimit);
// Check for execution errors
if (executionResult.TimeLimitExceeded)