foreman 0.37.0-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +39 -0
- data/bin/foreman +7 -0
- data/bin/runner +36 -0
- data/data/example/Procfile +2 -0
- data/data/example/Procfile.without_colon +2 -0
- data/data/example/error +7 -0
- data/data/example/log/neverdie.log +4 -0
- data/data/example/ticker +14 -0
- data/data/export/bluepill/master.pill.erb +27 -0
- data/data/export/runit/log_run.erb +7 -0
- data/data/export/runit/run.erb +3 -0
- data/data/export/upstart/master.conf.erb +8 -0
- data/data/export/upstart/process.conf.erb +5 -0
- data/data/export/upstart/process_master.conf.erb +2 -0
- data/lib/foreman.rb +25 -0
- data/lib/foreman/cli.rb +98 -0
- data/lib/foreman/distribution.rb +9 -0
- data/lib/foreman/engine.rb +234 -0
- data/lib/foreman/export.rb +32 -0
- data/lib/foreman/export/base.rb +51 -0
- data/lib/foreman/export/bluepill.rb +26 -0
- data/lib/foreman/export/inittab.rb +36 -0
- data/lib/foreman/export/runit.rb +59 -0
- data/lib/foreman/export/upstart.rb +41 -0
- data/lib/foreman/helpers.rb +45 -0
- data/lib/foreman/process.rb +96 -0
- data/lib/foreman/procfile.rb +38 -0
- data/lib/foreman/procfile_entry.rb +22 -0
- data/lib/foreman/utils.rb +18 -0
- data/lib/foreman/version.rb +5 -0
- data/man/foreman.1 +222 -0
- data/spec/foreman/cli_spec.rb +163 -0
- data/spec/foreman/engine_spec.rb +86 -0
- data/spec/foreman/export/base_spec.rb +22 -0
- data/spec/foreman/export/bluepill_spec.rb +36 -0
- data/spec/foreman/export/inittab_spec.rb +40 -0
- data/spec/foreman/export/runit_spec.rb +41 -0
- data/spec/foreman/export/upstart_spec.rb +87 -0
- data/spec/foreman/export_spec.rb +24 -0
- data/spec/foreman/helpers_spec.rb +26 -0
- data/spec/foreman/process_spec.rb +131 -0
- data/spec/foreman_spec.rb +34 -0
- data/spec/helper_spec.rb +18 -0
- data/spec/resources/export/bluepill/app-concurrency.pill +47 -0
- data/spec/resources/export/bluepill/app.pill +44 -0
- data/spec/resources/export/inittab/inittab.concurrency +4 -0
- data/spec/resources/export/inittab/inittab.default +4 -0
- data/spec/resources/export/runit/app-alpha-1-log-run +7 -0
- data/spec/resources/export/runit/app-alpha-1-run +3 -0
- data/spec/resources/export/runit/app-alpha-2-log-run +7 -0
- data/spec/resources/export/runit/app-alpha-2-run +3 -0
- data/spec/resources/export/runit/app-bravo-1-log-run +7 -0
- data/spec/resources/export/runit/app-bravo-1-run +3 -0
- data/spec/resources/export/upstart/app-alpha-1.conf +5 -0
- data/spec/resources/export/upstart/app-alpha-2.conf +5 -0
- data/spec/resources/export/upstart/app-alpha.conf +2 -0
- data/spec/resources/export/upstart/app-bravo-1.conf +5 -0
- data/spec/resources/export/upstart/app-bravo.conf +2 -0
- data/spec/resources/export/upstart/app.conf +8 -0
- data/spec/spec_helper.rb +98 -0
- metadata +138 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/export/base"
|
3
|
+
|
4
|
+
describe "Foreman::Export::Base" do
|
5
|
+
let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile") }
|
6
|
+
let(:location) { "/tmp/init" }
|
7
|
+
let(:engine) { Foreman::Engine.new(procfile) }
|
8
|
+
let(:subject) { Foreman::Export::Base.new(location, engine) }
|
9
|
+
|
10
|
+
it "has a say method for displaying info" do
|
11
|
+
mock(subject).puts("[foreman export] foo")
|
12
|
+
subject.send(:say, "foo")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "export needs to be overridden" do
|
16
|
+
lambda { subject.export }.should raise_error("export method must be overridden")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "raises errors as a Foreman::Export::Exception" do
|
20
|
+
lambda { subject.send(:error, "foo") }.should raise_error(Foreman::Export::Exception, "foo")
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/engine"
|
3
|
+
require "foreman/export/bluepill"
|
4
|
+
require "tmpdir"
|
5
|
+
|
6
|
+
describe Foreman::Export::Bluepill, :fakefs do
|
7
|
+
let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile") }
|
8
|
+
let(:engine) { Foreman::Engine.new(procfile) }
|
9
|
+
let(:options) { Hash.new }
|
10
|
+
let(:bluepill) { Foreman::Export::Bluepill.new("/tmp/init", engine, options) }
|
11
|
+
|
12
|
+
before(:each) { load_export_templates_into_fakefs("bluepill") }
|
13
|
+
before(:each) { stub(bluepill).say }
|
14
|
+
|
15
|
+
it "exports to the filesystem" do
|
16
|
+
bluepill.export
|
17
|
+
normalize_space(File.read("/tmp/init/app.pill")).should == normalize_space(example_export_file("bluepill/app.pill"))
|
18
|
+
end
|
19
|
+
|
20
|
+
it "cleans up if exporting into an existing dir" do
|
21
|
+
mock(FileUtils).rm("/tmp/init/app.pill")
|
22
|
+
|
23
|
+
bluepill.export
|
24
|
+
bluepill.export
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with concurrency" do
|
28
|
+
let(:options) { Hash[:concurrency => "alpha=2"] }
|
29
|
+
|
30
|
+
it "exports to the filesystem with concurrency" do
|
31
|
+
bluepill.export
|
32
|
+
normalize_space(File.read("/tmp/init/app.pill")).should == normalize_space(example_export_file("bluepill/app-concurrency.pill"))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/engine"
|
3
|
+
require "foreman/export/inittab"
|
4
|
+
require "tmpdir"
|
5
|
+
|
6
|
+
describe Foreman::Export::Inittab, :fakefs do
|
7
|
+
let(:location) { "/tmp/inittab" }
|
8
|
+
let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile") }
|
9
|
+
let(:location) { "/tmp/inittab" }
|
10
|
+
let(:engine) { Foreman::Engine.new(procfile) }
|
11
|
+
let(:options) { Hash.new }
|
12
|
+
let(:inittab) { Foreman::Export::Inittab.new(location, engine, options) }
|
13
|
+
|
14
|
+
before(:each) { load_export_templates_into_fakefs("inittab") }
|
15
|
+
before(:each) { stub(inittab).say }
|
16
|
+
|
17
|
+
it "exports to the filesystem" do
|
18
|
+
inittab.export
|
19
|
+
File.read("/tmp/inittab").should == example_export_file("inittab/inittab.default")
|
20
|
+
end
|
21
|
+
|
22
|
+
context "to stdout" do
|
23
|
+
let(:location) { "-" }
|
24
|
+
|
25
|
+
it "exports to stdout" do
|
26
|
+
mock(inittab).puts example_export_file("inittab/inittab.default")
|
27
|
+
inittab.export
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context "with concurrency" do
|
32
|
+
let(:options) { Hash[:concurrency => "alpha=2"] }
|
33
|
+
|
34
|
+
it "exports to the filesystem with concurrency" do
|
35
|
+
inittab.export
|
36
|
+
File.read("/tmp/inittab").should == example_export_file("inittab/inittab.concurrency")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/engine"
|
3
|
+
require "foreman/export/runit"
|
4
|
+
require "tmpdir"
|
5
|
+
|
6
|
+
describe Foreman::Export::Runit, :fakefs do
|
7
|
+
let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile", 'bar=baz') }
|
8
|
+
let(:engine) { Foreman::Engine.new(procfile) }
|
9
|
+
let(:runit) { Foreman::Export::Runit.new('/tmp/init', engine, :concurrency => 'alpha=2,bravo=1') }
|
10
|
+
|
11
|
+
before(:each) { load_export_templates_into_fakefs("runit") }
|
12
|
+
before(:each) { stub(runit).say }
|
13
|
+
before(:each) { stub(FakeFS::FileUtils).chmod }
|
14
|
+
|
15
|
+
it "exports to the filesystem" do
|
16
|
+
FileUtils.mkdir_p('/tmp/init')
|
17
|
+
|
18
|
+
runit.export
|
19
|
+
|
20
|
+
File.read("/tmp/init/app-alpha-1/run").should == example_export_file('runit/app-alpha-1-run')
|
21
|
+
File.read("/tmp/init/app-alpha-1/log/run").should ==
|
22
|
+
example_export_file('runit/app-alpha-1-log-run')
|
23
|
+
File.read("/tmp/init/app-alpha-1/env/PORT").should == "5000\n"
|
24
|
+
File.read("/tmp/init/app-alpha-1/env/BAR").should == "baz\n"
|
25
|
+
|
26
|
+
File.read("/tmp/init/app-alpha-2/run").should == example_export_file('runit/app-alpha-2-run')
|
27
|
+
File.read("/tmp/init/app-alpha-2/log/run").should ==
|
28
|
+
example_export_file('runit/app-alpha-2-log-run')
|
29
|
+
File.read("/tmp/init/app-alpha-2/env/PORT").should == "5001\n"
|
30
|
+
File.read("/tmp/init/app-alpha-2/env/BAR").should == "baz\n"
|
31
|
+
|
32
|
+
File.read("/tmp/init/app-bravo-1/run").should == example_export_file('runit/app-bravo-1-run')
|
33
|
+
File.read("/tmp/init/app-bravo-1/log/run").should ==
|
34
|
+
example_export_file('runit/app-bravo-1-log-run')
|
35
|
+
File.read("/tmp/init/app-bravo-1/env/PORT").should == "5100\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
it "creates a full path to the export directory" do
|
39
|
+
expect { runit.export }.to_not raise_error(Errno::ENOENT)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/engine"
|
3
|
+
require "foreman/export/upstart"
|
4
|
+
require "tmpdir"
|
5
|
+
|
6
|
+
describe Foreman::Export::Upstart, :fakefs do
|
7
|
+
let(:procfile) { FileUtils.mkdir_p("/tmp/app"); write_procfile("/tmp/app/Procfile") }
|
8
|
+
let(:engine) { Foreman::Engine.new(procfile) }
|
9
|
+
let(:options) { Hash.new }
|
10
|
+
let(:upstart) { Foreman::Export::Upstart.new("/tmp/init", engine, options) }
|
11
|
+
|
12
|
+
before(:each) { load_export_templates_into_fakefs("upstart") }
|
13
|
+
before(:each) { stub(upstart).say }
|
14
|
+
|
15
|
+
it "exports to the filesystem" do
|
16
|
+
upstart.export
|
17
|
+
|
18
|
+
File.read("/tmp/init/app.conf").should == example_export_file("upstart/app.conf")
|
19
|
+
File.read("/tmp/init/app-alpha.conf").should == example_export_file("upstart/app-alpha.conf")
|
20
|
+
File.read("/tmp/init/app-alpha-1.conf").should == example_export_file("upstart/app-alpha-1.conf")
|
21
|
+
File.read("/tmp/init/app-bravo.conf").should == example_export_file("upstart/app-bravo.conf")
|
22
|
+
File.read("/tmp/init/app-bravo-1.conf").should == example_export_file("upstart/app-bravo-1.conf")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "cleans up if exporting into an existing dir" do
|
26
|
+
mock(FileUtils).rm("/tmp/init/app.conf")
|
27
|
+
mock(FileUtils).rm("/tmp/init/app-alpha.conf")
|
28
|
+
mock(FileUtils).rm("/tmp/init/app-alpha-1.conf")
|
29
|
+
mock(FileUtils).rm("/tmp/init/app-bravo.conf")
|
30
|
+
mock(FileUtils).rm("/tmp/init/app-bravo-1.conf")
|
31
|
+
|
32
|
+
upstart.export
|
33
|
+
upstart.export
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with concurrency" do
|
37
|
+
let(:options) { Hash[:concurrency => "alpha=2"] }
|
38
|
+
|
39
|
+
it "exports to the filesystem with concurrency" do
|
40
|
+
upstart.export
|
41
|
+
|
42
|
+
File.read("/tmp/init/app.conf").should == example_export_file("upstart/app.conf")
|
43
|
+
File.read("/tmp/init/app-alpha.conf").should == example_export_file("upstart/app-alpha.conf")
|
44
|
+
File.read("/tmp/init/app-alpha-1.conf").should == example_export_file("upstart/app-alpha-1.conf")
|
45
|
+
File.read("/tmp/init/app-alpha-2.conf").should == example_export_file("upstart/app-alpha-2.conf")
|
46
|
+
File.exists?("/tmp/init/app-bravo-1.conf").should == false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "with alternate templates" do
|
51
|
+
let(:template_root) { "/tmp/alternate" }
|
52
|
+
let(:upstart) { Foreman::Export::Upstart.new("/tmp/init", engine, :template => template_root) }
|
53
|
+
|
54
|
+
before do
|
55
|
+
FileUtils.mkdir_p template_root
|
56
|
+
File.open("#{template_root}/master.conf.erb", "w") { |f| f.puts "alternate_template" }
|
57
|
+
end
|
58
|
+
|
59
|
+
it "can export with alternate template files" do
|
60
|
+
upstart.export
|
61
|
+
|
62
|
+
File.read("/tmp/init/app.conf").should == "alternate_template\n"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "with alternate templates from home dir" do
|
67
|
+
let(:default_template_root) {File.expand_path("#{ENV['HOME']}/.foreman/templates")}
|
68
|
+
|
69
|
+
before do
|
70
|
+
ENV['_FOREMAN_SPEC_HOME'] = ENV['HOME']
|
71
|
+
ENV['HOME'] = "/home/appuser"
|
72
|
+
FileUtils.mkdir_p default_template_root
|
73
|
+
File.open("#{default_template_root}/master.conf.erb", "w") { |f| f.puts "default_alternate_template" }
|
74
|
+
end
|
75
|
+
|
76
|
+
after do
|
77
|
+
ENV['HOME'] = ENV.delete('_FOREMAN_SPEC_HOME')
|
78
|
+
end
|
79
|
+
|
80
|
+
it "can export with alternate template files" do
|
81
|
+
upstart.export
|
82
|
+
|
83
|
+
File.read("/tmp/init/app.conf").should == "default_alternate_template\n"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/export"
|
3
|
+
|
4
|
+
describe "Foreman::Export" do
|
5
|
+
subject { Foreman::Export }
|
6
|
+
|
7
|
+
describe "with a formatter that doesn't declare the appropriate class" do
|
8
|
+
it "prints an error" do
|
9
|
+
mock(subject).require("foreman/export/invalidformatter")
|
10
|
+
mock_export_error("Unknown export format: invalidformatter (no class Foreman::Export::Invalidformatter).") do
|
11
|
+
subject.formatter("invalidformatter")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "with an invalid formatter" do
|
17
|
+
|
18
|
+
it "prints an error" do
|
19
|
+
mock_export_error("Unknown export format: invalidformatter (unable to load file 'foreman/export/invalidformatter').") do
|
20
|
+
subject.formatter("invalidformatter")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman/helpers"
|
3
|
+
|
4
|
+
describe "Foreman::Helpers" do
|
5
|
+
before do
|
6
|
+
module Foo
|
7
|
+
class Bar; end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
after do
|
12
|
+
Object.send(:remove_const, :Foo)
|
13
|
+
end
|
14
|
+
|
15
|
+
subject { o = Object.new; o.extend(Foreman::Helpers); o }
|
16
|
+
|
17
|
+
it "should classify words" do
|
18
|
+
subject.classify("foo").should == "Foo"
|
19
|
+
subject.classify("foo-bar").should == "FooBar"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should constantize words" do
|
23
|
+
subject.constantize("Object").should == Object
|
24
|
+
subject.constantize("Foo::Bar").should == Foo::Bar
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'foreman/process'
|
3
|
+
require 'ostruct'
|
4
|
+
require 'timeout'
|
5
|
+
require 'tmpdir'
|
6
|
+
|
7
|
+
describe Foreman::Process do
|
8
|
+
subject { described_class.new entry, number, port }
|
9
|
+
|
10
|
+
let(:number) { 1 }
|
11
|
+
let(:port) { 777 }
|
12
|
+
let(:command) { "script" }
|
13
|
+
let(:name) { "foobar" }
|
14
|
+
let(:entry) { OpenStruct.new :name => name, :command => command }
|
15
|
+
|
16
|
+
its(:entry) { entry }
|
17
|
+
its(:num) { number }
|
18
|
+
its(:port) { port }
|
19
|
+
its(:name) { "#{name}.#{port}" }
|
20
|
+
its(:pid) { nil }
|
21
|
+
|
22
|
+
describe '#run' do
|
23
|
+
let(:pipe) { :pipe }
|
24
|
+
let(:basedir) { Dir.mktmpdir }
|
25
|
+
let(:env) {{ 'foo' => 'bar' }}
|
26
|
+
let(:init_delta) { 0.1 }
|
27
|
+
|
28
|
+
after { FileUtils.remove_entry_secure basedir }
|
29
|
+
|
30
|
+
def run(cmd=command)
|
31
|
+
entry.command = cmd
|
32
|
+
subject.run pipe, basedir, env
|
33
|
+
subject.detach && sleep(init_delta)
|
34
|
+
end
|
35
|
+
|
36
|
+
def run_file(executable, code)
|
37
|
+
file = File.open("#{basedir}/script", 'w') {|it| it << code }
|
38
|
+
run "#{executable} #{file.path}"
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'options' do
|
42
|
+
it 'should set PORT for environment' do
|
43
|
+
mock(subject).run_process(basedir, command, pipe) do
|
44
|
+
ENV['PORT'].should == port.to_s
|
45
|
+
end
|
46
|
+
run
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should set custom variables for environment' do
|
50
|
+
mock(subject).run_process(basedir, command, pipe) do
|
51
|
+
ENV['foo'].should == 'bar'
|
52
|
+
end
|
53
|
+
run
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should restore environment afterwards' do
|
57
|
+
mock(subject).run_process(basedir, command, pipe)
|
58
|
+
run
|
59
|
+
ENV.should_not include('PORT', 'foo')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'process' do
|
64
|
+
around do |spec|
|
65
|
+
IO.pipe do |reader, writer|
|
66
|
+
@reader, @writer = reader, writer
|
67
|
+
spec.run
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
let(:pipe) { @writer }
|
72
|
+
let(:output) { @reader.read_nonblock 1024 }
|
73
|
+
|
74
|
+
it 'should not block' do
|
75
|
+
expect {
|
76
|
+
Timeout.timeout(2*init_delta) { run 'sleep 2' }
|
77
|
+
}.should_not raise_exception
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should be alive' do
|
81
|
+
run 'sleep 1'
|
82
|
+
subject.should be_alive
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should be dead' do
|
86
|
+
run 'exit'
|
87
|
+
subject.should be_dead
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'should be killable' do
|
91
|
+
run 'sleep 1'
|
92
|
+
subject.kill 'TERM'
|
93
|
+
subject.should be_dead
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'should send different signals' do
|
97
|
+
run_file 'ruby', <<-CODE
|
98
|
+
trap "TERM", "IGNORE"
|
99
|
+
loop { sleep 1 }
|
100
|
+
CODE
|
101
|
+
sleep 1 # wait for ruby to start
|
102
|
+
subject.should be_alive
|
103
|
+
subject.kill 'TERM'
|
104
|
+
subject.should be_alive
|
105
|
+
subject.kill 'KILL'
|
106
|
+
subject.should be_dead
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should redirect stdout' do
|
110
|
+
run 'echo hey'
|
111
|
+
output.should include('hey')
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should redirect stderr' do
|
115
|
+
run 'echo hey >2'
|
116
|
+
output.should include('hey')
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should handle variables' do
|
120
|
+
run 'echo $PORT'
|
121
|
+
output.should include('777')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should handle arguments' do
|
125
|
+
pending
|
126
|
+
run %{ sh -c "trap '' TERM; sleep 10" }
|
127
|
+
subject.should be_alive
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "foreman"
|
3
|
+
|
4
|
+
describe Foreman do
|
5
|
+
|
6
|
+
describe "VERSION" do
|
7
|
+
subject { Foreman::VERSION }
|
8
|
+
it { should be_a String }
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "::load_env!(env_file)", :fakefs do
|
12
|
+
after do
|
13
|
+
ENV['FOO'] = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should load env_file into ENV" do
|
17
|
+
File.open("/tmp/env1", "w") { |f| f.puts("FOO=bar") }
|
18
|
+
Foreman.load_env!("/tmp/env1")
|
19
|
+
ENV['FOO'].should == 'bar'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should assume env_file in ./.env" do
|
23
|
+
File.open("./.env", "w") { |f| f.puts("FOO=bar") }
|
24
|
+
Foreman.load_env!
|
25
|
+
ENV['FOO'].should == 'bar'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "runner" do
|
30
|
+
it "should exist" do
|
31
|
+
File.exists?(Foreman.runner).should == true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|