mdwan-sprinkle 0.2.2

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.
Files changed (101) hide show
  1. data/CREDITS +22 -0
  2. data/History.txt +4 -0
  3. data/MIT-LICENSE +20 -0
  4. data/Manifest.txt +100 -0
  5. data/README.txt +241 -0
  6. data/Rakefile +4 -0
  7. data/bin/sprinkle +86 -0
  8. data/config/hoe.rb +70 -0
  9. data/config/requirements.rb +17 -0
  10. data/examples/packages/build_essential.rb +9 -0
  11. data/examples/packages/databases/mysql.rb +13 -0
  12. data/examples/packages/databases/sqlite3.rb +16 -0
  13. data/examples/packages/phusion.rb +55 -0
  14. data/examples/packages/ruby/rails.rb +9 -0
  15. data/examples/packages/ruby/ruby.rb +17 -0
  16. data/examples/packages/ruby/rubygems.rb +17 -0
  17. data/examples/packages/scm/git.rb +11 -0
  18. data/examples/packages/scm/subversion.rb +4 -0
  19. data/examples/packages/servers/apache.rb +15 -0
  20. data/examples/rails/README +15 -0
  21. data/examples/rails/deploy.rb +2 -0
  22. data/examples/rails/packages/database.rb +9 -0
  23. data/examples/rails/packages/essential.rb +9 -0
  24. data/examples/rails/packages/rails.rb +28 -0
  25. data/examples/rails/packages/scm.rb +11 -0
  26. data/examples/rails/packages/search.rb +11 -0
  27. data/examples/rails/packages/server.rb +28 -0
  28. data/examples/rails/rails.rb +73 -0
  29. data/examples/sprinkle/sprinkle.rb +38 -0
  30. data/lib/sprinkle/actors/actors.rb +17 -0
  31. data/lib/sprinkle/actors/capistrano.rb +124 -0
  32. data/lib/sprinkle/actors/local.rb +30 -0
  33. data/lib/sprinkle/actors/ssh.rb +81 -0
  34. data/lib/sprinkle/actors/vlad.rb +65 -0
  35. data/lib/sprinkle/configurable.rb +31 -0
  36. data/lib/sprinkle/deployment.rb +73 -0
  37. data/lib/sprinkle/extensions/arbitrary_options.rb +10 -0
  38. data/lib/sprinkle/extensions/array.rb +5 -0
  39. data/lib/sprinkle/extensions/blank_slate.rb +5 -0
  40. data/lib/sprinkle/extensions/dsl_accessor.rb +15 -0
  41. data/lib/sprinkle/extensions/string.rb +10 -0
  42. data/lib/sprinkle/extensions/symbol.rb +7 -0
  43. data/lib/sprinkle/installers/apt.rb +52 -0
  44. data/lib/sprinkle/installers/bsd_port.rb +33 -0
  45. data/lib/sprinkle/installers/custom.rb +28 -0
  46. data/lib/sprinkle/installers/deb.rb +38 -0
  47. data/lib/sprinkle/installers/freebsd_pkg.rb +37 -0
  48. data/lib/sprinkle/installers/gem.rb +63 -0
  49. data/lib/sprinkle/installers/installer.rb +120 -0
  50. data/lib/sprinkle/installers/mac_port.rb +38 -0
  51. data/lib/sprinkle/installers/openbsd_pkg.rb +47 -0
  52. data/lib/sprinkle/installers/opensolaris_pkg.rb +43 -0
  53. data/lib/sprinkle/installers/push_text.rb +45 -0
  54. data/lib/sprinkle/installers/rake.rb +37 -0
  55. data/lib/sprinkle/installers/rpm.rb +37 -0
  56. data/lib/sprinkle/installers/source.rb +179 -0
  57. data/lib/sprinkle/installers/yum.rb +37 -0
  58. data/lib/sprinkle/package.rb +279 -0
  59. data/lib/sprinkle/policy.rb +125 -0
  60. data/lib/sprinkle/script.rb +23 -0
  61. data/lib/sprinkle/verifiers/directory.rb +16 -0
  62. data/lib/sprinkle/verifiers/executable.rb +36 -0
  63. data/lib/sprinkle/verifiers/file.rb +26 -0
  64. data/lib/sprinkle/verifiers/process.rb +21 -0
  65. data/lib/sprinkle/verifiers/ruby.rb +25 -0
  66. data/lib/sprinkle/verifiers/symlink.rb +30 -0
  67. data/lib/sprinkle/verify.rb +114 -0
  68. data/lib/sprinkle/version.rb +9 -0
  69. data/lib/sprinkle.rb +32 -0
  70. data/script/destroy +14 -0
  71. data/script/generate +14 -0
  72. data/spec/spec.opts +1 -0
  73. data/spec/spec_helper.rb +17 -0
  74. data/spec/sprinkle/actors/capistrano_spec.rb +170 -0
  75. data/spec/sprinkle/actors/local_spec.rb +29 -0
  76. data/spec/sprinkle/configurable_spec.rb +46 -0
  77. data/spec/sprinkle/deployment_spec.rb +80 -0
  78. data/spec/sprinkle/extensions/array_spec.rb +19 -0
  79. data/spec/sprinkle/extensions/string_spec.rb +21 -0
  80. data/spec/sprinkle/installers/apt_spec.rb +70 -0
  81. data/spec/sprinkle/installers/bsd_port_spec.rb +42 -0
  82. data/spec/sprinkle/installers/freebsd_pkg_spec.rb +49 -0
  83. data/spec/sprinkle/installers/gem_spec.rb +91 -0
  84. data/spec/sprinkle/installers/installer_spec.rb +151 -0
  85. data/spec/sprinkle/installers/mac_port_spec.rb +42 -0
  86. data/spec/sprinkle/installers/openbsd_pkg_spec.rb +49 -0
  87. data/spec/sprinkle/installers/opensolaris_pkg_spec.rb +49 -0
  88. data/spec/sprinkle/installers/push_text_spec.rb +55 -0
  89. data/spec/sprinkle/installers/rake_spec.rb +29 -0
  90. data/spec/sprinkle/installers/rpm_spec.rb +50 -0
  91. data/spec/sprinkle/installers/source_spec.rb +331 -0
  92. data/spec/sprinkle/installers/yum_spec.rb +49 -0
  93. data/spec/sprinkle/policy_spec.rb +126 -0
  94. data/spec/sprinkle/script_spec.rb +51 -0
  95. data/spec/sprinkle/sprinkle_spec.rb +25 -0
  96. data/spec/sprinkle/verify_spec.rb +167 -0
  97. data/sprinkle.gemspec +74 -0
  98. data/tasks/deployment.rake +34 -0
  99. data/tasks/environment.rake +7 -0
  100. data/tasks/rspec.rake +21 -0
  101. metadata +198 -0
@@ -0,0 +1,80 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Sprinkle::Deployment do
4
+ include Sprinkle::Deployment
5
+
6
+ def create_deployment(&block)
7
+ deployment do
8
+ delivery :capistrano, &block
9
+
10
+ source do
11
+ prefix '/usr/local'
12
+ end
13
+ end
14
+ end
15
+
16
+ describe 'when created' do
17
+
18
+ it 'should be invalid without a block descriptor' do
19
+ lambda { deployment }.should raise_error
20
+ end
21
+
22
+ it 'should be invalid without a delivery method' do
23
+ lambda { @deployment = deployment do; end }.should raise_error
24
+ end
25
+
26
+ it 'should optionally accept installer defaults' do
27
+ @deployment = create_deployment
28
+ @deployment.should respond_to(:source)
29
+ end
30
+
31
+ it 'should provide installer defaults as a proc when requested' do
32
+ @deployment = create_deployment
33
+ @deployment.defaults[:source].class.should == Proc
34
+ end
35
+
36
+ end
37
+
38
+ describe 'delivery specification' do
39
+
40
+ before do
41
+ @actor = mock(Sprinkle::Actors::Capistrano)
42
+ Sprinkle::Actors::Capistrano.stub!(:new).and_return(@actor)
43
+ end
44
+
45
+ it 'should automatically instantiate the delivery type' do
46
+ @deployment = create_deployment
47
+ @deployment.style.should == @actor
48
+ end
49
+
50
+ it 'should optionally accept a block to pass to the actor' do
51
+ lambda { @deployment = create_deployment }.should_not raise_error
52
+ end
53
+
54
+ describe 'with a block' do
55
+
56
+ it 'should pass the block to the actor for configuration' do
57
+ @deployment = create_deployment do; recipes 'deploy'; end
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+ describe 'when processing policies' do
64
+
65
+ before do
66
+ @policy = mock(Policy, :process => true)
67
+ POLICIES = [ @policy ]
68
+ @deployment = create_deployment
69
+ end
70
+
71
+ it 'should apply all policies, passing itself as the deployment context' do
72
+ @policy.should_receive(:process).with(@deployment).and_return
73
+ end
74
+
75
+ after do
76
+ @deployment.process
77
+ end
78
+ end
79
+
80
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Array, 'task name conversions' do
4
+
5
+ it 'should be able to deliver a task name' do
6
+ ['build_essential'].to_task_name.should == 'build_essential'
7
+ end
8
+
9
+ it 'should join multiple elements together with a _ char' do
10
+ ['gdb', 'gcc', 'g++'].to_task_name.should == 'gdb_gcc_g++'
11
+ end
12
+
13
+ it 'should use the task name of the underlying array element' do
14
+ string = 'build-essential'
15
+ string.should_receive(:to_task_name).and_return('build_essential')
16
+ [string].to_task_name.should == 'build_essential'
17
+ end
18
+
19
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe String, 'task name conversions' do
4
+
5
+ it 'should be able to deliver a task name' do
6
+ 'build_essential'.to_task_name.should == 'build_essential'
7
+ end
8
+
9
+ it 'should convert all - chars to _ in the task name' do
10
+ 'build-essential'.to_task_name.should == 'build_essential'
11
+ end
12
+
13
+ it 'should convert multiple - chars to _ chars in the task name' do
14
+ 'build--essential'.to_task_name.should == 'build__essential'
15
+ end
16
+
17
+ it 'should lowercase the task name' do
18
+ 'BUILD-ESSENTIAL'.to_task_name.should == 'build_essential'
19
+ end
20
+
21
+ end
@@ -0,0 +1,70 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::Apt do
4
+
5
+ before do
6
+ @package = mock(Sprinkle::Package, :name => 'package')
7
+ end
8
+
9
+ def create_apt(*debs, &block)
10
+ Sprinkle::Installers::Apt.new(@package, *debs, &block)
11
+ end
12
+
13
+ describe 'when created' do
14
+
15
+ it 'should accept a single package to install' do
16
+ @installer = create_apt 'ruby'
17
+ @installer.packages.should == [ 'ruby' ]
18
+ end
19
+
20
+ it 'should accept an array of packages to install' do
21
+ @installer = create_apt %w( gcc gdb g++ )
22
+ @installer.packages.should == ['gcc', 'gdb', 'g++']
23
+ end
24
+
25
+ it 'should remove options from packages list' do
26
+ @installer = create_apt 'ruby', :dependencies_only => true
27
+ @installer.packages.should == [ 'ruby' ]
28
+ end
29
+
30
+ end
31
+
32
+ describe 'during installation' do
33
+
34
+ before do
35
+ @installer = create_apt 'ruby' do
36
+ pre :install, 'op1'
37
+ post :install, 'op2'
38
+ end
39
+ @install_commands = @installer.send :install_commands
40
+ end
41
+
42
+ it 'should invoke the apt installer for all specified packages' do
43
+ @install_commands.should =~ /apt-get -qyu install ruby/
44
+ end
45
+
46
+ it 'should specify a non interactive mode to the apt installer' do
47
+ @install_commands.should =~ /DEBIAN_FRONTEND=noninteractive/
48
+ end
49
+
50
+ it 'should automatically insert pre/post commands for the specified package' do
51
+ @installer.send(:install_sequence).should == [ 'op1', %(DEBCONF_TERSE='yes' DEBIAN_PRIORITY='critical' DEBIAN_FRONTEND=noninteractive apt-get -qyu install ruby), 'op2' ]
52
+ end
53
+
54
+ it 'should install a specific version if defined'
55
+
56
+ end
57
+
58
+ describe 'during dependencies only installation' do
59
+
60
+ before do
61
+ @installer = create_apt('ruby') { dependencies_only true }
62
+ @install_commands = @installer.send :install_commands
63
+ end
64
+
65
+ it 'should invoke the apt installer with build-dep command for all specified packages' do
66
+ @install_commands.should =~ /apt-get -qyu build-dep ruby/
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::BsdPort do
4
+
5
+ before do
6
+ @package = mock(Sprinkle::Package, :name => 'package')
7
+ end
8
+
9
+ def create_port(ports, &block)
10
+ Sprinkle::Installers::BsdPort.new(@package, ports, &block)
11
+ end
12
+
13
+ describe 'when created' do
14
+
15
+ it 'should accept a single package to install' do
16
+ @installer = create_port 'lang/ruby'
17
+ @installer.port.should == 'lang/ruby'
18
+ end
19
+
20
+ end
21
+
22
+ describe 'during installation' do
23
+
24
+ before do
25
+ @installer = create_port 'lang/ruby' do
26
+ pre :install, 'op1'
27
+ post :install, 'op2'
28
+ end
29
+ @install_commands = @installer.send :install_commands
30
+ end
31
+
32
+ it 'should invoke the port installer for all specified packages' do
33
+ @install_commands.should =~ /cd \/usr\/ports\/lang\/ruby && make BATCH=yes install clean/
34
+ end
35
+
36
+ it 'should automatically insert pre/post commands for the specified package' do
37
+ @installer.send(:install_sequence).should == [ 'op1', 'sh -c \'cd /usr/ports/lang/ruby && make BATCH=yes install clean\'', 'op2' ]
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::FreebsdPkg do
4
+
5
+ before do
6
+ @package = mock(Sprinkle::Package, :name => 'package')
7
+ end
8
+
9
+ def create_pkg(pkgs, &block)
10
+ Sprinkle::Installers::FreebsdPkg.new(@package, pkgs, &block)
11
+ end
12
+
13
+ describe 'when created' do
14
+
15
+ it 'should accept a single package to install' do
16
+ @installer = create_pkg 'ruby'
17
+ @installer.packages.should == [ 'ruby' ]
18
+ end
19
+
20
+ it 'should accept an array of packages to install' do
21
+ @installer = create_pkg %w( gcc gdb g++ )
22
+ @installer.packages.should == ['gcc', 'gdb', 'g++']
23
+ end
24
+
25
+ end
26
+
27
+ describe 'during installation' do
28
+
29
+ before do
30
+ @installer = create_pkg 'ruby' do
31
+ pre :install, 'op1'
32
+ post :install, 'op2'
33
+ end
34
+ @install_commands = @installer.send :install_commands
35
+ end
36
+
37
+ it 'should invoke the freebsd_pkg installer for all specified packages' do
38
+ @install_commands.should =~ /pkg_add -r ruby/
39
+ end
40
+
41
+ it 'should automatically insert pre/post commands for the specified package' do
42
+ @installer.send(:install_sequence).should == [ 'op1', 'pkg_add -r ruby', 'op2' ]
43
+ end
44
+
45
+ it 'should install a specific version if defined'
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,91 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::Gem do
4
+
5
+ before do
6
+ @gem = 'rails'
7
+ @version = '2.0.2'
8
+ @options = { :source => 'http://gems.github.com/', :repository => '/tmp/gems', :build_flags => '--build_flag=foo' }
9
+ end
10
+
11
+ def create_gem(gem, version = nil, options = {}, &block)
12
+ @package = mock(Sprinkle::Package, :name => gem, :version => version, :source => nil, :repository => nil)
13
+ Sprinkle::Installers::Gem.new(@package, gem, options, &block)
14
+ end
15
+
16
+ describe 'when created' do
17
+
18
+ before do
19
+ @installer = create_gem @gem, @version, @options
20
+ end
21
+
22
+ it 'should accept a single package to install' do
23
+ @installer.gem.should == @gem
24
+ end
25
+
26
+ it 'should optionally store a version of the gem to install' do
27
+ @installer.version.should == '2.0.2'
28
+ end
29
+
30
+ it 'should optionally store a source location of the gem to install' do
31
+ @installer.source.should == 'http://gems.github.com/'
32
+ end
33
+
34
+ it 'should optionally store the repository location where gems are to be installed' do
35
+ @installer.repository.should == @options[:repository]
36
+ end
37
+
38
+ it 'should optionally store the build flags' do
39
+ @installer.build_flags.should == @options[:build_flags]
40
+ end
41
+
42
+ end
43
+
44
+ describe 'during installation' do
45
+
46
+ describe 'without a version' do
47
+
48
+ before do
49
+ @installer = create_gem @gem do
50
+ pre :install, 'op1'
51
+ post :install, 'op2'
52
+ end
53
+ end
54
+
55
+ it 'should invoke the gem installer for the specified package' do
56
+ @installer.send(:install_commands).should == "gem install #{@gem} --no-rdoc --no-ri"
57
+ end
58
+
59
+ it 'should automatically insert pre/post commands for the specified package' do
60
+ @installer.send(:install_sequence).should == [ 'op1', "gem install #{@gem} --no-rdoc --no-ri", 'op2']
61
+ end
62
+
63
+ end
64
+
65
+ describe 'with a specific version' do
66
+
67
+ before do
68
+ @installer = create_gem @gem, @version, :build_docs => true
69
+ end
70
+
71
+ it 'should install a specific version if defined, and with docs' do
72
+ @installer.send(:install_commands).should == "gem install #{@gem} --version '#{@version}'"
73
+ end
74
+
75
+ end
76
+
77
+ describe 'with build flags' do
78
+
79
+ before do
80
+ @installer = create_gem @gem, nil, :build_flags => '--option=foo'
81
+ end
82
+
83
+ it 'should install with defined build flags' do
84
+ @installer.send(:install_commands).should == "gem install #{@gem} --no-rdoc --no-ri -- --option=foo"
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,151 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::Installer do
4
+ include Sprinkle::Deployment
5
+
6
+ before do
7
+ @package = mock(Sprinkle::Package, :name => 'package')
8
+ @empty = Proc.new { }
9
+ @sequence = ['op1', 'op2']
10
+ @delivery = mock(Sprinkle::Deployment, :process => true)
11
+ @installer = create_installer
12
+ @installer.delivery = @delivery
13
+ @roles = []
14
+ @deployment = deployment do
15
+ delivery :capistrano
16
+ installer do; prefix '/usr/bin'; end
17
+ end
18
+ end
19
+
20
+ def create_installer(&block)
21
+ installer = Sprinkle::Installers::Installer.new @package, &block
22
+ installer.stub!(:puts).and_return
23
+
24
+ # this is actually an abstract class so we'll insert a few fake install sequences
25
+ class << installer
26
+ def install_sequence
27
+ ['op1', 'op2']
28
+ end
29
+ end
30
+
31
+ installer
32
+ end
33
+
34
+ describe 'when created' do
35
+
36
+ it 'should belong to a package' do
37
+ @installer.package.should == @package
38
+ end
39
+
40
+ describe 'with a block to customize installer defaults' do
41
+
42
+ it 'should accept an optional block to customize installers defaults' do
43
+ @installer = create_installer do; prefix '/usr/local'; end
44
+ @installer.prefix.should == '/usr/local'
45
+ end
46
+
47
+ it 'should override any deployment level defaults' do
48
+ @installer = create_installer do; prefix '/usr/local'; end
49
+ @installer.defaults(@deployment)
50
+ @installer.prefix.should == '/usr/local'
51
+ end
52
+ end
53
+ end
54
+
55
+ describe 'during configuration' do
56
+ # We just check to make sure it has the Sprinkle::Configurable method
57
+ it 'should be configurable' do
58
+ @installer.should respond_to(:defaults)
59
+ end
60
+ end
61
+
62
+ describe 'during installation' do
63
+
64
+ it 'should request the install sequence from the concrete class' do
65
+ @installer.should_receive(:install_sequence).and_return(@sequence)
66
+ end
67
+
68
+ describe 'when testing' do
69
+
70
+ before do
71
+ Sprinkle::OPTIONS[:testing] = true
72
+ @logger = mock(ActiveSupport::BufferedLogger, :debug => true, :debug? => true)
73
+ end
74
+
75
+ it 'should not invoke the delivery mechanism with the install sequence' do
76
+ @delivery.should_not_receive(:process)
77
+ end
78
+
79
+ it 'should print the install sequence to the console' do
80
+ @installer.should_receive(:logger).twice.and_return(@logger)
81
+ end
82
+
83
+ end
84
+
85
+ describe 'when in production' do
86
+ it 'should invoke the delivery mechanism to process the install sequence' do
87
+ @delivery.should_receive(:process).with(@package.name, @sequence, @roles)
88
+ end
89
+ end
90
+
91
+ describe "with a pre command" do
92
+
93
+ def create_installer_with_pre_command(cmd="")
94
+ installer = Sprinkle::Installers::Installer.new @package do
95
+ pre :install, cmd
96
+
97
+ def install_commands
98
+ ["installer"]
99
+ end
100
+ end
101
+
102
+ installer.stub!(:puts).and_return
103
+ installer.delivery = @delivery
104
+ installer
105
+ end
106
+ before do
107
+ @installer = create_installer_with_pre_command('run')
108
+ end
109
+ describe "string commands" do
110
+ it "should insert the pre command for the specific package in the installation process" do
111
+ @installer.send(:install_sequence).should == [ 'run', 'installer' ]
112
+ end
113
+ end
114
+ describe "blocks as commands" do
115
+ before(:each) do
116
+ @installer = Sprinkle::Installers::Installer.new @package do
117
+ pre :install do
118
+ %w(a b c)
119
+ end
120
+
121
+ def install_commands
122
+ ["installer"]
123
+ end
124
+ end
125
+
126
+ @installer.stub!(:puts).and_return
127
+ @installer.delivery = @delivery
128
+ end
129
+ it "should be able to store a block if it's the pre command" do
130
+ @installer.send(:install_sequence).should == [ "a", "b", "c", 'installer' ]
131
+ end
132
+ end
133
+ describe "blocks as commands" do
134
+ before(:each) do
135
+ @array = ["a", "b"]
136
+ @installer = create_installer_with_pre_command(@array)
137
+ end
138
+ it "should be able to store a block if it's the pre command" do
139
+ @installer.send(:install_sequence).should == [ @array, 'installer' ].flatten
140
+ end
141
+ end
142
+ end
143
+
144
+ after do
145
+ @installer.process(@roles)
146
+ Sprinkle::OPTIONS[:testing] = false
147
+ end
148
+
149
+ end
150
+
151
+ end
@@ -0,0 +1,42 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::MacPort do
4
+
5
+ before do
6
+ @package = mock(Sprinkle::Package, :name => 'package')
7
+ end
8
+
9
+ def create_port(ports, &block)
10
+ Sprinkle::Installers::MacPort.new(@package, ports, &block)
11
+ end
12
+
13
+ describe 'when created' do
14
+
15
+ it 'should accept a single package to install' do
16
+ @installer = create_port 'ruby'
17
+ @installer.port.should == 'ruby'
18
+ end
19
+
20
+ end
21
+
22
+ describe 'during installation' do
23
+
24
+ before do
25
+ @installer = create_port 'ruby' do
26
+ pre :install, 'op1'
27
+ post :install, 'op2'
28
+ end
29
+ @install_commands = @installer.send :install_commands
30
+ end
31
+
32
+ it 'should invoke the port installer for all specified packages' do
33
+ @install_commands.should =~ /port install ruby/
34
+ end
35
+
36
+ it 'should automatically insert pre/post commands for the specified package' do
37
+ @installer.send(:install_sequence).should == [ 'op1', 'port install ruby', 'op2' ]
38
+ end
39
+
40
+ end
41
+
42
+ end
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::OpenbsdPkg do
4
+
5
+ before do
6
+ @package = mock(Sprinkle::Package, :name => 'package')
7
+ end
8
+
9
+ def create_pkg(pkgs, &block)
10
+ Sprinkle::Installers::OpenbsdPkg.new(@package, pkgs, &block)
11
+ end
12
+
13
+ describe 'when created' do
14
+
15
+ it 'should accept a single package to install' do
16
+ @installer = create_pkg 'ruby'
17
+ @installer.packages.should == [ 'ruby' ]
18
+ end
19
+
20
+ it 'should accept an array of packages to install' do
21
+ @installer = create_pkg %w( gcc gdb g++ )
22
+ @installer.packages.should == ['gcc', 'gdb', 'g++']
23
+ end
24
+
25
+ end
26
+
27
+ describe 'during installation' do
28
+
29
+ before do
30
+ @installer = create_pkg 'ruby' do
31
+ pre :install, 'op1'
32
+ post :install, 'op2'
33
+ end
34
+ @install_commands = @installer.send :install_commands
35
+ end
36
+
37
+ it 'should invoke the freebsd_pkg installer for all specified packages' do
38
+ @install_commands.should =~ /pkg_add ruby/
39
+ end
40
+
41
+ it 'should automatically insert pre/post commands for the specified package' do
42
+ @installer.send(:install_sequence).should == [ 'op1', 'pkg_add ruby', 'op2' ]
43
+ end
44
+
45
+ it 'should install a specific version if defined'
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Sprinkle::Installers::OpensolarisPkg do
4
+
5
+ before do
6
+ @package = mock(Sprinkle::Package, :name => 'package')
7
+ end
8
+
9
+ def create_pkg(pkgs, &block)
10
+ Sprinkle::Installers::OpensolarisPkg.new(@package, pkgs, &block)
11
+ end
12
+
13
+ describe 'when created' do
14
+
15
+ it 'should accept a single package to install' do
16
+ @installer = create_pkg 'ruby'
17
+ @installer.packages.should == [ 'ruby' ]
18
+ end
19
+
20
+ it 'should accept an array of packages to install' do
21
+ @installer = create_pkg %w( gcc gdb g++ )
22
+ @installer.packages.should == ['gcc', 'gdb', 'g++']
23
+ end
24
+
25
+ end
26
+
27
+ describe 'during installation' do
28
+
29
+ before do
30
+ @installer = create_pkg 'ruby' do
31
+ pre :install, 'op1'
32
+ post :install, 'op2'
33
+ end
34
+ @install_commands = @installer.send :install_commands
35
+ end
36
+
37
+ it 'should invoke the freebsd_pkg installer for all specified packages' do
38
+ @install_commands.should =~ /pkg install ruby/
39
+ end
40
+
41
+ it 'should automatically insert pre/post commands for the specified package' do
42
+ @installer.send(:install_sequence).should == [ 'op1', 'pkg install ruby', 'op2' ]
43
+ end
44
+
45
+ it 'should install a specific version if defined'
46
+
47
+ end
48
+
49
+ end