Skip to content

Commit 4a7e444

Browse files
committed
Adding success exit codes parameter into exec boxes.
1 parent 11cd0b6 commit 4a7e444

File tree

16 files changed

+163
-83
lines changed

16 files changed

+163
-83
lines changed

app/helpers/ExerciseConfig/Pipeline/Box/Box.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,8 @@ public function validateMetadata()
151151
// same, but if types are not the same and default port is undefined
152152
// there can be any type in the output port
153153
throw new ExerciseConfigException(
154-
"Default output port '{$defaultOutPort->getName()}' missing or malformed in box '{$this->getName()}'"
154+
"Default output port '{$defaultOutPort->getName()}' missing or malformed in box '"
155+
. $this->getName() . "'"
155156
);
156157
}
157158
}

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/ElfExecutionBox.php

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,17 @@ public static function init()
2929
{
3030
if (!self::$initialized) {
3131
self::$initialized = true;
32-
self::$defaultInputPorts = array(
33-
new Port((new PortMeta())->setName(self::$ARGS_PORT_KEY)->setType(VariableTypes::$STRING_ARRAY_TYPE)),
34-
new Port((new PortMeta())->setName(self::$STDIN_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
35-
new Port(
36-
(new PortMeta())->setName(self::$INPUT_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
37-
),
38-
new Port((new PortMeta())->setName(self::$BINARY_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE))
39-
);
40-
self::$defaultOutputPorts = array(
41-
new Port((new PortMeta())->setName(self::$STDOUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
42-
new Port((new PortMeta())->setName(self::$OUTPUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE))
43-
);
32+
self::$defaultInputPorts = Box::constructPorts([
33+
self::$BINARY_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
34+
self::$ARGS_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
35+
self::$STDIN_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
36+
self::$INPUT_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
37+
self::$SUCCESS_EXIT_CODES_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
38+
]);
39+
self::$defaultOutputPorts = Box::constructPorts([
40+
self::$STDOUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
41+
self::$OUTPUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
42+
]);
4443
}
4544
}
4645

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/HaskellExecutionBox.php

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,19 @@ public static function init()
3434
{
3535
if (!self::$initialized) {
3636
self::$initialized = true;
37-
self::$defaultInputPorts = array(
38-
new Port((new PortMeta())->setName(self::$BINARY_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
39-
new Port(
40-
(new PortMeta())->setName(self::$SOURCE_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
41-
),
42-
new Port((new PortMeta())->setName(self::$STDIN_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
43-
new Port(
44-
(new PortMeta())->setName(self::$INPUT_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
45-
),
46-
new Port((new PortMeta())->setName(self::$ENTRY_POINT_KEY)->setType(VariableTypes::$STRING_TYPE)),
47-
new Port(
48-
(new PortMeta())->setName(self::$EXTRA_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
49-
),
50-
);
51-
self::$defaultOutputPorts = array(
52-
new Port((new PortMeta())->setName(self::$STDOUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
53-
new Port((new PortMeta())->setName(self::$OUTPUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE))
54-
);
37+
self::$defaultInputPorts = Box::constructPorts([
38+
self::$BINARY_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
39+
self::$SOURCE_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
40+
self::$STDIN_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
41+
self::$INPUT_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
42+
self::$ENTRY_POINT_KEY => VariableTypes::$STRING_TYPE,
43+
self::$EXTRA_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
44+
self::$SUCCESS_EXIT_CODES_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
45+
]);
46+
self::$defaultOutputPorts = Box::constructPorts([
47+
self::$STDOUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
48+
self::$OUTPUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
49+
]);
5550
}
5651
}
5752

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/JvmRunBox.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public static function init()
4343
self::$JAR_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
4444
self::$RUNNER_EXEC_PORT_KEY => VariableTypes::$STRING_TYPE,
4545
self::$CLASSPATH_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
46+
self::$SUCCESS_EXIT_CODES_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
4647
]);
4748
self::$defaultOutputPorts = Box::constructPorts([
4849
self::$STDOUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/ScriptExecutionBox.php

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,28 +33,21 @@ public static function init()
3333
{
3434
if (!self::$initialized) {
3535
self::$initialized = true;
36-
self::$defaultInputPorts = array(
37-
new Port(
38-
(new PortMeta())->setName(self::$SOURCE_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
39-
),
40-
new Port((new PortMeta())->setName(self::$ARGS_PORT_KEY)->setType(VariableTypes::$STRING_ARRAY_TYPE)),
41-
new Port((new PortMeta())->setName(self::$STDIN_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
42-
new Port(
43-
(new PortMeta())->setName(self::$INPUT_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
44-
),
45-
new Port((new PortMeta())->setName(self::$ENTRY_POINT_KEY)->setType(VariableTypes::$FILE_TYPE)),
46-
new Port(
47-
(new PortMeta())->setName(self::$EXTRA_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
48-
),
49-
new Port((new PortMeta())->setName(self::$RUNTIME_PATH_PORT_KEY)->setType(VariableTypes::$STRING_TYPE)),
50-
new Port(
51-
(new PortMeta())->setName(self::$RUNTIME_ARGS_PORT_KEY)->setType(VariableTypes::$STRING_ARRAY_TYPE)
52-
),
53-
);
54-
self::$defaultOutputPorts = array(
55-
new Port((new PortMeta())->setName(self::$STDOUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
56-
new Port((new PortMeta())->setName(self::$OUTPUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE))
57-
);
36+
self::$defaultInputPorts = Box::constructPorts([
37+
self::$SOURCE_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
38+
self::$ARGS_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
39+
self::$STDIN_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
40+
self::$INPUT_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
41+
self::$ENTRY_POINT_KEY => VariableTypes::$FILE_TYPE,
42+
self::$EXTRA_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
43+
self::$RUNTIME_PATH_PORT_KEY => VariableTypes::$STRING_TYPE,
44+
self::$RUNTIME_ARGS_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
45+
self::$SUCCESS_EXIT_CODES_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
46+
]);
47+
self::$defaultOutputPorts = Box::constructPorts([
48+
self::$STDOUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
49+
self::$OUTPUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE
50+
]);
5851
}
5952
}
6053

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/WrappedExecutionBox.php

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,19 @@ public static function init()
3434
{
3535
if (!self::$initialized) {
3636
self::$initialized = true;
37-
self::$defaultInputPorts = array(
38-
new Port((new PortMeta())->setName(self::$ARGS_PORT_KEY)->setType(VariableTypes::$STRING_ARRAY_TYPE)),
39-
new Port((new PortMeta())->setName(self::$STDIN_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
40-
new Port(
41-
(new PortMeta())->setName(self::$INPUT_FILES_PORT_KEY)->setType(VariableTypes::$FILE_ARRAY_TYPE)
42-
),
43-
new Port((new PortMeta())->setName(self::$BINARY_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
44-
new Port((new PortMeta())->setName(self::$RUNTIME_PATH_PORT_KEY)->setType(VariableTypes::$STRING_TYPE)),
45-
new Port(
46-
(new PortMeta())->setName(self::$RUNTIME_ARGS_PORT_KEY)->setType(VariableTypes::$STRING_ARRAY_TYPE)
47-
),
48-
);
49-
self::$defaultOutputPorts = array(
50-
new Port((new PortMeta())->setName(self::$STDOUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE)),
51-
new Port((new PortMeta())->setName(self::$OUTPUT_FILE_PORT_KEY)->setType(VariableTypes::$FILE_TYPE))
52-
);
37+
self::$defaultInputPorts = Box::constructPorts([
38+
self::$ARGS_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
39+
self::$STDIN_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
40+
self::$INPUT_FILES_PORT_KEY => VariableTypes::$FILE_ARRAY_TYPE,
41+
self::$BINARY_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
42+
self::$RUNTIME_PATH_PORT_KEY => VariableTypes::$STRING_TYPE,
43+
self::$RUNTIME_ARGS_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
44+
self::$SUCCESS_EXIT_CODES_PORT_KEY => VariableTypes::$STRING_ARRAY_TYPE,
45+
]);
46+
self::$defaultOutputPorts = Box::constructPorts([
47+
self::$STDOUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
48+
self::$OUTPUT_FILE_PORT_KEY => VariableTypes::$FILE_TYPE,
49+
]);
5350
}
5451
}
5552

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/base/CompilationBox.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ abstract class CompilationBox extends Box
2626
public static $EXTRA_FILES_PORT_KEY = "extra-files";
2727
public static $RUNNER_FILE_PORT_KEY = "runner";
2828
public static $COMPILER_EXEC_PATH_PORT_KEY = "compiler-exec-path";
29-
public static $EXISTS_FAILED_MSG = "Compilation process was completed correctly but no executable file was yielded. Unable to proceed with testing.";
29+
public static $EXISTS_FAILED_MSG =
30+
"Compilation process completed correctly but no executable file was yielded. Unable to proceed with testing.";
3031

3132

3233
/**

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/base/DataInBox.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
abstract class DataInBox extends Box
2121
{
22-
2322
/**
2423
* If data for this box is remote, fill this with the right variable reference.
2524
* @var ?Variable

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/base/ExecutionBox.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ abstract class ExecutionBox extends Box
3030
public static $ENTRY_POINT_KEY = "entry-point";
3131
public static $EXTRA_FILES_PORT_KEY = "extra-files";
3232
public static $BINARY_FILE_PORT_KEY = "binary-file";
33+
public static $SUCCESS_EXIT_CODES_PORT_KEY = "success-exit-codes";
3334

3435

3536
/**
@@ -86,6 +87,18 @@ protected function compileBaseTask(CompilationParams $params): Task
8687

8788
$task->setSandboxConfig($sandbox);
8889

90+
if ($this->hasInputPortValue(self::$SUCCESS_EXIT_CODES_PORT_KEY)) {
91+
$codes = $this->getInputPortValue(self::$SUCCESS_EXIT_CODES_PORT_KEY)->getValue();
92+
foreach ($codes as &$code) {
93+
$code = trim($code);
94+
if (preg_match('/^(?<from>[0-9]+)\s*-+\s*(?<to>[0-9]+)$/', $code, $matches)) {
95+
// convert string range representation ('from-to') into tuple of ints [from, to]
96+
$code = [ (int)$matches['from'], (int)$matches['to'] ];
97+
}
98+
}
99+
$task->setSuccessExitCodes($codes);
100+
}
101+
89102
return $task;
90103
}
91104
}

app/helpers/ExerciseConfig/Pipeline/Box/Boxes/base/FetchBox.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
abstract class FetchBox extends Box
2121
{
22-
2322
/**
2423
* DataInBox constructor.
2524
* @param BoxMeta $meta

0 commit comments

Comments
 (0)