Conflicts: spec/foreman/engine_spec.rb spec/foreman/export/bluepill_spec.rb spec/resources/export/bluepill/app.pill
87 lines
2.6 KiB
Ruby
87 lines
2.6 KiB
Ruby
require "spec_helper"
|
|
require "foreman/engine"
|
|
|
|
describe "Foreman::Engine" do
|
|
subject { Foreman::Engine.new("Procfile", {}) }
|
|
|
|
describe "initialize" do
|
|
describe "without an existing Procfile" do
|
|
it "raises an error" do
|
|
lambda { subject }.should raise_error
|
|
end
|
|
end
|
|
|
|
describe "with a Procfile" do
|
|
before { write_procfile }
|
|
|
|
it "reads the processes" do
|
|
subject.procfile["alpha"].command.should == "./alpha"
|
|
subject.procfile["bravo"].command.should == "./bravo"
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "start" do
|
|
it "forks the processes" do
|
|
write_procfile
|
|
mock.instance_of(Foreman::Process).run_process("./alpha", is_a(IO))
|
|
mock.instance_of(Foreman::Process).run_process("./bravo", is_a(IO))
|
|
mock(subject).watch_for_output
|
|
mock(subject).watch_for_termination
|
|
subject.start
|
|
end
|
|
|
|
it "handles concurrency" do
|
|
write_procfile
|
|
engine = Foreman::Engine.new("Procfile",:concurrency => "alpha=2")
|
|
mock.instance_of(Foreman::Process).run_process("./alpha", is_a(IO)).twice
|
|
mock.instance_of(Foreman::Process).run_process("./bravo", is_a(IO)).never
|
|
mock(engine).watch_for_output
|
|
mock(engine).watch_for_termination
|
|
engine.start
|
|
end
|
|
end
|
|
|
|
describe "environment" do
|
|
before(:each) do
|
|
write_procfile
|
|
stub(Process).fork
|
|
end
|
|
|
|
it "should read if specified" do
|
|
File.open("/tmp/env", "w") { |f| f.puts("FOO=baz") }
|
|
engine = Foreman::Engine.new("Procfile", :env => "/tmp/env")
|
|
stub(engine).info
|
|
mock(engine).spawn_processes
|
|
mock(engine).watch_for_termination
|
|
engine.environment.should == {"FOO"=>"baz"}
|
|
engine.start
|
|
end
|
|
|
|
it "should read more than one if specified" do
|
|
File.open("/tmp/env1", "w") { |f| f.puts("FOO=bar") }
|
|
File.open("/tmp/env2", "w") { |f| f.puts("BAZ=qux") }
|
|
engine = Foreman::Engine.new("Procfile", :env => "/tmp/env1,/tmp/env2")
|
|
stub(engine).info
|
|
mock(engine).spawn_processes
|
|
mock(engine).watch_for_termination
|
|
engine.environment.should == { "FOO"=>"bar", "BAZ"=>"qux" }
|
|
engine.start
|
|
end
|
|
|
|
it "should fail if specified and doesnt exist" do
|
|
mock.instance_of(Foreman::Engine).error("No such file: /tmp/env")
|
|
engine = Foreman::Engine.new("Procfile", :env => "/tmp/env")
|
|
end
|
|
|
|
it "should read .env if none specified" do
|
|
File.open(".env", "w") { |f| f.puts("FOO=qoo") }
|
|
engine = Foreman::Engine.new("Procfile")
|
|
mock(engine).spawn_processes
|
|
mock(engine).watch_for_termination
|
|
engine.environment.should == {"FOO"=>"qoo"}
|
|
engine.start
|
|
end
|
|
end
|
|
end
|