Skip to content
Snippets Groups Projects
Commit 633ff21a authored by Janis Daniel Dähne's avatar Janis Daniel Dähne
Browse files

- sql checker working (basic)

parent 21a06be4
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics.Contracts;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
......@@ -300,7 +301,7 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
var responseList = new List<TestAnswerFromBackend>();
foreach (var testResult in sqlCheckerPreResults)
{
var test = tests.FirstOrDefault(p => p.Id == testResult.TestId);
......@@ -345,7 +346,7 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
await base.HandleDbError(ex);
return;
}
responseList.Add(new TestAnswerFromBackend()
{
TestId = oldResult.TestId,
......@@ -366,7 +367,7 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
CompileTimeoutInMsUsed = oldResult.CompileTimeoutInMsUsed,
});
}
await Response.WriteAsync(
Jc.Serialize(new BasicResponseWithData<List<TestAnswerFromBackend>>(ResponseCode.Ok,
"",
......@@ -713,29 +714,63 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
//--- get test test result
var sqlCheckerRresponses = await RequestResultFromSqlChecker(systemSettings, checkedSubmissionIds);
var sqlCheckerResponses = await RequestResultFromSqlChecker(systemSettings, checkedSubmissionIds);
var response = new List<GetSqlCheckerStatusResponseFromBackend>();
//save the result...
//only save if we got some useful result...
bool needToSaveResult = false;
foreach (var oldResult in testResults)
{
if (oldResult.ProgramExitCode == null) continue;
var sqlCheckerRresponse = sqlCheckerRresponses.Find(p => p.Item1.TestId == oldResult.TestId);
var sqlCheckerResponse = sqlCheckerResponses.Find(p => p.Item1.TestId == oldResult.TestId);
if (sqlCheckerRresponse.Item1 == null)
if (sqlCheckerResponse.Item1.SqlCheckerSubmissionInfo == null)
{
//TODO error
//we could not get any result...
if (sqlCheckerResponse.Item2 == null)
{
//also not error msg... so just the sql checker hasn't finished yet
response.Add(new GetSqlCheckerStatusResponseFromBackend()
{
TestId = oldResult.TestId,
testResult = null
});
}
else
{
//some error...
if (AppConfiguration.IsDebugMode)
{
await
Response.WriteAsync(
Jc.Serialize(new BasicResponse(ResponseCode.ServerError, "some error communicating with (or during) the sql checker: " + sqlCheckerResponse.Item2)));
return;
}
else
{
await
Response.WriteAsync(
Jc.Serialize(new BasicResponse(ResponseCode.ServerError, "some error communicating with (or during) the sql checker")));
return;
}
}
continue;
}
finishTestResult(oldResult, sqlCheckerRresponse.Item1.SqlCheckerSubmissionInfo);
needToSaveResult = true;
finishTestResult(oldResult, sqlCheckerResponse.Item1.SqlCheckerSubmissionInfo);
response.Add(new GetSqlCheckerStatusResponseFromBackend()
{
TestId = oldResult.TestId,
testResult = new TestAnswerFromBackend()
{
TestId = oldResult.TestId,
......@@ -758,14 +793,17 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
});
}
try
if (needToSaveResult)
{
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
await base.HandleDbError(ex);
return;
try
{
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
await base.HandleDbError(ex);
return;
}
}
......@@ -787,9 +825,16 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
SystemSetting systemSettings, List<Tuple<int, int>> testIdAndSubmissionIds)
{
var results = new List<Tuple<GetSqlCheckerStatusResponseBackendOnly, string>>();
foreach (var submissionId in testIdAndSubmissionIds)
{
var errorResponseObj = new GetSqlCheckerStatusResponseBackendOnly()
{
TestId = submissionId.Item1,
SqlCheckerSubmissionInfo = null
};
HttpResponseMessage jsonResponse = null;
var tokenSource = new CancellationTokenSource();
......@@ -809,8 +854,9 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
string errorMsg = ExceptionHelper.GetAndLogException(e, "sql checker request");
results.Add(new Tuple<GetSqlCheckerStatusResponseBackendOnly, string>(errorResponseObj, errorMsg));
continue;
}
}
......@@ -826,25 +872,38 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
if (contentResult == null && tokenSource.IsCancellationRequested)
{
//timeout...
string errorMsg = "Timeout getting sql checker response";
results.Add(new Tuple<GetSqlCheckerStatusResponseBackendOnly, string>(errorResponseObj, errorMsg));
continue;
}
answerFromTestServer = Jc.Deserialize<SqlCheckerSubmissionInfo>(contentResult);
if (answerFromTestServer == null)
//we get this if the result is not ready yet...
if (jsonResponse.StatusCode == HttpStatusCode.NotFound)
{
//could not deserialize...
throw new NotImplementedException();
results.Add(new Tuple<GetSqlCheckerStatusResponseBackendOnly, string>(errorResponseObj, null));
}
var response = new GetSqlCheckerStatusResponseBackendOnly()
else
{
TestId = submissionId.Item1,
SqlCheckerSubmissionInfo = answerFromTestServer
};
answerFromTestServer = Jc.Deserialize<SqlCheckerSubmissionInfo>(contentResult);
results.Add(new Tuple<GetSqlCheckerStatusResponseBackendOnly, string>(response, null));
if (answerFromTestServer == null)
{
//could not deserialize...
string errorMsg = "could not deserialize sql checker response";
results.Add(new Tuple<GetSqlCheckerStatusResponseBackendOnly, string>(errorResponseObj, errorMsg));
continue;
}
var response = new GetSqlCheckerStatusResponseBackendOnly()
{
TestId = submissionId.Item1,
SqlCheckerSubmissionInfo = answerFromTestServer
};
results.Add(new Tuple<GetSqlCheckerStatusResponseBackendOnly, string>(response, null));
}
}
return results;
......@@ -917,7 +976,6 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
private void finishTestResult(TestWithSingleSolutionAsTestResult oldResult,
SqlCheckerSubmissionInfo responseFromSqlChecker)
{
oldResult.Passed = (responseFromSqlChecker.Result == SubmissionInfoResult.RESULT_EQUIVALENT ||
responseFromSqlChecker.Result == SubmissionInfoResult.EQUIVALENT);
oldResult.Protocol = Jc.Serialize(responseFromSqlChecker);
......@@ -955,13 +1013,16 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
public class GetSqlCheckerStatusResponseFromBackend
{
public int TestId { get; set; }
/// <summary>
/// the protocol contains SqlCheckerSubmissionInfo
/// CAN BE NULL
/// </summary>
public TestAnswerFromBackend testResult { get; set; }
// public SqlCheckerSubmissionInfo SqlCheckerSubmissionInfo { get; set; }
}
//see
//https://gitlab.informatik.uni-halle.de/sql/sql-checker/blob/master/webapp/src/main/java/servlets/SubmissionInfoServlet.java
......@@ -1077,34 +1138,42 @@ namespace ClientServer.Controllers.Core.Testing.ThirdParty
/// manually_assessed
/// </summary>
EQUIVALENT_BY_CONTROLLER,
/// <summary>
/// manually_assessed
/// </summary>
NOT_EQUIVALENT_BY_CONTROLLER,
/// <summary>
/// syntactically_correct is unknown
/// </summary>
ERROR,
/// <summary>
/// syntactically_correct is false and check_queryresult_checker is null
/// </summary>
NOT_PARSABLE,
/// <summary>
/// syntactically_correct is false and check_queryresult_checker is set
/// </summary>
NOT_EXECUTABLE,
/// <summary>
/// result is equivalent by some internal checker
/// </summary>
EQUIVALENT,
/// <summary>
/// result is not equivalent by some internal checker
/// </summary>
NOT_EQUIVALENT,
/// <summary>
/// result is equivalent by some internal checker
/// </summary>
RESULT_EQUIVALENT,
/// <summary>
/// this can happen when we have a timeout or unknown in at least one qrec state
/// </summary>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment