Execution Strategies - SoftUni-Internal/OpenJudgeSystem GitHub Wiki

What is an Execution Strategy?

Execution strategy in the context of Judge is a class that manages the way a submitted user code will be processed. Depending of the submission type, it sets the execution path a submission will follow, until it returns an execution result, from which the points will be calculated. For every different submission type, from simple block of C#, Java, JavaScript or other language code, to entire solution, database query or plain HTML and CSS, different execution strategy will be in charge of the way a submission is handled by the system.

How it works?

When a lecturer or admin creates a Problem he has to add a bunch of information for the specific problem, which information will be later used to create the "Execution context". The execution context contains information like the tests(input data, expected output, unit tests), memory limit, time limit, the submission type etc. When a user submits it's code or file, depending of the Submission Type, an Execution strategy of type IExecutionStrategy will be created and the submission will be handled by the concrete implementation of this interface by executing the user code under some restrictions and comparing the result to the tests or running the tests against this result, taking in concern the limitations provided from the Execution Context.

Execution Strategies in Open Judge System and their role


Strategies that compile the user code, give input and check the output against a predefined values.

  • CompileExecuteAndCheckExecutionStrategy C# code, C# project/solution | compiled by: MSBuild, executed by: MSBuild
  • DotNetCoreCompileExecuteAndCheckExecutionStrategy C# .NET Core code | compiled by: dotnet CLI, executed by: dotnet CLI
  • DotNetCoreProjectExecutionStrategy .NET Core Project | compiled by: dotnet CLI, executed by: dotnet CLI
  • CPlusPlusCompileExecuteAndCheckExecutionStrategy C++ code | compiled by: g++, executed by: g++
  • CPlusPlusZipFileExecutionStrategy C++ Zip File | compiled by: g++, executed by: g++
  • JavaPreprocessCompileExecuteAndCheck Java code | compiled by: javac, executed by: java.exe
  • JavaZipFileCompileExecuteAndCheck Java zip file | compiled by: javac, executed by: java.exe
  • NodeJsPreprocessExecuteAndCheck JavaScript code (NodeJS) | compiled by: , executed by: Node.js ...
    Dependencies
  • PythonExecuteAndCheck Python code | compiled by: , executed by: Python.exe
  • PhpCliExecuteAndCheck PHP code (CLI) | compiled by: , executed by: PHP CLI
  • PhpCgiExecuteAndCheck PHP code (CGI) | compiled by: , executed by: PHP CGI
  • PhpProjectExecutionStrategy PHP Project | compiled by: , executed by: PHP CLI
  • RubyExecutionStrategy Ruby Code | compiled by: , executed by: Ruby.exe

Strategies that execute predefined Unit tests against a submitted block of code.

Strategies that execute predefined Unit tests against a submitted binary solution.

  • CSharpProjectTestsExecutionStrategy C# Project Tests | compiled by: MSBuild, executed by: MSBuild
  • CSharpAspProjectTestsExecutionStrategy C# ASP Project Tests | compiled by: MSBuild, executed by: MSBuild
  • CSharpPerformanceProjectTestsExecutionStrategy C# Performance Project Tests | compiled by: MSBuild, executed by: MSBuild
  • DotNetCoreProjectTestsExecutionStrategy .NET Core Project Tests | compiled by: dotnet CLI, executed by: dotnet CLI
  • JavaProjectTestsExecutionStrategy Java Project Tests | compiled by: javac, executed by: java.exe
  • JavaSpringAndHibernateProjectExecutionStrategy Java Project (Spring + Hibernate) | compiled by: Maven, executed by: Maven
  • NodeJsZipPreprocessExecuteAndRunUnitTestsWithDomAndMocha JavaScript Zip File (DOM, Mocha and Module Transpiling) | compiled by: , executed by: Node.js ...
    Dependencies

Strategies that compile and execute unit tests from submitted binary solution against a predefined code

  • CSharpUnitTestsExecutionStrategy C# Unit Tests | compiled by: NUnit-Console, tests executed by: NUnit
  • JavaUnitTestsExecutionStrategy Java Unit Tests | compiled by: javac, tests executed by: JUnit
  • NodeJsPreprocessExecuteAndRunCodeAgainstUnitTestsWithMochaExecutionStrategy JavaScript code (Unit Tests with Sinon and Mocha) compiled by: , tests executed by: Sinon, Mocha

Other strategies

  • NodeJsZipExecuteHtmlAndCssStrategy HTML and CSS Zip File (DOM and Mocha) | compiled by: , executed by: Node.js
  • DotNetCoreTestRunner .NET Core Test Runner | compiled by: MSBuild, executed by: MSBuild
  • PhpProjectWithDbExecutionStrategy PHP Project with DB | compiled by: , executed by: PHP CLI

SQL Strategies

SQL Strategies that prepare database from test input query, run a submitted query on this database and check result against a predefined output

  • SqlServerLocalDbPrepareDatabaseAndRunQueriesExecutionStrategy SQL Server prepare DB & run queries
  • MySqlPrepareDatabaseAndRunQueriesExecutionStrategy MySQL prepare DB & run queries

SQL Strategies that prepare database from submitted skeleton or query, run a predefined query on this database and check result against a predefined output

  • SqlServerLocalDbRunQueriesAndCheckDatabaseExecutionStrategy SQL Server run queries & check DB
  • SqlServerLocalDbRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy SQL Server run skeleton, run queries & check DB
  • MySqlRunQueriesAndCheckDatabaseExecutionStrategy MySQL run queries & check DB
  • MySqlRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy MySQL run skeleton, run queries & check DB
⚠️ **GitHub.com Fallback** ⚠️