Skip to content

Commit

Permalink
Enable test helper for all
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexB52 committed Dec 8, 2024
1 parent 89b8f3f commit 47e0d39
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 60 deletions.
2 changes: 1 addition & 1 deletion bin/test/bundler-app
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ FOLDER="features/bundler-app"

bundle install
bundle exec rake build
# cp -R features/support features/bundler-app/retest
cp -R features/support features/bundler-app/retest features/bundler-app/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} "$FOLDER/retest.gem"

if [[ "$1" == "--no-build" ]]; then
Expand Down
2 changes: 1 addition & 1 deletion bin/test/git-ruby
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

bundle install
bundle exec rake build
# cp -R features/support features/git-ruby/retest
cp -R features/support features/bundler-app/retest features/git-ruby/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/git-ruby/retest.gem
docker compose -f features/git-ruby/docker-compose.yml up --build --exit-code-from retest
2 changes: 1 addition & 1 deletion bin/test/hanami-app
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

bundle install
bundle exec rake build
# cp -R features/support features/hanami-app/retest
cp -R features/support features/bundler-app/retest features/hanami-app/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/hanami-app/retest.gem
docker compose -f features/hanami-app/docker-compose.yml build
docker compose -f features/hanami-app/docker-compose.yml run retest sh bin/test_setup
Expand Down
2 changes: 1 addition & 1 deletion bin/test/rails-app
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

bundle install
bundle exec rake build
# cp -R features/support features/rails-app/retest
cp -R features/support features/bundler-app/retest features/rails-app/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/rails-app/retest.gem
docker compose -f features/rails-app/docker-compose.yml up --build --exit-code-from retest
2 changes: 1 addition & 1 deletion bin/test/rspec-rails
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

bundle install
bundle exec rake build
# cp -R features/support features/rspec-rails/retest
cp -R features/support features/bundler-app/retest features/rspec-rails/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/rspec-rails/retest.gem
docker compose -f features/rspec-rails/docker-compose.yml up --build --exit-code-from retest
2 changes: 1 addition & 1 deletion bin/test/rspec-ruby
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

bundle install
bundle exec rake build
# cp -R features/support features/rspec-ruby/retest
cp -R features/support features/bundler-app/retest features/rspec-ruby/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/rspec-ruby/retest.gem
docker compose -f features/rspec-ruby/docker-compose.yml up --build --exit-code-from retest
2 changes: 1 addition & 1 deletion bin/test/ruby-app
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

bundle install
bundle exec rake build
# cp -R features/support features/ruby-app/retest
cp -R features/support features/bundler-app/retest features/ruby-app/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/ruby-app/retest.gem
docker compose -f features/ruby-app/docker-compose.yml up --build --exit-code-from retest
2 changes: 1 addition & 1 deletion bin/test/ruby-bare
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

bundle install
bundle exec rake build
# cp -R features/support features/ruby-bare/retest
cp -R features/support features/bundler-app/retest features/ruby-bare/retest
ls -t pkg | head -n1 | xargs -I {} mv pkg/{} features/ruby-bare/retest.gem
docker compose -f features/ruby-bare/docker-compose.yml up --build --exit-code-from retest
21 changes: 0 additions & 21 deletions features/support/output_file.rb

This file was deleted.

98 changes: 67 additions & 31 deletions features/support/test_helper.rb
Original file line number Diff line number Diff line change
@@ -1,62 +1,98 @@
# Can be updated to all feature repositories with
# $ bin/test/reset_helpers

require_relative 'output_file'
module RetestHelper
# COMMAND
def launch_retest(command, sleep_for: Float(ENV.fetch('LAUNCH_SLEEP_SECONDS', 1.5)))
require 'open3'
@input, @output, @stderr, @wait_thr = Open3.popen3(command)
@pid = @wait_thr[:pid]
sleep sleep_for
end

module FileHelper
def default_sleep_seconds
Float(ENV.fetch('DEFAULT_SLEEP_SECONDS', 1))
def end_retest
@input&.close
@stderr&.close
@output&.close
@wait_thr.exit
end

def launch_sleep_seconds
Float(ENV.fetch('LAUNCH_SLEEP_SECONDS', 1.5))
# ASSERTIONS
def assert_output_matches(*expectations, max_retries: 5)
retries = 0
wait_for = 0.1
output = ""
begin
output += read_output
expectations.each { |expectation| assert_match(expectation, output) }
rescue Minitest::Assertion => e
raise e if retries >= max_retries
retries += 1
sleep_seconds = wait_for ** -(wait_for * retries)
sleep sleep_seconds
retry
end
end

def wait(sleep_seconds: default_sleep_seconds)
sleep sleep_seconds
# OUTPUT
def read_output(output = @output)
result = ""
loop do
result += output.read_nonblock(1024)
rescue IO::WaitReadable, EOFError
break
end

if block_given?
yield result
else
result
end
end

# INPUT
def write_input(command, input: @input, sleep_for: 0.1)
input.write(command)
wait(sleep_for)
end

def modify_file(path, sleep_seconds: default_sleep_seconds)
# FILE CHANGES
def modify_file(path, sleep_for: default_sleep_seconds)
return unless File.exist? path

old_content = File.read(path)
File.open(path, 'w') { |file| file.write old_content }

sleep sleep_seconds
wait(sleep_for)
end

def create_file(path, should_sleep: true, sleep_seconds: default_sleep_seconds)
File.open(path, "w").tap(&:close)

sleep sleep_seconds if should_sleep
def create_file(path, content: "", sleep_for: default_sleep_seconds)
File.open(path, "w") { |f| f.write(content) }
wait(sleep_for)
end

def delete_file(path)
def delete_file(path, sleep_for: 0)
return unless File.exist? path

File.delete path
wait(sleep_for)
end

def rename_file(path, new_path)
def rename_file(path, new_path, sleep_for: 0)
return unless File.exist? path

File.rename path, new_path
wait(sleep_for)
end
end

def launch_retest(command, sleep_seconds: launch_sleep_seconds)
@rd, @input = IO.pipe
@output = OutputFile.new
@pid = Process.spawn command, out: @output.path, in: @rd
sleep sleep_seconds
end
def default_sleep_seconds
Float(ENV.fetch('DEFAULT_SLEEP_SECONDS', 1))
end

def launch_sleep_seconds
Float(ENV.fetch('LAUNCH_SLEEP_SECONDS', 1.5))
end

def end_retest(file = nil, pid = nil)
@output&.delete
@rd&.close
@input&.close
if @pid
Process.kill('SIGHUP', @pid)
Process.detach(@pid)
def wait(sleep_for = default_sleep_seconds)
sleep sleep_for
end
end

0 comments on commit 47e0d39

Please sign in to comment.