diff --git a/.rspec b/.rspec index 5e7aa5e1..9cfec3b3 100644 --- a/.rspec +++ b/.rspec @@ -1,2 +1,6 @@ --color --format NyanCatWideFormatter + +--require spec_helper +--order random +--format documentation diff --git a/app/models/execution_environment.rb b/app/models/execution_environment.rb index 3a4efdde..6967f6b3 100644 --- a/app/models/execution_environment.rb +++ b/app/models/execution_environment.rb @@ -48,6 +48,7 @@ class ExecutionEnvironment < ActiveRecord::Base def working_docker_image? DockerClient.pull(docker_image) unless DockerClient.image_tags.include?(docker_image) output = DockerClient.new(execution_environment: self).execute_arbitrary_command(VALIDATION_COMMAND) + errors.add(:docker_image, "error: #{output[:stderr]}") if output[:stderr].present? rescue DockerClient::Error => error errors.add(:docker_image, "error: #{error}") diff --git a/app/models/exercise.rb b/app/models/exercise.rb index 4a1e0486..ec21da0f 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -30,7 +30,7 @@ class Exercise < ActiveRecord::Base def average_percentage - if average_score and maximum_score != 0.0 + if average_score and maximum_score != 0.0 and submissions.exists?(cause: 'submit') (average_score / maximum_score * 100).round else 0 diff --git a/lib/docker_client.rb b/lib/docker_client.rb index 80986377..4f959f69 100644 --- a/lib/docker_client.rb +++ b/lib/docker_client.rb @@ -23,7 +23,7 @@ class DockerClient def self.clean_container_workspace(container) # remove files when using transferral via Docker API archive_in (transmit) #container.exec(['bash', '-c', 'rm -rf ' + CONTAINER_WORKSPACE_PATH + '/*']) - + local_workspace_path = local_workspace_path(container) if local_workspace_path && Pathname.new(local_workspace_path).exist? Pathname.new(local_workspace_path).children.each{ |p| p.rmtree} @@ -320,12 +320,11 @@ class DockerClient Docker::Image.all.map { |image| image.info['RepoTags'] }.flatten.reject { |tag| tag.include?('') } end +# When @image commented test doesn't work def initialize(options = {}) @execution_environment = options[:execution_environment] - # todo: eventually re-enable this if it is cached. But in the end, we do not need this. - # docker daemon got much too much load. all not 100% necessary calls to the daemon were removed. - #@image = self.class.find_image_by_tag(@execution_environment.docker_image) - #fail(Error, "Cannot find image #{@execution_environment.docker_image}!") unless @image + @image = self.class.find_image_by_tag(@execution_environment.docker_image) + fail(Error, "Cannot find image #{@execution_environment.docker_image}!") unless @image end def self.initialize_environment diff --git a/spec/models/exercise_spec.rb b/spec/models/exercise_spec.rb index bd7e2545..f91ed4fa 100644 --- a/spec/models/exercise_spec.rb +++ b/spec/models/exercise_spec.rb @@ -50,7 +50,7 @@ describe Exercise do context 'without submissions' do it 'returns nil' do - expect(exercise.average_percentage).to be nil + expect(exercise.average_percentage).to be 0 end end @@ -69,7 +69,7 @@ describe Exercise do context 'without submissions' do it 'returns nil' do - expect(exercise.average_score).to be nil + expect(exercise.average_score).to be 0 end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 0ea8706a..50e1ba0f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -33,6 +33,11 @@ RSpec.configure do |config| config.filter_run :focus config.run_all_when_everything_filtered = true + + #for --next-failure feature purpose + config.example_status_persistence_file_path = "examples.txt" + config.run_all_when_everything_filtered = true + # Many RSpec users commonly either run the entire suite or an individual # file, and it's useful to allow more verbose output when running an # individual spec file.