describe Paraduct::ParallelRunner do describe "#perform_all" do subject{ Paraduct::ParallelRunner.perform_all(script, product_variables) } include_context :within_temp_work_dir # after do # puts `tree #{temp_dir}` # end shared_examples :create_job_directories do let(:job_dir) { temp_dir_path.join("tmp/paraduct_workspace/#{job_name}") } let(:copied_file){ job_dir.join("script/build_success.sh") } it { expect(job_dir).to be_exist } it { expect(copied_file).to be_exist } end describe "with script file test" do let(:script){ "./script/build_success.sh" } let(:product_variables) do [ { "ruby" => "1.9", "database" => "mysql" }, { "ruby" => "2.0", "database" => "postgresql" }, ] end it { should include "RUBY=1.9\nDATABASE=mysql\n" } it { should include "RUBY=2.0\nDATABASE=postgresql\n" } describe "should create job directories" do before do # exercise subject end it_behaves_like :create_job_directories do let(:job_name){ "RUBY_1.9_DATABASE_mysql" } end it_behaves_like :create_job_directories do let(:job_name){ "RUBY_2.0_DATABASE_postgresql" } end end end describe "without script file test" do let(:script){ %q(echo "RUBY=${RUBY} DATABASE=${DATABASE}") } let(:product_variables) do [ { "ruby" => "1.9", "database" => "mysql" }, { "ruby" => "2.0", "database" => "postgresql" }, ] end it { should include "RUBY=1.9 DATABASE=mysql\n" } it { should include "RUBY=2.0 DATABASE=postgresql\n" } describe "should create job directories" do before do # exercise subject end it_behaves_like :create_job_directories do let(:job_name){ "RUBY_1.9_DATABASE_mysql" } end it_behaves_like :create_job_directories do let(:job_name){ "RUBY_2.0_DATABASE_postgresql" } end end end end describe "#copy_recursive" do subject{ Paraduct::ParallelRunner.copy_recursive(source_dir, destination_dir) } include_context "uses temp dir" let(:source_dir) { temp_dir_path } let(:destination_dir){ temp_dir_path.join("tmp/paraduct_workspace/RUBY_1.9_DATABASE_mysql") } let(:copied_file) { destination_dir.join("build_success.sh") } let(:not_copied_file){ destination_dir.join("tmp/paraduct_workspace/dummy.txt") } before do # setup FileUtils.cp_r(spec_dir.join("script/tmp/paraduct_workspace"), source_dir) FileUtils.cp_r(spec_dir.join("script/build_success.sh"), source_dir) # exercise subject end # after do # puts `tree #{source_dir}` # end it { expect(destination_dir).to be_exist } it { expect(copied_file).to be_exist } it { expect(not_copied_file).not_to be_exist } end end