auser-poolparty 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +201 -0
- data/PostInstall.txt +17 -0
- data/Rakefile +22 -1
- data/bin/cloud-add-keypair +0 -0
- data/bin/cloud-osxcopy +22 -0
- data/bin/cloud-provision +1 -0
- data/bin/cloud-start +17 -15
- data/bin/cloud-terminate +23 -0
- data/bin/pool-start +14 -14
- data/bin/pool-start-monitor +1 -0
- data/config/hoe.rb +114 -0
- data/config/requirements.rb +15 -0
- data/lib/poolparty.rb +1 -0
- data/lib/poolparty/base_packages/haproxy.rb +32 -31
- data/lib/poolparty/base_packages/heartbeat.rb +2 -2
- data/lib/poolparty/base_packages/poolparty.rb +9 -3
- data/lib/poolparty/base_packages/ruby.rb +10 -0
- data/lib/poolparty/core/proc.rb +5 -0
- data/lib/poolparty/core/string.rb +1 -1
- data/lib/poolparty/helpers/binary.rb +6 -5
- data/lib/poolparty/helpers/display.rb +11 -2
- data/lib/poolparty/helpers/optioner.rb +6 -3
- data/lib/poolparty/helpers/provisioner_base.rb +9 -7
- data/lib/poolparty/helpers/provisioners/master.rb +38 -4
- data/lib/poolparty/helpers/provisioners/slave.rb +2 -2
- data/lib/poolparty/modules/cloud_resourcer.rb +20 -3
- data/lib/poolparty/modules/definable_resource.rb +1 -1
- data/lib/poolparty/modules/method_missing_sugar.rb +12 -4
- data/lib/poolparty/modules/pretty_printer.rb +2 -1
- data/lib/poolparty/net/remote.rb +1 -1
- data/lib/poolparty/net/remote_bases/ec2.rb +13 -10
- data/lib/poolparty/net/remote_instance.rb +3 -2
- data/lib/poolparty/net/remoter.rb +33 -18
- data/lib/poolparty/net/remoter_base.rb +3 -3
- data/lib/poolparty/plugins/gem_package.rb +6 -29
- data/lib/poolparty/plugins/git.rb +22 -0
- data/lib/poolparty/pool/base.rb +7 -6
- data/lib/poolparty/pool/cloud.rb +34 -5
- data/lib/poolparty/pool/custom_resource.rb +4 -4
- data/lib/poolparty/pool/plugin.rb +13 -14
- data/lib/poolparty/pool/resource.rb +19 -10
- data/lib/poolparty/pool/resources/class_package.rb +10 -6
- data/lib/poolparty/pool/resources/conditional.rb +41 -0
- data/lib/poolparty/pool/resources/gem.rb +2 -2
- data/lib/poolparty/pool/script.rb +25 -2
- data/lib/poolparty/templates/haproxy.conf +1 -1
- data/lib/poolparty/templates/puppet.conf +4 -2
- data/lib/poolparty/version.rb +1 -1
- data/poolparty.gemspec +60 -0
- data/setup.rb +1585 -0
- data/spec/poolparty/base_packages/haproxy_spec.rb +13 -0
- data/spec/poolparty/base_packages/heartbeat_spec.rb +30 -0
- data/spec/poolparty/bin/console_spec.rb +80 -0
- data/spec/poolparty/core/array_spec.rb +26 -0
- data/spec/poolparty/core/float.rb +13 -0
- data/spec/poolparty/core/hash_spec.rb +63 -0
- data/spec/poolparty/core/kernel_spec.rb +24 -0
- data/spec/poolparty/core/module_spec.rb +15 -0
- data/spec/poolparty/core/object_spec.rb +40 -0
- data/spec/poolparty/core/string_spec.rb +152 -0
- data/spec/poolparty/core/time_spec.rb +52 -0
- data/spec/poolparty/helpers/binary_spec.rb +26 -0
- data/spec/poolparty/helpers/display_spec.rb +13 -0
- data/spec/poolparty/helpers/optioner_spec.rb +39 -0
- data/spec/poolparty/helpers/provisioner_base_spec.rb +121 -0
- data/spec/poolparty/helpers/provisioners/master_spec.rb +54 -0
- data/spec/poolparty/helpers/provisioners/slave_spec.rb +28 -0
- data/spec/poolparty/modules/cloud_resourcer_spec.rb +135 -0
- data/spec/poolparty/modules/configurable_spec.rb +26 -0
- data/spec/poolparty/modules/definable_resource.rb +9 -0
- data/spec/poolparty/modules/file_writer_spec.rb +49 -0
- data/spec/poolparty/modules/s3_string_spec.rb +15 -0
- data/spec/poolparty/net/remote_bases/ec2_spec.rb +92 -0
- data/spec/poolparty/net/remote_instance_spec.rb +70 -0
- data/spec/poolparty/net/remote_spec.rb +286 -0
- data/spec/poolparty/net/remoter_base_spec.rb +80 -0
- data/spec/poolparty/net/remoter_spec.rb +191 -0
- data/spec/poolparty/plugins/git_spec.rb +19 -0
- data/spec/poolparty/plugins/line_spec.rb +16 -0
- data/spec/poolparty/plugins/svn_spec.rb +16 -0
- data/spec/poolparty/pool/base_spec.rb +108 -0
- data/spec/poolparty/pool/cloud_spec.rb +299 -0
- data/spec/poolparty/pool/configurers/files/ruby_basic.rb +17 -0
- data/spec/poolparty/pool/configurers/files/ruby_plugins.rb +16 -0
- data/spec/poolparty/pool/configurers/ruby_spec.rb +58 -0
- data/spec/poolparty/pool/custom_resource_spec.rb +115 -0
- data/spec/poolparty/pool/example_spec.rb +112 -0
- data/spec/poolparty/pool/plugin_model_spec.rb +63 -0
- data/spec/poolparty/pool/plugin_spec.rb +85 -0
- data/spec/poolparty/pool/pool_spec.rb +83 -0
- data/spec/poolparty/pool/resource_spec.rb +224 -0
- data/spec/poolparty/pool/resources/class_package_spec.rb +84 -0
- data/spec/poolparty/pool/resources/conditional_spec.rb +38 -0
- data/spec/poolparty/pool/resources/cron_spec.rb +49 -0
- data/spec/poolparty/pool/resources/directory_spec.rb +40 -0
- data/spec/poolparty/pool/resources/exec_spec.rb +37 -0
- data/spec/poolparty/pool/resources/file_spec.rb +40 -0
- data/spec/poolparty/pool/resources/gem_spec.rb +16 -0
- data/spec/poolparty/pool/resources/host_spec.rb +28 -0
- data/spec/poolparty/pool/resources/package_spec.rb +44 -0
- data/spec/poolparty/pool/resources/remote_file_spec.rb +40 -0
- data/spec/poolparty/pool/resources/service_spec.rb +45 -0
- data/spec/poolparty/pool/resources/sshkey_spec.rb +48 -0
- data/spec/poolparty/pool/resources/variable_spec.rb +20 -0
- data/spec/poolparty/pool/script_spec.rb +51 -0
- data/spec/poolparty/pool/test_plugins/sshkey_test +2 -0
- data/spec/poolparty/pool/test_plugins/virtual_host_template.erb +0 -0
- data/spec/poolparty/pool/test_plugins/webserver.rb +46 -0
- data/spec/poolparty/poolparty_spec.rb +33 -0
- data/spec/poolparty/spec_helper.rb +120 -0
- data/test/test_generator_helper.rb +29 -0
- data/test/test_helper.rb +2 -0
- data/test/test_pool_spec_generator.rb +47 -0
- data/test/test_poolparty.rb +11 -0
- data/website/index.html +81 -0
- data/website/index.txt +72 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.html.erb +48 -0
- metadata +178 -60
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "haproxy base package" do
|
4
|
+
before(:each) do
|
5
|
+
@ha = PoolPartyHaproxyClass.new do
|
6
|
+
end
|
7
|
+
stub_list_from_remote_for(@ha)
|
8
|
+
@ha.stub!(:list_of_running_instances).and_return []
|
9
|
+
end
|
10
|
+
it "should have the heartbeat package defined" do
|
11
|
+
lambda {PoolPartyHaproxyClass}.should_not raise_error
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "heartbeat base package" do
|
4
|
+
# before(:each) do
|
5
|
+
# @cloud = Cloud.new(:app, self)
|
6
|
+
# @hb = PoolPartyHeartbeatClass.new(@cloud)
|
7
|
+
# stub_list_from_remote_for(@cloud)
|
8
|
+
# stub_list_of_instances_for(@cloud)
|
9
|
+
# end
|
10
|
+
# it "should have the heartbeat package defined" do
|
11
|
+
# lambda {PoolPartyHeartbeatClass}.should_not raise_error
|
12
|
+
# end
|
13
|
+
# it "should have a parent set to the cloud" do
|
14
|
+
# @hb.parent.should == @cloud
|
15
|
+
# end
|
16
|
+
# it "should call enable (and setup resources) since there is no block given when it's instantiated" do
|
17
|
+
# @hb.resources.should_not be_empty
|
18
|
+
# end
|
19
|
+
# it "should have no resources when starting with a block (that defines no methods)" do
|
20
|
+
# @pphc = PoolPartyHeartbeatClass.new do
|
21
|
+
# end
|
22
|
+
# @pphc.resources.should be_empty
|
23
|
+
# end
|
24
|
+
# it "should have a file resource" do
|
25
|
+
# @hb.resource(:remotefile).should_not be_empty
|
26
|
+
# end
|
27
|
+
# it "should have at least 3 remotefiles" do
|
28
|
+
# @hb.resource(:remotefile).size.should >= 3
|
29
|
+
# end
|
30
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require File.dirname(__FILE__) + '/../../../lib/poolparty/helpers/console'
|
3
|
+
|
4
|
+
describe "Console" do
|
5
|
+
before(:each) do
|
6
|
+
::File.stub!(:file?).with("pop").and_return true
|
7
|
+
end
|
8
|
+
describe "load_pool" do
|
9
|
+
before(:each) do
|
10
|
+
reset!
|
11
|
+
@string =<<-EOS
|
12
|
+
pool :app do
|
13
|
+
maximum_instances 2
|
14
|
+
cloud :rawr do
|
15
|
+
end
|
16
|
+
end
|
17
|
+
EOS
|
18
|
+
self.stub!(:open).and_return @string
|
19
|
+
@string.stub!(:read).and_return @string
|
20
|
+
end
|
21
|
+
it "should give you the load_pool method" do
|
22
|
+
self.respond_to?(:load_pool).should == true
|
23
|
+
end
|
24
|
+
it "should call script inflate on the filename" do
|
25
|
+
PoolParty::Script.should_receive(:inflate).once
|
26
|
+
load_pool("pop")
|
27
|
+
end
|
28
|
+
describe "calling" do
|
29
|
+
before(:each) do
|
30
|
+
reset!
|
31
|
+
load_pool("pop")
|
32
|
+
end
|
33
|
+
it "should instance_eval the string" do
|
34
|
+
pool(:app).should_not be_nil
|
35
|
+
end
|
36
|
+
it "should store the cloud inside the pool after inflating" do
|
37
|
+
pool(:app).cloud(:rawr).should_not be_nil
|
38
|
+
end
|
39
|
+
it "should say that the cloud inside the pool's parent is the containing parent" do
|
40
|
+
pool(:app).cloud(:rawr).parent.should == pool(:app)
|
41
|
+
end
|
42
|
+
it "should say that the maximum_instances on the cloud is the containing pool's option" do
|
43
|
+
pool(:app).cloud(:rawr).maximum_instances.should == 2
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
describe "reload!" do
|
48
|
+
before(:each) do
|
49
|
+
reset!
|
50
|
+
self.stub!(:require).and_return true
|
51
|
+
end
|
52
|
+
it "should call reset!" do
|
53
|
+
self.should_receive(:reset!).once
|
54
|
+
end
|
55
|
+
after do
|
56
|
+
reload!
|
57
|
+
end
|
58
|
+
end
|
59
|
+
describe "print" do
|
60
|
+
before(:each) do
|
61
|
+
reset!
|
62
|
+
@string =<<-EOS
|
63
|
+
pool :app do
|
64
|
+
maximum_instances 2
|
65
|
+
cloud :rawr do
|
66
|
+
end
|
67
|
+
end
|
68
|
+
EOS
|
69
|
+
self.stub!(:open).and_return @string
|
70
|
+
@string.stub!(:read).and_return @string
|
71
|
+
load_pool("pop")
|
72
|
+
end
|
73
|
+
it "should be able to print the clouds" do
|
74
|
+
pools.should_not be_empty
|
75
|
+
hide_output do
|
76
|
+
pool_describe.should == pools.size
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Array" do
|
4
|
+
before(:each) do
|
5
|
+
@array = ["run this", "run that"]
|
6
|
+
end
|
7
|
+
describe "runnable" do
|
8
|
+
it "should be able to produced a runnable string" do;@array.runnable.should == 'run this && run that';end
|
9
|
+
it "should be turn into a string" do;@array.runnable.class.should == String;end
|
10
|
+
end
|
11
|
+
describe "nice_runnable" do
|
12
|
+
before(:each) do
|
13
|
+
@array << ""
|
14
|
+
@array << "peabody"
|
15
|
+
end
|
16
|
+
it "should reject any empty elements out of the array" do
|
17
|
+
(@array << [""]).nice_runnable.should == "run this \n run that \n peabody"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
describe "to_os" do
|
21
|
+
it "should be able to turn itself to an open struct" do; @array.first.should_receive(:to_os);end
|
22
|
+
after do
|
23
|
+
@array.to_os
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Float" do
|
4
|
+
it "should be able to round to the nearest integer" do
|
5
|
+
10.95.round_to(1).should == 11
|
6
|
+
end
|
7
|
+
it "should be able to get the ceiling" do
|
8
|
+
10.54.ceil_to(1).should == 10.6
|
9
|
+
end
|
10
|
+
it "should be able to get the floor" do
|
11
|
+
10.14.floor_to(1).should == 10.1
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Hash" do
|
4
|
+
before(:each) do
|
5
|
+
@a = {:a => "10", :b => "20", :c => "30"}
|
6
|
+
end
|
7
|
+
it "should preserve the contents of the original hash when safe_merge'ing" do
|
8
|
+
a = {:a => "10", :b => "20"}
|
9
|
+
b = {:b => "30", :c => "40"}
|
10
|
+
a.safe_merge(b).should == {:a => "10", :b => "20", :c => "40"}
|
11
|
+
end
|
12
|
+
it "should preserve the contents of the original hash when safe_merge!'ing" do
|
13
|
+
a = {:a => "10", :b => "20"}
|
14
|
+
b = {:b => "30", :c => "40"}
|
15
|
+
a.safe_merge!(b)
|
16
|
+
a.should == {:a => "10", :b => "20", :c => "40"}
|
17
|
+
end
|
18
|
+
it "should be able to turn itself into an open struct" do
|
19
|
+
@a.to_os.class.should == MyOpenStruct
|
20
|
+
end
|
21
|
+
it "should respond to to_hash" do
|
22
|
+
@a.to_os.respond_to?(:to_hash).should == true
|
23
|
+
end
|
24
|
+
it "should be able to turn itself into an open struct with the method to_hash on the object" do
|
25
|
+
@a.to_os.to_hash.should == @a
|
26
|
+
end
|
27
|
+
it "should not put quotes around integers" do
|
28
|
+
{:a => 10, :b => "q"}.flush_out.should == ["a => 10", "b => 'q'"]
|
29
|
+
end
|
30
|
+
it "should be able to flush out into a string into an array" do
|
31
|
+
@a.flush_out.should == ["a => '10'","b => '20'","c => '30'"]
|
32
|
+
end
|
33
|
+
it "should be able to flush out with prev and posts" do
|
34
|
+
@a.flush_out("hi", "ho").should == ["hia => '10'ho","hib => '20'ho","hic => '30'ho"]
|
35
|
+
end
|
36
|
+
describe "select" do
|
37
|
+
before(:each) do
|
38
|
+
@selected_hash = @a.select {|k,v| k if k == :a}
|
39
|
+
end
|
40
|
+
it "should return a hash when selecting" do
|
41
|
+
@selected_hash.class.should == Hash
|
42
|
+
end
|
43
|
+
it "should only have the key a (selected)" do
|
44
|
+
@selected_hash.keys.should == [:a]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
describe "extract!" do
|
48
|
+
before(:each) do
|
49
|
+
@rejected_hash = @a.extract! {|k,v| k == :a }
|
50
|
+
end
|
51
|
+
it "should have a reject with the keys" do
|
52
|
+
@rejected_hash.keys.should == [:a]
|
53
|
+
end
|
54
|
+
it "should return the old array with the other keys" do
|
55
|
+
@a.keys.should == [:b, :c]
|
56
|
+
end
|
57
|
+
it "should not throw a fit with an empty hash" do
|
58
|
+
lambda {
|
59
|
+
{}.extract!
|
60
|
+
}.should_not raise_error
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Kernel extensions" do
|
4
|
+
before(:each) do
|
5
|
+
@obj = Object.new
|
6
|
+
end
|
7
|
+
it "should eval the string into time" do
|
8
|
+
@obj.should_receive(:sleep).once.with(10.seconds).and_return true
|
9
|
+
@obj.wait "10.seconds"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
describe "Object extensions" do
|
13
|
+
before(:each) do
|
14
|
+
@klass = Object.new
|
15
|
+
@klass.instance_eval <<-EOE
|
16
|
+
def hello
|
17
|
+
puts "hello"
|
18
|
+
end
|
19
|
+
EOE
|
20
|
+
end
|
21
|
+
it "should be able to get a list of the defined methods on the object" do
|
22
|
+
@klass.my_methods.should == ["hello"]
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Module" do
|
4
|
+
before(:each) do
|
5
|
+
@mod = Module.new do
|
6
|
+
attr_accessor_with_default :a do
|
7
|
+
Hash.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
@klass = Class.new.extend(@mod)
|
11
|
+
end
|
12
|
+
it "should be able to set method accessors" do
|
13
|
+
@klass.a.should == {}
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "Object" do
|
4
|
+
it "should respond to to_os" do
|
5
|
+
Object.new.respond_to?(:to_os).should == true
|
6
|
+
end
|
7
|
+
describe "with_options" do
|
8
|
+
before(:each) do
|
9
|
+
@obj = Class.new
|
10
|
+
end
|
11
|
+
it "should respond to with_options" do
|
12
|
+
@obj.respond_to?(:with_options).should == true
|
13
|
+
end
|
14
|
+
it "should set the options on the parent" do
|
15
|
+
allow_message_expectations_on_nil
|
16
|
+
@a.should_receive(:clone).and_return @a
|
17
|
+
@a.stub!(:options).and_return({})
|
18
|
+
with_options({:nick => "name"}, @a) do
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "running" do
|
23
|
+
before(:each) do
|
24
|
+
Class.stub!(:default_options).and_return({})
|
25
|
+
Class.send :include, Configurable
|
26
|
+
Class.send :include, MethodMissingSugar
|
27
|
+
@a = Class.new
|
28
|
+
@b = Class.new
|
29
|
+
|
30
|
+
with_options({:nick => "name", :b => @b}, @a) do
|
31
|
+
b.dude "totally"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
it "should set the options on the child in the instance eval" do
|
36
|
+
@b.dude.should == "totally"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe "String" do
|
4
|
+
describe "hasherize" do
|
5
|
+
before(:each) do
|
6
|
+
@str=<<-EOE
|
7
|
+
hello world
|
8
|
+
you are my
|
9
|
+
hero
|
10
|
+
EOE
|
11
|
+
@hashed = @str.hasherize(%w(hello you))
|
12
|
+
end
|
13
|
+
it "should return a hash from the string" do
|
14
|
+
@hashed.class.should == Hash
|
15
|
+
end
|
16
|
+
it "should have hello as a key" do
|
17
|
+
@hashed.has_key?(:hello).should == true
|
18
|
+
end
|
19
|
+
describe "arrayable" do
|
20
|
+
it "should be able to turn the string into an array" do
|
21
|
+
@str.arrayable.class.should == Array
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
before(:each) do
|
26
|
+
@string = "string"
|
27
|
+
@string.stub!(:bucket_objects).and_return([])
|
28
|
+
end
|
29
|
+
# Dumb test
|
30
|
+
it "should be able to call bucket_objects on itself" do
|
31
|
+
@string.should_receive(:bucket_objects)
|
32
|
+
@string.bucket_objects
|
33
|
+
end
|
34
|
+
describe "with config replacements" do
|
35
|
+
it "should replace those syms in the string" do
|
36
|
+
("new :port" ^ {:port => 100}).should == "new 100"
|
37
|
+
end
|
38
|
+
it "should be able to detect vars" do
|
39
|
+
@string=<<-EOC
|
40
|
+
listen web_proxy 127.0.0.1::client_port
|
41
|
+
\tserver web1 127.0.0.1::port weight 1 minconn 3 maxconn 6 check inter 30000
|
42
|
+
EOC
|
43
|
+
(@string ^ {:client_port => 3000, :port => 3001}).should ==<<-EOO
|
44
|
+
listen web_proxy 127.0.0.1:3000
|
45
|
+
\tserver web1 127.0.0.1:3001 weight 1 minconn 3 maxconn 6 check inter 30000
|
46
|
+
EOO
|
47
|
+
end
|
48
|
+
end
|
49
|
+
describe "collect_each_line_with_index" do
|
50
|
+
before(:each) do
|
51
|
+
@longer_string = "hot\npotato\nthrough\nthe\nwindow"
|
52
|
+
end
|
53
|
+
it "should run the same code on the entire string" do
|
54
|
+
@longer_string.collect_each_line_with_index do |str, index|
|
55
|
+
"#{index}_#{str}"
|
56
|
+
end.should == ["0_hot", "1_potato", "2_through", "3_the", "4_window"]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
describe "String" do
|
60
|
+
before(:each) do
|
61
|
+
@str =<<-EOS
|
62
|
+
echo 'hi'
|
63
|
+
puts 'hi'
|
64
|
+
EOS
|
65
|
+
end
|
66
|
+
it "should be able to convert a big string with \n to a runnable string" do
|
67
|
+
@str.runnable.should == "echo 'hi' && puts 'hi'"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
describe "Constantize" do
|
71
|
+
before(:each) do
|
72
|
+
@str = "prok"
|
73
|
+
end
|
74
|
+
it "should be able to turn itself into constant" do
|
75
|
+
@str.class_constant.should == PoolPartyProkClass
|
76
|
+
end
|
77
|
+
it "should turn itself into a class constant" do
|
78
|
+
@str.class_constant.class.should == Class
|
79
|
+
end
|
80
|
+
it "should not recreate the constant if it exists" do
|
81
|
+
Class.should_receive(:new).once.and_return Class.new
|
82
|
+
@str.class_constant
|
83
|
+
@str.class_constant
|
84
|
+
end
|
85
|
+
it "should set the parent class when sent with the superclass" do
|
86
|
+
"stirer".class_constant(String).ancestors[1].should == String
|
87
|
+
end
|
88
|
+
it "should be able to create a module into a constant" do
|
89
|
+
@str.module_constant.should == ProkModule
|
90
|
+
end
|
91
|
+
it "should turn itself into a class constant" do
|
92
|
+
@str.module_constant.class.should == Module
|
93
|
+
end
|
94
|
+
it "should create the module on preserved module constant" do
|
95
|
+
Module.should_receive(:new).once
|
96
|
+
@str.preserved_module_constant.should == Prok
|
97
|
+
@str.preserved_module_constant
|
98
|
+
@str.preserved_module_constant
|
99
|
+
end
|
100
|
+
describe "with a block" do
|
101
|
+
before(:each) do
|
102
|
+
@str = "nack"
|
103
|
+
end
|
104
|
+
it "should be able to yield a block on the module and set methods" do
|
105
|
+
"tippy".module_constant do
|
106
|
+
def tippy
|
107
|
+
puts "etc"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
Class.new.extend("tippy".module_constant).methods.include?("tippy").should == true
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
describe "top level class" do
|
115
|
+
it "should be able to get the top level class" do
|
116
|
+
"PoolParty::Resources::File".top_level_class.should == "file"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
describe "to_option_string" do
|
120
|
+
it "should not touch a string, but return the string with single quotes" do
|
121
|
+
"rocks".to_option_string.should == "'rocks'"
|
122
|
+
end
|
123
|
+
it "should return a string of the format Service[nagios] with no single quotes" do
|
124
|
+
"Service[nagios]".to_option_string.should == "Service[nagios]"
|
125
|
+
end
|
126
|
+
it "should also return a string if there is a string within the string" do
|
127
|
+
'Package["heartbeat-2"]'.to_option_string.should == 'Package["heartbeat-2"]'
|
128
|
+
end
|
129
|
+
it "should return File['/etc/apache2/conf.d/base.conf'] as a string" do
|
130
|
+
'File["/etc/apache2/conf.d/base.conf"]'.to_option_string.should == "File[\"/etc/apache2/conf.d/base.conf\"]"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
describe "sanitize" do
|
134
|
+
it "should remove the periods from the string" do
|
135
|
+
"xnot.org".sanitize.should == "xnotorg"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
describe "nice_runnable" do
|
139
|
+
before(:each) do
|
140
|
+
@tasks = ["ls -l", "echo 'hello'"]
|
141
|
+
end
|
142
|
+
it "should turn an array into a string" do
|
143
|
+
@tasks.nice_runnable.class.should == String
|
144
|
+
end
|
145
|
+
it "should add \\n between the commands" do
|
146
|
+
@tasks.nice_runnable.should == "ls -l \n echo 'hello'"
|
147
|
+
end
|
148
|
+
it "should strip out excess lines" do
|
149
|
+
(@tasks << []).nice_runnable.should == "ls -l \n echo 'hello'"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|