From c87145fe90ca82fa5dcd1dcd161a7f2d0f0929ba Mon Sep 17 00:00:00 2001 From: JonJagger Date: Wed, 25 Feb 2026 06:41:11 +0000 Subject: [PATCH] Restore file-size ulimit --- source/server/runner.rb | 13 +- .../languages_start_points.manifests.json | 112 ++++++------------ test/server/check_test_metrics.rb | 8 +- test/server/run_csharp_reqnroll_fsize_test.rb | 31 ----- 4 files changed, 43 insertions(+), 121 deletions(-) delete mode 100644 test/server/run_csharp_reqnroll_fsize_test.rb diff --git a/source/server/runner.rb b/source/server/runner.rb index 93792f47..d7c5d62a 100644 --- a/source/server/runner.rb +++ b/source/server/runner.rb @@ -189,12 +189,12 @@ def docker_run_cyber_dojo_sh_command(id, image_name, container_name) def ulimits(image_name) # [0] We could allow cores as binary files are not tar piped out of the container. # [1] The nproc --limit is per user across all containers. See - # [2] Some start-points have large DLL files # https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit # There is no cpu-ulimit. See # https://github.com/cyber-dojo-retired/runner-stateless/issues/2 options = [ ulimit('core', 0), # no core file [0] + ulimit('fsize', 256 * MB), # file size ulimit('locks', 1024), # number of file locks ulimit('nofile', 1024), # number of files ulimit('nproc', 1024), # number of processes [1] @@ -212,13 +212,6 @@ def ulimits(image_name) ulimit('data', 4 * GB) # data segment size end - # C# reqnroll creates very large files [2] - options << if csharp_reqnroll?(image_name) - ulimit('fsize', 2048 * GB) # file size - else - ulimit('fsize', 256 * MB) # file size - end - options.join(SPACE) end @@ -231,10 +224,6 @@ def clang?(image_name) image_name.start_with?('ghcr.io/cyber-dojo-languages/clang') end - def csharp_reqnroll?(image_name) - image_name.start_with?('ghcr.io/cyber-dojo-languages/csharp_reqnroll') - end - # - - - - - - - - - - - - - - - - - - - - - - # temporary file systems # - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/data/languages_start_points.manifests.json b/test/data/languages_start_points.manifests.json index 84818869..6df9cace 100644 --- a/test/data/languages_start_points.manifests.json +++ b/test/data/languages_start_points.manifests.json @@ -28,26 +28,6 @@ } } }, - "BCPL, all_tests_passed": { - "display_name": "BCPL, all_tests_passed", - "filename_extension": [ - ".b" - ], - "image_name": "cyberdojofoundation/bcpl_all_tests_passed:cb2166b", - "max_seconds": 10, - "tab_size": 4, - "visible_files": { - "cyber-dojo.sh": { - "content": ". /distribution/BCPL/cintcode/os/linux/setbcplenv\ncintsys -c \"bcpl hiker.test.b to test\"\ncintsys -c \"test\"\n" - }, - "hiker.b": { - "content": "\nLET answer() = VALOF\n{ RESULTIS 6 * 9\n}" - }, - "hiker.test.b": { - "content": "\nGET \"hiker.b\"\nGET \"libhdr\"\n\nLET assert.int.equal(expected,actual,message) BE\n{ IF expected ~= actual DO\n {\n LET brk = 2\n writef(\"assert.int.equal FAILED: %s*N\", message)\n writef(\"expected: %n*N\", expected)\n writef(\" actual: %n*N\", actual);\n abort(brk)\n }\n}\n\nLET life.the.universe.and.everything() BE\n{ assert.int.equal(42, answer(), \"answer() = 42\")\n}\n\nLET start() BE\n{ life.the.universe.and.everything()\n writef(\"All tests passed\")\n}\n" - } - } - }, "Bash 5.3.3, bash_unit 2.3.3": { "display_name": "Bash 5.3.3, bash_unit 2.3.3", "filename_extension": [ @@ -76,7 +56,8 @@ "filename_extension": [ ".sh" ], - "image_name": "ghcr.io/cyber-dojo-languages/bash_bats:b9de85d", + "image_name": "ghcr.io/cyber-dojo-languages/bash_bats:cc4f391", + "rag_lambda": "lambda { |stdout,stderr,status|\n output = stdout + stderr\n return :green if status === 0\n return :amber if /.*: line \\d+:/.match(output) && status === 1\n return :red\n}\n", "tab_size": 4, "visible_files": { "bats_help.txt": { @@ -300,46 +281,49 @@ } } }, - "C# 10.0.103, NUnit 4.3.2": { - "display_name": "C# 10.0.103, NUnit 4.3.2", + "C# 10.0.103, Moq 4.20.72": { + "display_name": "C# 10.0.103, Moq 4.20.72", "filename_extension": [ ".cs" ], - "image_name": "ghcr.io/cyber-dojo-languages/csharp_nunit:80e3fae", + "image_name": "ghcr.io/cyber-dojo-languages/csharp_moq:40d9862", "max_seconds": 15, "tab_size": 4, "visible_files": { - "Hiker.cs": { - "content": "public class Hiker\n{\n public static int Answer()\n {\n return 6 * 9;\n }\n}\n" - }, "HikerTest.cs": { - "content": "using NUnit.Framework;\n\npublic class HikerTest\n{\n [Test]\n public void life_the_universe_and_everything()\n {\n // a simple example to start you off\n Assert.That(Hiker.Answer(), Is.EqualTo(42));\n }\n}\n" + "content": "using Moq;\nusing NUnit.Framework;\n\n[TestFixture]\npublic class HikerTest\n{\n [Test]\n public void life_the_universe_and_everything()\n {\n var arthur = new Mock();\n arthur.Setup((foo => foo.Answer())).Returns(6 * 9);\n\n // a simple example to start you off\n Assert.That(arthur.Object.Answer(), Is.EqualTo(42));\n\n }\n}\n" + }, + "IHiker.cs": { + "content": "\npublic interface IHiker\n{\n int Answer();\n}\n" }, "cyber-dojo.sh": { - "content": "# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\n\nfunction cyber_dojo_enter()\n{\n : # 1. Only return _newly_ generated reports.\n #cyber_dojo_reset_dirs ${...}\n}\nfunction cyber_dojo_exit()\n{\n : # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs /sandbox/bin \n cyber_dojo_delete_dirs /sandbox/obj\n #cyber_dojo_delete_files ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n\ndotnet restore --source /home/sandbox/.nuget/packages/\ndotnet test --no-restore\n" + "content": "\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\n\nfunction cyber_dojo_exit()\n{\n : # ...Remove files we don't want returned.\n cyber_dojo_delete_dirs /sandbox/bin \n cyber_dojo_delete_dirs /sandbox/obj\n #cyber_dojo_delete_files ...\n}\ntrap cyber_dojo_exit EXIT SIGTERM\n\ndotnet restore --source /home/sandbox/.nuget/packages/\ndotnet test --no-restore --nologo\n" }, "dojo.csproj": { - "content": "\n\n \n net10.0\n latest\n enable\n enable\n false\n \n\n \n \n \n \n \n \n \n\n \n \n \n\n" + "content": "\n\n \n net10.0\n latest\n enable\n enable\n false\n \n\n \n \n \n \n \n \n \n \n\n \n \n \n\n" } } }, - "C#, Moq": { - "display_name": "C#, Moq", + "C# 10.0.103, NUnit 4.3.2": { + "display_name": "C# 10.0.103, NUnit 4.3.2", "filename_extension": [ ".cs" ], - "image_name": "cyberdojofoundation/csharp_moq:368990c", - "max_seconds": 10, + "image_name": "ghcr.io/cyber-dojo-languages/csharp_nunit:80e3fae", + "max_seconds": 15, "tab_size": 4, "visible_files": { - "HikerTest.cs": { - "content": "using Moq;\nusing NUnit.Framework;\n\n[TestFixture]\npublic class HikerTest\n{\n [Test]\n public void life_the_universe_and_everything()\n {\n var arthur = new Mock();\n arthur.Setup((foo => foo.Answer())).Returns(6 * 9);\n\n // a simple example to start you off\n Assert.AreEqual(42, arthur.Object.Answer());\n }\n}\n" + "Hiker.cs": { + "content": "public class Hiker\n{\n public static int Answer()\n {\n return 6 * 9;\n }\n}\n" }, - "IHiker.cs": { - "content": "\npublic interface IHiker\n{\n int Answer();\n}\n" + "HikerTest.cs": { + "content": "using NUnit.Framework;\n\npublic class HikerTest\n{\n [Test]\n public void life_the_universe_and_everything()\n {\n // a simple example to start you off\n Assert.That(Hiker.Answer(), Is.EqualTo(42));\n }\n}\n" }, "cyber-dojo.sh": { - "content": "\ntrap tidy_up EXIT\nfunction tidy_up()\n{\n # cyber-dojo returns text files under /sandbox that are\n # created/deleted/changed. In here you can remove any\n # such files you don't want returned to the browser.\n [ ! -f TestResult.xml ] || rm TestResult.xml\n}\n\nMOQ_PATH=/moq/Moq.4.7.99/lib/net45\nCASTLE_PATH=/moq/Castle.Core.4.1.1/lib/net45\nNUNIT_PATH=/moq/lib/net45\n\nexport MONO_PATH=${MOQ_PATH}:${CASTLE_PATH}:${NUNIT_PATH}\n\nmcs -t:library \\\n -r:${MOQ_PATH}/Moq.dll \\\n -r:${CASTLE_PATH}/Castle.Core.dll \\\n -r:${NUNIT_PATH}/nunit.framework.dll \\\n -out:RunTests.dll *.cs\n\nif [ $? -eq 0 ]; then\n NUNIT_RUNNERS_PATH=/moq/tools\n mono ${NUNIT_RUNNERS_PATH}/nunit3-console.exe --noheader ./RunTests.dll\nfi\n" + "content": "# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\n\nfunction cyber_dojo_enter()\n{\n : # 1. Only return _newly_ generated reports.\n #cyber_dojo_reset_dirs ${...}\n}\nfunction cyber_dojo_exit()\n{\n : # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs /sandbox/bin \n cyber_dojo_delete_dirs /sandbox/obj\n #cyber_dojo_delete_files ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n\ndotnet restore --source /home/sandbox/.nuget/packages/\ndotnet test --no-restore --nologo\n" + }, + "dojo.csproj": { + "content": "\n\n \n net10.0\n latest\n enable\n enable\n false\n \n\n \n \n \n \n \n \n \n\n \n \n \n\n" } } }, @@ -852,26 +836,6 @@ } } }, - "Chapel, assert": { - "display_name": "Chapel, assert", - "filename_extension": [ - ".chpl" - ], - "image_name": "cyberdojofoundation/chapel_assert:10efc4b", - "max_seconds": 20, - "tab_size": 2, - "visible_files": { - "cyber-dojo.sh": { - "content": "chpl -o run_tests *.chpl && ./run_tests\n" - }, - "hiker.chpl": { - "content": "\nproc answer() {\n return 6 * 9;\n}\n" - }, - "hikerTest.chpl": { - "content": "use hiker;\n\nproc lifeTheUniverseAndEverything() {\n assert(answer() == 42);\n}\n\nproc greenTrafficLightPattern() {\n return \"All tests passed\";\n}\n\nproc main() {\n lifeTheUniverseAndEverything();\n writeln(greenTrafficLightPattern());\n}\n" - } - } - }, "Clojure, Midje": { "display_name": "Clojure, Midje", "filename_extension": [ @@ -987,12 +951,12 @@ } } }, - "Erlang, eunit": { - "display_name": "Erlang, eunit", + "Erlang 27, eunit": { + "display_name": "Erlang 27, eunit", "filename_extension": [ ".erl" ], - "image_name": "cyberdojofoundation/erlang_eunit:d3860fc", + "image_name": "ghcr.io/cyber-dojo-languages/erlang_eunit:3ce3b72", "max_seconds": 10, "tab_size": 2, "visible_files": { @@ -1821,12 +1785,12 @@ } } }, - "R, RUnit": { - "display_name": "R, RUnit", + "R 4.3.3, RUnit 0.4.33.1": { + "display_name": "R 4.3.3, RUnit 0.4.33.1", "filename_extension": [ ".R" ], - "image_name": "cyberdojofoundation/r_runit:7b1a16f", + "image_name": "ghcr.io/cyber-dojo-languages/r_runit:9129af4", "max_seconds": 10, "tab_size": 4, "visible_files": { @@ -1879,7 +1843,7 @@ "tab_size": 2, "visible_files": { "coverage.rb": { - "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new('', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"Approval\")\nSimpleCov.at_exit do\n # Only create coverage report on green traffic-light\n if SimpleCov.exit_status_from_exception === 0\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" + "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new(+'', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"Approval\")\nSimpleCov.at_exit do\n # Only create coverage report on green traffic-light\n if SimpleCov.exit_status_from_exception === 0\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" }, "cyber-dojo.sh": { "content": "set -e\n\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\nfunction cyber_dojo_enter()\n{\n # 1. Only return _newly_ generated reports.\n cyber_dojo_reset_dirs ${REPORT_DIR}\n}\nfunction cyber_dojo_exit()\n{\n # 2. Remove text dirs/files we don't want returned.\n cyber_dojo_delete_dirs coverage # ...\n cyber_dojo_delete_files .approvals # ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# turn off colour for new coverage report\nexport NO_COLOR=1\n\n# Test output can be formatted as progress or documentation\nrspec . \\\n --format progress \\\n --no-color\n" @@ -1909,7 +1873,7 @@ "tab_size": 2, "visible_files": { "coverage.rb": { - "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new('', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"Cucumber\")\nSimpleCov.at_exit do\n # Only create coverage report on green traffic-light\n if SimpleCov.exit_status_from_exception === 0\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" + "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new(+'', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"Cucumber\")\nSimpleCov.at_exit do\n # Only create coverage report on green traffic-light\n if SimpleCov.exit_status_from_exception === 0\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" }, "cyber-dojo.sh": { "content": "set -e\n\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\nfunction cyber_dojo_enter()\n{\n # 1. Only return _newly_ generated reports.\n cyber_dojo_reset_dirs ${REPORT_DIR}\n}\nfunction cyber_dojo_exit()\n{\n # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs coverage # ...\n # cyber_dojo_delete_files # ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# turn off colour in report/coverage.txt\nexport NO_COLOR=1\n\n# -r option has to be specified for each named file\nREQUIRES=\"\"\nfor file in *_steps.rb; do\n REQUIRES+=\" -r ${file}\"\ndone\n\nexport CUCUMBER_PUBLISH_QUIET=true\n\n# Test output can be formatted as progress or documentation\ncucumber --format progress . ${REQUIRES}\n" @@ -1934,7 +1898,7 @@ "tab_size": 2, "visible_files": { "coverage.rb": { - "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\n$exception_raised = false\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n unless amber_traffic_light?\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n end\n def amber_traffic_light?\n $exception_raised\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new('', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"MiniTest\")\nSimpleCov.formatter = SimpleCov::Formatter::FileWriter\nSimpleCov.start\n\nat_exit do\n # Can't use SimpleCov.at_exit; when the call reaches\n # FileWriter.format() there is no longer an exception\n # I'd like to only write the coverage report if the\n # traffic-light is green but it seems there is no way.\n $exception_raised = true\nend\n" + "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\n$exception_raised = false\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n unless amber_traffic_light?\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n end\n def amber_traffic_light?\n $exception_raised\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new(+'', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"MiniTest\")\nSimpleCov.formatter = SimpleCov::Formatter::FileWriter\nSimpleCov.start\n\nat_exit do\n # Can't use SimpleCov.at_exit; when the call reaches\n # FileWriter.format() there is no longer an exception\n # I'd like to only write the coverage report if the\n # traffic-light is green but it seems there is no way.\n $exception_raised = true\nend\n" }, "cyber-dojo.sh": { "content": "set -e\n\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\nfunction cyber_dojo_enter()\n{\n # 1. Only return _newly_ generated reports.\n cyber_dojo_reset_dirs ${REPORT_DIR}\n}\nfunction cyber_dojo_exit()\n{\n # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs coverage # ...\n #cyber_dojo_delete_files ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# turn off colour for new coverage report\nexport NO_COLOR=1\n\nfor test_file in *test*.rb\ndo\n ruby $test_file || true\ndone\n" @@ -1957,7 +1921,7 @@ "tab_size": 2, "visible_files": { "coverage.rb": { - "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new('', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"RSpec\")\nSimpleCov.at_exit do\n # Only create coverage report on green traffic-light\n if SimpleCov.exit_status_from_exception === 0\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" + "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new(+'', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name(\"RSpec\")\nSimpleCov.at_exit do\n # Only create coverage report on green traffic-light\n if SimpleCov.exit_status_from_exception === 0\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" }, "cyber-dojo.sh": { "content": "set -e\n\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\nfunction cyber_dojo_enter()\n{\n # 1. Only return _newly_ generated reports.\n cyber_dojo_reset_dirs ${REPORT_DIR}\n}\nfunction cyber_dojo_exit()\n{\n # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs coverage # ...\n # cyber_dojo_delete_files # ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# turn off colour for new coverage report\nexport NO_COLOR=1\n\n# Test output can be formatted as progress or documentation\nrspec . \\\n --format progress \\\n --no-color\n" @@ -1980,7 +1944,7 @@ "tab_size": 2, "visible_files": { "coverage.rb": { - "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new('', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name \"Test::Unit\"\nSimpleCov.at_exit do\n # I'd like to only write the coverage report if the\n # traffic-light is green but it seems there is no way.\n if $!.is_a?(SystemExit) # !amber-traffic-light\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" + "content": "require 'simplecov'\nrequire 'simplecov-console'\nrequire 'stringio'\n\nmodule SimpleCov\n module Formatter\n class FileWriter\n def format(result)\n stdout = capture_stdout {\n SimpleCov::Formatter::Console.new.format(result)\n }\n `mkdir #{report_dir} 2> /dev/null`\n IO.write(\"#{report_dir}/coverage.txt\", stdout)\n end\n def report_dir\n \"#{ENV['CYBER_DOJO_SANDBOX']}/report\"\n end\n def capture_stdout\n begin\n uncaptured_stdout = $stdout\n captured_stdout = StringIO.new(+'', 'w')\n $stdout = captured_stdout\n yield\n $stdout.string\n ensure\n $stdout = uncaptured_stdout\n end\n end\n end\n end\nend\n\nSimpleCov.command_name \"Test::Unit\"\nSimpleCov.at_exit do\n # I'd like to only write the coverage report if the\n # traffic-light is green but it seems there is no way.\n if $!.is_a?(SystemExit) # !amber-traffic-light\n SimpleCov::Formatter::FileWriter.new.format(SimpleCov.result)\n end\nend\nSimpleCov.start\n" }, "cyber-dojo.sh": { "content": "set -e\n\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\nfunction cyber_dojo_enter()\n{\n # 1. Only return _newly_ generated reports.\n cyber_dojo_reset_dirs ${REPORT_DIR}\n}\nfunction cyber_dojo_exit()\n{\n # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs coverage # ...\n #cyber_dojo_delete_files ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# turn off colour for new coverage report\nexport NO_COLOR=1\n\nfor test_file in *test*.rb\ndo\n ruby $test_file || true\ndone\n" @@ -2157,17 +2121,17 @@ } } }, - "jq 1.7.1, approvals": { - "display_name": "jq 1.7.1, approvals", + "jq 1.8.1, approvals": { + "display_name": "jq 1.8.1, approvals", "filename_extension": [ ".jq" ], - "image_name": "ghcr.io/cyber-dojo-languages/jq_approvals:fd90648", + "image_name": "ghcr.io/cyber-dojo-languages/jq_approvals:6dbf401", "max_seconds": 10, "tab_size": 4, "visible_files": { "cyber-dojo.sh": { - "content": "\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\nfunction cyber_dojo_enter()\n{\n# 1. Only return _newly_ generated reports.\ncyber_dojo_reset_dirs ${REPORT_DIR}\n}\nfunction cyber_dojo_exit()\n{\n# 2. Remove text files we don't want returned.\ncyber_dojo_delete_dirs .pytest_cache # ...\n#cyber_dojo_delete_files ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# Verify the JQ inputs for validity/correctness\nsource /jq/verify-jq.sh\nmain\n" + "content": "\n# --------------------------------------------------------------\n# Text files under /sandbox are automatically returned...\nsource ~/cyber_dojo_fs_cleaners.sh\nexport REPORT_DIR=${CYBER_DOJO_SANDBOX}/report\n\nfunction cyber_dojo_enter()\n{\n # 1. Only return _newly_ generated reports.\n cyber_dojo_reset_dirs ${REPORT_DIR}\n}\n\nfunction cyber_dojo_exit()\n{\n # 2. Remove text files we don't want returned.\n cyber_dojo_delete_dirs .pytest_cache # ...\n #cyber_dojo_delete_files ...\n}\ncyber_dojo_enter\ntrap cyber_dojo_exit EXIT SIGTERM\n# --------------------------------------------------------------\n\n# Verify the JQ inputs for validity/correctness\nsource /jq/verify-jq.sh\nmain\n" }, "hiker.jq": { "content": "def answer:\n 6 * 9;\n" diff --git a/test/server/check_test_metrics.rb b/test/server/check_test_metrics.rb index f61215a3..7bd3e620 100644 --- a/test/server/check_test_metrics.rb +++ b/test/server/check_test_metrics.rb @@ -25,21 +25,21 @@ def table_data [ [ nil ], - [ 'test.count', stats['test_count'], '>=', 104 ], + [ 'test.count', stats['test_count'], '>=', 103 ], [ 'test.duration', stats['total_time'], '<=', 10 ], [ nil ], [ 'test.failures', stats['failure_count'], '<=', 0 ], [ 'test.errors', stats['error_count' ], '<=', 0 ], [ 'test.skips', stats['skip_count' ], '<=', 0 ], [ nil ], - [ 'test.lines.total', test_cov['lines' ]['total' ], '<=', 975 ], + [ 'test.lines.total', test_cov['lines' ]['total' ], '<=', 957 ], [ 'test.lines.missed', test_cov['lines' ]['missed'], '<=', 0 ], [ 'test.branches.total', test_cov['branches']['total' ], '<=', 0 ], [ 'test.branches.missed', test_cov['branches']['missed'], '<=', 0 ], [ nil ], - [ 'code.lines.total', code_cov['lines' ]['total' ], '<=', 569 ], + [ 'code.lines.total', code_cov['lines' ]['total' ], '<=', 564 ], [ 'code.lines.missed', code_cov['lines' ]['missed'], '<=', 0 ], - [ 'code.branches.total', code_cov['branches']['total' ], '<=', 72 ], + [ 'code.branches.total', code_cov['branches']['total' ], '<=', 70 ], [ 'code.branches.missed', code_cov['branches']['missed'], '<=', 0 ], ] end diff --git a/test/server/run_csharp_reqnroll_fsize_test.rb b/test/server/run_csharp_reqnroll_fsize_test.rb deleted file mode 100644 index 70182a1d..00000000 --- a/test/server/run_csharp_reqnroll_fsize_test.rb +++ /dev/null @@ -1,31 +0,0 @@ -require_relative '../test_base' - -class RunCSharpReqnRollFSizeTest < TestBase - - test 'Ea3d93', %w[ - csharp_reqnroll image requires very large ulimit file-size - ] do - stdout_tgz = TGZ.of({ 'stderr' => 'any' }) - set_context( - logger: StdoutLoggerSpy.new, - piper: piper = PipeMakerStub.new(stdout_tgz), - process: process = ProcessSpawnerStub.new - ) - image_name = "ghcr.io/cyber-dojo-languages/csharp_reqnroll:1234567" - puller.add(image_name) - command = nil - process.spawn { |cmd| command = cmd } - process.detach { ThreadValueStub.new(42) } - process.kill {} - - run_cyber_dojo_sh({ :image_name => image_name }) - - name = 'fsize' - limit = 2048 * GB - assert command.include?("--ulimit #{name}=#{limit}"), command - end -end - -KB = 1024 -MB = 1024 * KB -GB = 1024 * MB