Commit Graph

419 Commits

Author SHA1 Message Date
3d3478d859 Test Adapters: Always use the last output for score runs
* This prevents learners from cheating by printing the required status line themselves
2021-11-02 15:52:49 +01:00
328055e6e8 DCP: previous_data match should be non-greedy 2021-11-01 17:13:15 +01:00
65fe1d902d DCP: Match java@hostname output 2021-11-01 17:13:15 +01:00
d16917261b Prevent inactivityTimeout from being smaller than permitted_execution_time 2021-11-01 17:13:14 +01:00
6ff14d6fc7 Connection Buffer: Replace \r in run and score output with \n 2021-11-01 17:13:14 +01:00
475aa8c512 DCP: Allow increasing the pool size when previously empty 2021-11-01 17:13:13 +01:00
eaa06ee528 DCP: Prevent double deletion of runner 2021-11-01 17:13:13 +01:00
6a902c41db DCP: Refactor container method and usage 2021-11-01 17:13:12 +01:00
537d8bfc95 DCP: Add handling of inactivity timer 2021-11-01 17:13:12 +01:00
dcafbb9d46 DCP: Change HTTP verbs 2021-11-01 17:13:12 +01:00
6209e25ee2 DCP: Move pool location to code_ocean.yml 2021-11-01 17:13:12 +01:00
7bb2ef8588 DCP: Forward data before matching stdout termination 2021-11-01 17:13:12 +01:00
dfdec92c6e Use ping option only for DCP WebSocket
* The Faye::WebSocket library will "buffer" some output of the connection and emit the `on :message` events in the order of the messages. However, when a ping is sent while the connection has already been closed, it will emit the `on :close` event immediately and drop all other messages (in that "buffer"). This is problematic for very short running executions that generate a long output (as this will be cut off without a proper exit message sent by Poseidon).
2021-11-01 17:13:11 +01:00
570809bfe9 Allow whitespace for JSON exit 2021-11-01 17:13:11 +01:00
4f1a7cde27 Add null strategy for runners
* This is the default strategy used when the runner management is disabled. It might be replaced with a generic Docker strategy in the future (without pooling). For now, it allows normal "operation" of CodeOcean without any runner management. However, as no runner system is configured, no command can be executed.
2021-11-01 17:13:10 +01:00
01ec9343cf Remove usage of DockerClient 2021-11-01 17:13:10 +01:00
20064b0715 DockerClient: Cleanup usage of config 2021-11-01 17:13:10 +01:00
b13a3b084d Use new available_images routes from DCP 2021-11-01 17:13:10 +01:00
2551ea709b Remove 'previous' DockerContainerPool implementation 2021-11-01 17:13:09 +01:00
9d833e37b3 Use Net::HTTP::Persistent for requests to Poseidon 2021-11-01 17:13:09 +01:00
ada438b230 Add release and pool_size methods to DCP 2021-11-01 17:13:07 +01:00
6d1b388e3c Reorder methods in strategy classes 2021-11-01 17:13:07 +01:00
e33af5760d Delegate initialization to Runner::Strategy 2021-11-01 17:13:07 +01:00
2b98905acb Remove usage of DockerClient from execution_environments_controller.rb 2021-11-01 17:13:07 +01:00
0db6f20933 Move MemoryLimit to Execution Environment 2021-11-01 17:13:06 +01:00
87c5302336 Switch logging to milliseconds and add more details
* By design, most logging happens in an `ensure` block. This ensures that no return value is modified unexpectedly.
2021-11-01 17:13:06 +01:00
e272fcd19c Add more comments and error logging to connection.rb 2021-11-01 17:13:04 +01:00
e95ad5e26c Add @!attribute comments to connection.rb 2021-11-01 17:13:04 +01:00
2ad4eb7625 DCP: Escape command for RegEx 2021-11-01 17:13:04 +01:00
68c8f1dbdf DCP: Set sticky bit for folder and secure delete 2021-11-01 17:13:04 +01:00
04c896c7de DCP: Listen for Python exit handler 2021-11-01 17:13:03 +01:00
c7ddbd676c Do not forward custom exit handlers to frontend 2021-11-01 17:13:03 +01:00
50b62b5703 Move flush_buffers method in Runner::Connection 2021-11-01 17:13:03 +01:00
696cd6a236 Poseidon: Clean workspace between executions 2021-11-01 17:13:03 +01:00
a6a477e361 Move error handling to else branch in execute_command 2021-11-01 17:13:03 +01:00
06ef4430f5 Change exposed_ports to array 2021-11-01 17:13:02 +01:00
345860c779 Adapt output buffering to Poseidon and DCP
* Refactor flushing of messages
* Introduce two separate buffers for stdout and stderr
2021-11-01 17:13:00 +01:00
1891cdd69c Add check whether buffer is empty 2021-11-01 17:13:00 +01:00
58e923abd8 Add custom websocket header to strategy class 2021-11-01 17:12:59 +01:00
08f36a0a7a Destroy runner at management in case of errors 2021-11-01 17:12:59 +01:00
788f6dba20 Specify TLS certificate for Faye::WebSocket::Client 2021-11-01 17:12:59 +01:00
a074a5cb0d Add buffering to output received from runner 2021-11-01 17:12:58 +01:00
3240ea7076 Forward input as raw_event to runner
* Also, rename #send to #send_data in order to prevent debugging issues in RubyMine
2021-11-01 17:12:58 +01:00
0f92526494 Remove outdated output callback from Runner::Connection 2021-11-01 17:12:58 +01:00
cc98dc2229 Split WebSocket event in multiple lines before processing 2021-11-01 17:12:58 +01:00
b51a45e9b1 Add token header option for requests to Poseidon 2021-11-01 17:12:57 +01:00
44395b7792 Add ca file option for requests to Poseidon 2021-11-01 17:12:56 +01:00
09b672eb08 DCP strategy: Use stdout for most test results 2021-11-01 17:12:56 +01:00
6c5a5226b8 Preserve locale during Runner::Connections 2021-11-01 17:12:56 +01:00
325720bd3b Improve documentation in Runner::Connection 2021-11-01 17:12:56 +01:00