automateit 0.71102 → 0.71103

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,18 @@
1
+ require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
2
+
3
+ describe Object, "with extensions" do
4
+ it "should have unique methods on an object" do
5
+ INTERPRETER.unique_methods.should include("preview")
6
+ end
7
+
8
+ it "should have unique methods on a class" do
9
+ AutomateIt::Interpreter.unique_methods.should include("invoke")
10
+ end
11
+
12
+ it "should parse arguments and options" do
13
+ args, opts = args_and_opts(:foo, :bar, :baz => :quux)
14
+
15
+ args.should == [:foo, :bar]
16
+ opts.should == {:baz => :quux}
17
+ end
18
+ end
@@ -2,12 +2,44 @@ require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb"
2
2
 
3
3
  #===[ stub classes ]====================================================# {{{
4
4
 
5
+ #---[ MyBrokenManager ]-------------------------------------------------
6
+
7
+ class MyBrokenManager < AutomateIt::Plugin::Manager
8
+ def mymethod(opts)
9
+ dispatch(opts)
10
+ end
11
+ end
12
+
13
+ class MyBrokenManager::BaseDriver < AutomateIt::Plugin::Driver
14
+ # Is abstract by default
15
+ end
16
+
17
+ class MyBrokenManager::MyBrokenDriver < MyBrokenManager::BaseDriver
18
+ def suitability(method, *args)
19
+ return {:omfg => :lol}
20
+ end
21
+ end
22
+
23
+ #---[ MyDriverlessManager ]---------------------------------------------
24
+
25
+ class MyDriverlessManager < AutomateIt::Plugin::Manager
26
+ def mymethod(opts)
27
+ dispatch(opts)
28
+ end
29
+ end
30
+
31
+ #---[ MyManager ]-------------------------------------------------------
32
+
5
33
  class MyManager < AutomateIt::Plugin::Manager
6
34
  alias_methods :mymethod
7
35
 
8
36
  def mymethod(opts)
9
37
  dispatch(opts)
10
38
  end
39
+
40
+ def mynonexistentmethod(opts)
41
+ dispatch_safely(opts)
42
+ end
11
43
  end
12
44
 
13
45
  class MyManager::BaseDriver < AutomateIt::Plugin::Driver
@@ -43,6 +75,25 @@ class MyManager::MyUnimplementedDriver < MyManager::BaseDriver
43
75
  # +mymethod+ method deliberately not implemented to test errors
44
76
  end
45
77
 
78
+ class MyManager::MyInvalidDependsOnDriver < MyManager::BaseDriver
79
+ depends_on nil
80
+ end
81
+
82
+ class MyManager::MyInvalidDependencyTypeDriver < MyManager::BaseDriver
83
+ depends_on :omfg => :lol
84
+ end
85
+
86
+ class MyManager::MyNonexistentLibrariesDependencyDriver < MyManager::BaseDriver
87
+ depends_on :libraries => %w(qjkwerlkjqweluxovxuqwe)
88
+ end
89
+
90
+ class MyManager::MyNonexistentProgramsDependencyDriver < MyManager::BaseDriver
91
+ depends_on :programs => %(qlkjwesziuxkjlrjklqwel)
92
+ end
93
+
94
+ class MyManager::MyValidLibraryDependencyDriver < MyManager::BaseDriver
95
+ depends_on :requires => %w(set)
96
+ end
46
97
 
47
98
  class MyManager::MyFirstDriver < MyManager::BaseDriver
48
99
  depends_on :directories => ["/"]
@@ -169,6 +220,32 @@ describe "MyManager's drivers" do
169
220
  raise_error(NotImplementedError, /non_existent/)
170
221
  end
171
222
 
223
+ it "should not consider drivers that declare absurd dependencies to be available" do
224
+ @m[:my_invalid_depends_on_driver].should_not be_available
225
+ end
226
+
227
+ it "should not consider drivers that depend on non-existent library dependencies to be available" do
228
+ @m[:my_nonexistent_libraries_dependency_driver].should_not be_available
229
+ end
230
+
231
+ it "should not consider drivers that depend on non-existent program dependencies to be available" do
232
+ @m[:my_nonexistent_programs_dependency_driver].should_not be_available
233
+ end
234
+
235
+ it "should figure out why drivers aren't available" do
236
+ lambda {
237
+ @m[:my_nonexistent_programs_dependency_driver].send(:_raise_unless_available)
238
+ }.should raise_error(NotImplementedError, /Missing.+programs.+qlkjwesziuxkjlrjklqwel/)
239
+ end
240
+
241
+ it "should fail when drivers define unknown dependency types" do
242
+ lambda { @m[:my_invalid_dependency_type_driver].available? }.should raise_error(TypeError)
243
+ end
244
+
245
+ it "should consider driver with valid library to be available" do
246
+ @m[:my_valid_library_dependency_driver].available?.should be_true
247
+ end
248
+
172
249
  it "should have a token" do
173
250
  MyManager::MyFirstDriver.token.should == :my_first_driver
174
251
  end
@@ -234,6 +311,10 @@ describe "MyManager's drivers" do
234
311
  @m.mymethod(:one => 1, :with => :my_first_driver).should == 1
235
312
  end
236
313
 
314
+ it "should dispatch safely" do
315
+ @m.mynonexistentmethod(:hello => :world).should be_nil
316
+ end
317
+
237
318
  it "should dispatch safely to non-suitable drivers" do
238
319
  @m.dispatch_safely_to(:asdf).should be_nil
239
320
  end
@@ -252,6 +333,38 @@ describe "MyManager's drivers" do
252
333
 
253
334
  end
254
335
 
336
+ describe "MyBrokenManager" do
337
+ before(:all) do
338
+ @m = MyBrokenManager.new
339
+ end
340
+
341
+ it "should fail to find an invalid driver" do
342
+ lambda { @m.driver_for(:mymethod) }.should raise_error(NotImplementedError)
343
+ end
344
+ end
345
+
346
+ describe "MyDriverlessManager" do
347
+ before(:all) do
348
+ @m = MyDriverlessManager.new
349
+ end
350
+
351
+ it "should fail to find a driver for manager without drivers" do
352
+ lambda { @m.driver_for(:mymethod) }.should raise_error(NotImplementedError)
353
+ end
354
+ end
355
+
356
+ describe "MyManagerlessDriver" do
357
+ it "should fail to create a driver without a manager" do
358
+ lambda {
359
+ self.class.module_eval do
360
+ class MyManagerlessDriver < AutomateIt::Plugin::Driver
361
+ # Will fail
362
+ end
363
+ end
364
+ }.should raise_error(TypeError)
365
+ end
366
+ end
367
+
255
368
  describe AutomateIt::Interpreter do
256
369
  before(:all) do
257
370
  @a = AutomateIt::Interpreter.new
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
2
+
3
+ describe String, "with shell escape" do
4
+ it "should add quotes to string" do
5
+ "foo".shell_escape.should == '"foo"'
6
+ end
7
+
8
+ it "should escape quotes within string" do
9
+ '"foo"'.shell_escape.should == '"\"foo\""'
10
+ end
11
+ end
@@ -1,21 +1,21 @@
1
1
  require File.join(File.dirname(File.expand_path(__FILE__)), "/../spec_helper.rb")
2
2
 
3
- describe "AutomateIt::TagManager", :shared => true do
4
- before(:all) do
5
- @a = AutomateIt.new
6
- @a.address_manager.should_receive(:hostnames).any_number_of_times.and_return(["kurou", "kurou.foo"])
7
- @a.platform_manager.setup(
8
- :default => :struct,
9
- :struct => {
10
- :os => "mizrahi",
11
- :arch => "realian",
12
- :distro => "momo",
13
- :version => "s100",
14
- }
15
- )
16
- @m = @a.tag_manager
17
- end
3
+ def prepare_for_tagmanager
4
+ @a = AutomateIt.new
5
+ @a.address_manager.should_receive(:hostnames).any_number_of_times.and_return(["kurou", "kurou.foo"])
6
+ @a.platform_manager.setup(
7
+ :default => :struct,
8
+ :struct => {
9
+ :os => "mizrahi",
10
+ :arch => "realian",
11
+ :distro => "momo",
12
+ :version => "s100",
13
+ }
14
+ )
15
+ @m = @a.tag_manager
16
+ end
18
17
 
18
+ describe "AutomateIt::TagManager", :shared => true do
19
19
  it "should have tags" do
20
20
  @a.tags.should be_a_kind_of(Enumerable)
21
21
  end
@@ -152,6 +152,8 @@ describe "AutomateIt::TagManager::Struct" do
152
152
  it_should_behave_like "AutomateIt::TagManager"
153
153
 
154
154
  before(:all) do
155
+ prepare_for_tagmanager
156
+
155
157
  @m.setup(
156
158
  :default => :struct,
157
159
  :struct => {
@@ -216,6 +218,7 @@ describe "AutomateIt::TagManager::YAML" do
216
218
  end
217
219
 
218
220
  before(:all) do
221
+ prepare_for_tagmanager
219
222
  setup_yaml_tags
220
223
  end
221
224
 
@@ -230,3 +233,45 @@ describe "AutomateIt::TagManager::YAML" do
230
233
  @a.should be_tagged(tag)
231
234
  end
232
235
  end
236
+
237
+ describe "AutomateIt::TagManager::YAML", "with empty struct" do
238
+ def setup_yaml_tags
239
+ @m[:yaml].should_receive(:_read).any_number_of_times.with("demo.yml").and_return(<<-EOB)
240
+ # Empty!
241
+ EOB
242
+ @m.setup(
243
+ :default => :yaml,
244
+ :file => "demo.yml"
245
+ )
246
+ end
247
+ before(:all) do
248
+ prepare_for_tagmanager
249
+ setup_yaml_tags
250
+ end
251
+
252
+ it "should tolerate empty struct" do
253
+ @a.tagged?("foo").should be_false
254
+ end
255
+ end
256
+
257
+
258
+ describe "AutomateIt::TagManager::YAML", "with no leaves" do
259
+ def setup_yaml_tags
260
+ @m[:yaml].should_receive(:_read).any_number_of_times.with("demo.yml").and_return(<<-EOB)
261
+ <%="apache_servers"%>:
262
+ EOB
263
+ @m.setup(
264
+ :default => :yaml,
265
+ :file => "demo.yml"
266
+ )
267
+ end
268
+ before(:all) do
269
+ prepare_for_tagmanager
270
+ setup_yaml_tags
271
+ end
272
+
273
+ it "should tolerate empty leaves" do
274
+ @a.tagged?("apache_servers").should be_false
275
+ end
276
+ end
277
+
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: automateit
5
5
  version: !ruby/object:Gem::Version
6
- version: "0.71102"
7
- date: 2007-11-02 00:00:00 -07:00
6
+ version: "0.71103"
7
+ date: 2007-11-03 00:00:00 -07:00
8
8
  summary: AutomateIt is an open source tool for automating the setup and maintenance of servers, applications and their dependencies.
9
9
  require_paths:
10
10
  - lib
@@ -65,6 +65,7 @@ files:
65
65
  - bin/automateit
66
66
  - bin/ai
67
67
  - bin/aitag
68
+ - bin/aissh
68
69
  - examples/basic/install.log
69
70
  - examples/basic/Rakefile
70
71
  - examples/basic/config/tags.yml
@@ -81,9 +82,9 @@ files:
81
82
  - lib/hashcache.rb
82
83
  - lib/automateit.rb
83
84
  - lib/tempster.rb
85
+ - lib/nitpick.rb
84
86
  - lib/queued_logger.rb
85
87
  - lib/helpful_erb.rb
86
- - lib/automateit.rb.orig
87
88
  - lib/nested_error.rb
88
89
  - lib/automateit/tag_manager.rb
89
90
  - lib/automateit/service_manager.rb
@@ -153,6 +154,7 @@ files:
153
154
  - lib/automateit/template_manager/base.rb
154
155
  - lib/ext/metaclass.rb
155
156
  - lib/ext/object.rb
157
+ - lib/ext/shell_escape.rb
156
158
  - misc/index_gem_repository.rb
157
159
  - misc/setup_rubygems.sh
158
160
  - misc/setup_egg.rb
@@ -167,7 +169,11 @@ files:
167
169
  - spec/unit/hashcache_spec.rb
168
170
  - spec/unit/interpreter_spec.rb
169
171
  - spec/unit/platform_manager_spec.rb
172
+ - spec/unit/address_manager_spec.rb
170
173
  - spec/unit/edit_manager_spec.rb
174
+ - spec/unit/shell_escape_spec.rb
175
+ - spec/unit/object_spec.rb
176
+ - spec/unit/nested_error_spec.rb
171
177
  - spec/integration/service_manager_sysv_spec.rb
172
178
  - spec/integration/template_manager_erb_spec.rb
173
179
  - spec/integration/package_manager_spec.rb
@@ -177,6 +183,7 @@ files:
177
183
  - spec/integration/account_manager_spec.rb
178
184
  - spec/integration/examples_spec.rb
179
185
  - spec/integration/cli_spec.rb
186
+ - spec/integration/account_manager_nscd_spec.rb
180
187
  - spec/integration/address_manager_portable_spec.rb
181
188
  - spec/integration/tempster_spec.rb
182
189
  - spec/integration/examples_spec_editor.rb
@@ -198,7 +205,11 @@ test_files:
198
205
  - spec/unit/hashcache_spec.rb
199
206
  - spec/unit/interpreter_spec.rb
200
207
  - spec/unit/platform_manager_spec.rb
208
+ - spec/unit/address_manager_spec.rb
201
209
  - spec/unit/edit_manager_spec.rb
210
+ - spec/unit/shell_escape_spec.rb
211
+ - spec/unit/object_spec.rb
212
+ - spec/unit/nested_error_spec.rb
202
213
  - spec/integration/service_manager_sysv_spec.rb
203
214
  - spec/integration/template_manager_erb_spec.rb
204
215
  - spec/integration/package_manager_spec.rb
@@ -208,6 +219,7 @@ test_files:
208
219
  - spec/integration/account_manager_spec.rb
209
220
  - spec/integration/examples_spec.rb
210
221
  - spec/integration/cli_spec.rb
222
+ - spec/integration/account_manager_nscd_spec.rb
211
223
  - spec/integration/address_manager_portable_spec.rb
212
224
  - spec/integration/tempster_spec.rb
213
225
  - spec/integration/examples_spec_editor.rb
@@ -237,6 +249,7 @@ executables:
237
249
  - automateit
238
250
  - ai
239
251
  - aitag
252
+ - aissh
240
253
  extensions: []
241
254
 
242
255
  requirements: []
metadata.gz.sig CHANGED
@@ -1,2 +1 @@
1
- �i�$7O M�M����j�߻�$�W�[�ٷ��zn���y���Sz��������8 0#�����W��%��yħ�V�K���_������<:1_F�~���܇�VFw6T]E�!`'В�ʚYn�/���9R���W(���hw��V����L"�a��J#BAIr�O��m��_��x�;y��_��N>���D˛��)7me
2
- �����`L´F} ��lX(�c�x�♭˿��*��4�uR�K�
1
+ /DS���U�8?�y�p!Df x�K �cO,�+ Ng?�9�#�a-� qU69��h��icE)�����SJ`ޑj��YqY@逿58��H
@@ -1,65 +0,0 @@
1
- # == Dependencies
2
-
3
- # Standard libraries
4
- require 'etc'
5
- require 'fileutils'
6
- require 'find'
7
- require 'logger'
8
- require 'open3'
9
- require 'pp'
10
- require 'pathname'
11
- require 'resolv'
12
- require 'set'
13
- require 'socket'
14
- require 'yaml'
15
- require 'erb'
16
-
17
- # Load ActiveSupport pieces individually to save ~0.5s
18
- ### require 'active_support'
19
- gem 'activesupport'
20
- require 'active_support/core_ext/array' # [].extract_options, new in AS 1.4.4
21
- require 'active_support/core_ext/blank' # foo.blank?
22
- require 'active_support/core_ext/class/attribute_accessors' # cattr_accessor
23
- require 'active_support/core_ext/class/inheritable_attributes' # inheritable_cattr_accessor
24
- require 'active_support/core_ext/module/aliasing' # alias_method_chain
25
- require 'active_support/core_ext/string' # "asdf".demodulize.underscore
26
- require 'active_support/clean_logger' # cleans up Logger output
27
- require 'active_support/core_ext/symbol' # [:foo, :bar].map(&:to_s)
28
-
29
- # Handle ActiveSupport includes
30
- require 'active_support/core_ext/hash/keys' # {:foo => :bar}.stringify_keys
31
- Hash.module_eval{include ActiveSupport::CoreExtensions::Hash::Keys}
32
-
33
- # Extensions
34
- require 'ext/object.rb'
35
- require 'ext/metaclass.rb'
36
-
37
- # Helpers
38
- require 'hashcache'
39
- require 'queued_logger'
40
- require 'tempster'
41
- require 'helpful_erb'
42
- require 'nested_error'
43
-
44
- # Core
45
- require 'automateit/root'
46
- require 'automateit/constants'
47
- require 'automateit/error'
48
- require 'automateit/common'
49
- require 'automateit/interpreter'
50
- require 'automateit/plugin'
51
- require 'automateit/cli'
52
- require 'automateit/project'
53
-
54
- # Plugins which must be loaded early
55
- require 'automateit/shell_manager'
56
- require 'automateit/platform_manager' # requires shell
57
- require 'automateit/address_manager' # requires shell
58
- require 'automateit/tag_manager' # requires address, platform
59
- require 'automateit/field_manager' # requires shell
60
- require 'automateit/service_manager' # requires shell
61
- require 'automateit/package_manager' # requires shell
62
- require 'automateit/template_manager'
63
- require 'automateit/edit_manager'
64
- require 'automateit/account_manager'
65
- require 'automateit/download_manager'