Skip to content

Commit 275f0a0

Browse files
authored
Better injection mechanism and tasks tests (#5)
- Update schema verification code to be more readable - Injection now has source and destination configurable folders - Remove code injection for build, leave it for testing - Do not modify submitted code, create temp folders instead - Add a temp folder creator class that cleans up after itself - Add timeouts for test and build - Better tests for tasks and checker
1 parent ae5c38e commit 275f0a0

File tree

21 files changed

+510
-364
lines changed

21 files changed

+510
-364
lines changed

Diff for: homework_checker/checker.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def check_homework(self: "Checker", homework_node: dict) -> HomeworkResultDict:
4949
)
5050
if not task:
5151
continue
52-
results[task.name] = task.check_all_tests()
52+
results[task.name] = task.check()
5353
return results
5454

5555
def check_all_homeworks(self: "Checker") -> Dict[str, HomeworkResultDict]:

Diff for: homework_checker/schema_manager.py

+40-38
Original file line numberDiff line numberDiff line change
@@ -25,47 +25,49 @@ class SchemaManager:
2525

2626
def __init__(self: SchemaManager, file_name: Path):
2727
"""Create a schema for my tests."""
28-
# TODO(igor): simplify by moving parts out of here into separate variables.
28+
29+
injection_schema = {
30+
Tags.INJECT_SOURCE_TAG: str,
31+
Tags.INJECT_DESTINATION_TAG: str,
32+
}
33+
34+
test_schema = {
35+
Tags.NAME_TAG: str,
36+
Optional(Tags.INPUT_TAG): str,
37+
Optional(Tags.INJECT_FOLDER_TAG): [injection_schema],
38+
Optional(Tags.RUN_GTESTS_TAG, default=False): bool,
39+
Optional(Tags.EXPECTED_OUTPUT_TAG): Or(str, float, int),
40+
Optional(Tags.TIMEOUT_TAG, default=60): float,
41+
}
42+
43+
task_schema = {
44+
Tags.NAME_TAG: str,
45+
Tags.LANGUAGE_TAG: Or(LangTags.CPP, LangTags.BASH),
46+
Tags.FOLDER_TAG: str,
47+
Optional(Tags.OUTPUT_TYPE_TAG, default=OutputTags.STRING): Or(
48+
OutputTags.STRING, OutputTags.NUMBER
49+
),
50+
Optional(Tags.COMPILER_FLAGS_TAG, default="-Wall"): str,
51+
Optional(Tags.BINARY_NAME_TAG, default="main"): str,
52+
Optional(Tags.PIPE_TAG, default=""): str,
53+
Optional(Tags.BUILD_TYPE_TAG, default=BuildTags.CMAKE): Or(
54+
BuildTags.CMAKE, BuildTags.SIMPLE
55+
),
56+
Optional(Tags.BUILD_TIMEOUT_TAG, default=60): float,
57+
Optional(Tags.TESTS_TAG): [test_schema],
58+
}
59+
60+
homework_schema = {
61+
Tags.NAME_TAG: str,
62+
Tags.FOLDER_TAG: str,
63+
Optional(Tags.DEADLINE_TAG, default=MAX_DATE_STR): str,
64+
Tags.TASKS_TAG: [task_schema],
65+
}
66+
2967
self.__schema = Schema(
3068
{
3169
Tags.FOLDER_TAG: str,
32-
Tags.HOMEWORKS_TAG: [
33-
{
34-
Tags.NAME_TAG: str,
35-
Tags.FOLDER_TAG: str,
36-
Optional(Tags.DEADLINE_TAG, default=MAX_DATE_STR): str,
37-
Tags.TASKS_TAG: [
38-
{
39-
Tags.NAME_TAG: str,
40-
Tags.LANGUAGE_TAG: Or(LangTags.CPP, LangTags.BASH),
41-
Tags.FOLDER_TAG: str,
42-
Optional(
43-
Tags.OUTPUT_TYPE_TAG, default=OutputTags.STRING
44-
): Or(OutputTags.STRING, OutputTags.NUMBER),
45-
Optional(Tags.COMPILER_FLAGS_TAG, default="-Wall"): str,
46-
Optional(Tags.BINARY_NAME_TAG, default="main"): str,
47-
Optional(Tags.PIPE_TAG, default=""): str,
48-
Optional(
49-
Tags.BUILD_TYPE_TAG, default=BuildTags.CMAKE
50-
): Or(BuildTags.CMAKE, BuildTags.SIMPLE),
51-
Optional(Tags.INJECT_FOLDER_TAG): [str],
52-
Optional(Tags.TESTS_TAG): [
53-
{
54-
Tags.NAME_TAG: str,
55-
Optional(Tags.INPUT_TAG): str,
56-
Optional(Tags.INJECT_FOLDER_TAG): [str],
57-
Optional(
58-
Tags.RUN_GTESTS_TAG, default=False
59-
): bool,
60-
Optional(Tags.EXPECTED_OUTPUT_TAG): Or(
61-
str, float, int
62-
),
63-
}
64-
],
65-
}
66-
],
67-
}
68-
],
70+
Tags.HOMEWORKS_TAG: [homework_schema],
6971
}
7072
)
7173
yaml = YAML()

Diff for: homework_checker/schema_tags.py

+4
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@ class Tags:
66
"""List of tags available."""
77

88
BINARY_NAME_TAG = "binary_name"
9+
BUILD_TIMEOUT_TAG = "build_timeout"
910
BUILD_TYPE_TAG = "build_type"
1011
COMPILER_FLAGS_TAG = "compiler_flags"
1112
DEADLINE_TAG = "submit_by"
1213
EXPECTED_OUTPUT_TAG = "expected_output"
1314
FOLDER_TAG = "folder"
1415
HOMEWORKS_TAG = "homeworks"
16+
INJECT_DESTINATION_TAG = "destination"
1517
INJECT_FOLDER_TAG = "inject_folders"
18+
INJECT_SOURCE_TAG = "source"
1619
INPUT_TAG = "input_args"
1720
LANGUAGE_TAG = "language"
1821
NAME_TAG = "name"
@@ -21,6 +24,7 @@ class Tags:
2124
RUN_GTESTS_TAG = "run_google_tests"
2225
TASKS_TAG = "tasks"
2326
TESTS_TAG = "tests"
27+
TIMEOUT_TAG = "timeout"
2428

2529

2630
class OutputTags:

0 commit comments

Comments
 (0)