Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
ClientServer
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Releases
Container registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
YAPEX
ClientServer
Commits
633ff21a
Commit
633ff21a
authored
5 years ago
by
Janis Daniel Dähne
Browse files
Options
Downloads
Patches
Plain Diff
- sql checker working (basic)
parent
21a06be4
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/ClientServer/Controllers/Core/Testing/ThirdParty/SqlCheckerHelper.cs
+102
-33
102 additions, 33 deletions
...r/Controllers/Core/Testing/ThirdParty/SqlCheckerHelper.cs
with
102 additions
and
33 deletions
src/ClientServer/Controllers/Core/Testing/ThirdParty/SqlCheckerHelper.cs
+
102
−
33
View file @
633ff21a
...
...
@@ -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
sqlCheckerR
r
esponses
=
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
sqlCheckerR
r
esponse
=
sqlCheckerR
r
esponses
.
Find
(
p
=>
p
.
Item1
.
TestId
==
oldResult
.
TestId
);
var
sqlCheckerResponse
=
sqlCheckerResponses
.
Find
(
p
=>
p
.
Item1
.
TestId
==
oldResult
.
TestId
);
if
(
sqlCheckerR
r
esponse
.
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>
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment