diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-04-02 03:38:32 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-04-02 03:38:32 +0900 |
commit | 21b3d2b0b222183031d00bdbe4ec12289cbf2d5d (patch) | |
tree | 4fbb9f8d65a15013b87263b33981fa45f3196164 /run_integration_test.rb | |
parent | 07259e0d46a7c4588a52574fa6d185fae50cce2c (diff) | |
download | kati-21b3d2b0b222183031d00bdbe4ec12289cbf2d5d.tar.gz |
Add a simple integration test runner
Diffstat (limited to 'run_integration_test.rb')
-rwxr-xr-x | run_integration_test.rb | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/run_integration_test.rb b/run_integration_test.rb new file mode 100755 index 0000000..c8110c6 --- /dev/null +++ b/run_integration_test.rb @@ -0,0 +1,107 @@ +#!/usr/bin/env ruby + +require 'fileutils' + +FileUtils.mkdir_p('repo') +Dir.chdir('repo') + +def check_command(cmd) + puts cmd + if !system(cmd) + puts "#{cmd} failed" + exit 1 + end +end + +class TestCase + attr_reader :name + + def initialize(name, checkout, prepare, clean, target) + @name = name + @checkout = checkout + @prepare = prepare + @clean = clean + @target = target + end + + def normalize_log(log) + log.gsub(/\s+/, '').split("\n").sort.join("\n") + end + + def run + @checkout.call(self) + + Dir.chdir(@name) do + @clean.call(self) + puts "Running make for #{@name}..." + system("make > make.log 2>&1") + + @clean.call(self) + puts "Running kati for #{@name}..." + system("../../kati > kati.log 2>&1") + + make_log = File.read('make.log') + kati_log = File.read('kati.log') + kati_log.gsub!(/^\*kati\*.*\n/, '') + + make_log = normalize_log(make_log) + kati_log = normalize_log(kati_log) + if make_log == kati_log + puts "#{@name}: OK" + return true + else + puts "#{@name}: FAIL" + return false + end + end + end +end + +class GitTestCase < TestCase + def initialize(name, repo, rev, prepare, clean, target) + checkout = Proc.new{|tc| + if !File.exist?(@name) + check_command("git clone #{repo}") + end + Dir.chdir(@name) { + check_command("git checkout #{rev}") + } + } + + super(name, checkout, prepare, clean, target) + end +end + +DO_NOTHING = Proc.new{|tc|} +MAKE_CLEAN = Proc.new{|tc| + check_command("make clean > /dev/null") +} + +TESTS = [ + GitTestCase.new('maloader', + 'https://github.com/shinh/maloader.git', + '5d125933bc6c141bed05c309c2dc0e14ada6f5c7', + DO_NOTHING, + MAKE_CLEAN, + nil) +] + +fails = [] +TESTS.each do |tc| + if !tc.run + fails << tc.name + end +end + +puts + +if fails.empty? + puts "PASS!" +else + puts "=== Failures ===" + fails.each do |n| + puts n + end + + puts "FAIL!" +end |