furnish 0.0.4 → 0.1.0

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.
@@ -1,5 +1,6 @@
1
1
  require 'helper'
2
2
 
3
+ # NOTE the dummy classes in this file are defined in test/dummy_classes.rb
3
4
  class TestProvisionerGroup < Furnish::TestCase
4
5
  def test_constructor
5
6
  dummy = Dummy.new
@@ -8,22 +9,24 @@ class TestProvisionerGroup < Furnish::TestCase
8
9
  assert_equal('blarg', pg.name)
9
10
  assert_kind_of(Set, pg.dependencies)
10
11
  assert_empty(pg.dependencies)
11
- assert_equal('blarg', dummy.name)
12
+ assert_equal('blarg', dummy.furnish_group_name)
12
13
 
13
14
  dummy = Dummy.new
14
15
  pg = Furnish::ProvisionerGroup.new([dummy], 'blarg2', %w[blarg])
15
16
  assert_includes(pg, dummy)
16
17
  assert_equal('blarg2', pg.name)
17
18
  assert_equal(Set['blarg'], pg.dependencies)
18
- assert_equal('blarg2', dummy.name)
19
+ assert_equal('blarg2', dummy.furnish_group_name)
20
+
21
+ assert_raises(ArgumentError, "A non-empty list of provisioners must be provided") { Furnish::ProvisionerGroup.new([], 'blarg3') }
22
+ assert_raises(ArgumentError, "A non-empty list of provisioners must be provided") { Furnish::ProvisionerGroup.new(nil, 'blarg3') }
19
23
  end
20
24
 
21
25
  def test_up_down
22
- if ENV["FURNISH_DEBUG"]
23
- $stderr.puts "Testing logging, output muted"
24
- require 'stringio'
25
- Furnish.logger = Furnish::Logger.new(StringIO.new, 3)
26
- end
26
+ Furnish.logger.puts "Testing logging, output muted"
27
+
28
+ require 'stringio'
29
+ Furnish.logger = Furnish::Logger.new(StringIO.new, 3)
27
30
 
28
31
  store = Palsy::Object.new('dummy')
29
32
  dummy = Dummy.new
@@ -31,27 +34,176 @@ class TestProvisionerGroup < Furnish::TestCase
31
34
 
32
35
  assert(pg.startup, 'started')
33
36
  assert(store[ [pg.name, 'startup'].join("-") ], 'startup ran')
37
+ assert_nil(pg.group_state['index'])
38
+ assert_nil(pg.group_state['provisioner_args'])
39
+ assert_nil(pg.group_state['action'])
40
+ assert_nil(pg.group_state['provisioner'])
41
+
34
42
  assert(pg.shutdown, 'stopped')
35
43
  assert(store[ [pg.name, 'startup'].join("-") ], 'shutdown ran')
44
+ assert_nil(pg.group_state['index'])
45
+ assert_nil(pg.group_state['provisioner_args'])
46
+ assert_nil(pg.group_state['action'])
47
+ assert_nil(pg.group_state['provisioner'])
48
+
49
+ pg = Furnish::ProvisionerGroup.new([Dummy.new, StartFailDummy.new], 'track_test')
50
+ assert_raises(RuntimeError, "Could not provision #{pg.name} with provisioner #{dummy.class.name}") { pg.startup }
51
+ assert_equal(1, pg.group_state['index'])
52
+ assert_equal(:startup, pg.group_state['action'])
53
+ assert_equal(StartFailDummy, pg.group_state['provisioner'].class)
54
+ assert_equal({}, pg.group_state['provisioner_args'])
55
+
56
+ pg = Furnish::ProvisionerGroup.new([Dummy.new, StartExceptionDummy.new], 'track_test')
57
+ assert_raises(RuntimeError, "Could not provision #{pg.name} with provisioner #{dummy.class.name}") { pg.startup }
58
+ assert_equal(1, pg.group_state['index'])
59
+ assert_equal(:startup, pg.group_state['action'])
60
+ assert_equal(StartExceptionDummy, pg.group_state['provisioner'].class)
61
+ assert_equal({}, pg.group_state['provisioner_args'])
62
+
63
+ pg = Furnish::ProvisionerGroup.new([StopFailDummy.new, Dummy.new], 'track_test')
64
+ assert_raises(RuntimeError, "Could not deprovision #{pg.name}/#{dummy.class.name}") { pg.shutdown }
65
+ assert_equal(1, pg.group_state['index'])
66
+ assert_equal(:shutdown, pg.group_state['action'])
67
+ assert_equal(StopFailDummy, pg.group_state['provisioner'].class)
68
+
69
+ pg = Furnish::ProvisionerGroup.new([StopExceptionDummy.new, Dummy.new], 'track_test')
70
+ assert_raises(RuntimeError, "Could not deprovision #{pg.name}/#{dummy.class.name}") { pg.shutdown }
71
+ assert_equal(1, pg.group_state['index'])
72
+ assert_equal(:shutdown, pg.group_state['action'])
73
+ assert_equal(StopExceptionDummy, pg.group_state['provisioner'].class)
36
74
 
37
75
  dummy = StartFailDummy.new
38
- pg = Furnish::ProvisionerGroup.new(dummy, 'blarg2')
76
+ pg = Furnish::ProvisionerGroup.new([ReturnsDataDummy.new, dummy], 'blarg2')
39
77
  assert_raises(RuntimeError, "Could not provision #{pg.name} with provisioner #{dummy.class.name}") { pg.startup }
78
+ assert_equal(1, pg.group_state['index'])
79
+ assert_equal(:startup, pg.group_state['action'])
80
+ assert_equal(dummy.class, pg.group_state['provisioner'].class)
81
+ assert_equal({:started => 1}, pg.group_state['provisioner_args'])
40
82
 
41
83
  dummy = StopFailDummy.new
42
84
  pg = Furnish::ProvisionerGroup.new(dummy, 'blarg3')
43
85
  assert_raises(RuntimeError, "Could not deprovision #{pg.name}/#{dummy.class.name}") { pg.shutdown }
44
- pg.shutdown(true)
86
+ assert_equal(0, pg.group_state['index'])
87
+ assert_equal(:shutdown, pg.group_state['action'])
88
+ assert_equal(dummy.class, pg.group_state['provisioner'].class)
89
+ pg.shutdown({ }, true)
90
+ assert_nil(pg.group_state['index'])
91
+ assert_nil(pg.group_state['provisioner_args'])
92
+ assert_nil(pg.group_state['action'])
93
+ assert_nil(pg.group_state['provisioner'])
45
94
 
46
95
  dummy = StartExceptionDummy.new
47
96
  pg = Furnish::ProvisionerGroup.new(dummy, 'blarg4')
48
97
  assert_raises(RuntimeError, "Could not provision #{pg.name} with provisioner #{dummy.class.name}") { pg.startup }
98
+ assert_equal(:startup, pg.group_state['action'])
99
+ assert_equal(dummy.class, pg.group_state['provisioner'].class)
49
100
 
50
101
  dummy = StopExceptionDummy.new
51
102
  pg = Furnish::ProvisionerGroup.new(dummy, 'blarg4')
52
103
  assert_raises(RuntimeError, "Could not deprovision #{pg.name}/#{dummy.class.name}") { pg.shutdown }
53
- pg.shutdown(true)
104
+ assert_equal(0, pg.group_state['index'])
105
+ assert_equal(:shutdown, pg.group_state['action'])
106
+ assert_equal(dummy.class, pg.group_state['provisioner'].class)
107
+ pg.shutdown({ }, true)
108
+ assert_nil(pg.group_state['index'])
109
+ assert_nil(pg.group_state['provisioner_args'])
110
+ assert_nil(pg.group_state['action'])
111
+ assert_nil(pg.group_state['provisioner'])
54
112
  sleep 0.1 # wait for flush
55
- assert_match(%r!Deprovision #{dummy.class.name}/#{pg.name} had errors:!, Furnish.logger.string)
113
+ assert_includes(Furnish.logger.string.split(/\n/), "Deprovision of #{pg.name}[#{dummy.class.name}] had errors:")
114
+ end
115
+
116
+ def test_recover
117
+ [ RecoverableDummy, RaisingRecoverableDummy ].each do |prov|
118
+ pg = Furnish::ProvisionerGroup.new(prov.new, "#{prov.name}-recover1")
119
+ assert_raises(RuntimeError) { pg.startup }
120
+ assert_equal(0, pg.group_state['index'])
121
+ assert_equal(:startup, pg.group_state['action'])
122
+ assert_equal(prov, pg.group_state['provisioner'].class)
123
+ assert_equal({ }, pg.group_state['provisioner_args'])
124
+ assert(pg.recover)
125
+ assert_nil(pg.group_state['index'])
126
+ assert_nil(pg.group_state['provisioner_args'])
127
+ assert_nil(pg.group_state['action'])
128
+ assert_nil(pg.group_state['provisioner'])
129
+ assert(pg.first.run_state[:startup])
130
+
131
+ pg = Furnish::ProvisionerGroup.new(prov.new, "#{prov.name}-recover2")
132
+ assert_raises(RuntimeError) { pg.shutdown }
133
+ assert_equal(0, pg.group_state['index'])
134
+ assert_equal(:shutdown, pg.group_state['action'])
135
+ assert_equal(prov, pg.group_state['provisioner'].class)
136
+ assert_equal({ }, pg.group_state['provisioner_args'])
137
+ assert(pg.recover)
138
+ assert_nil(pg.group_state['index'])
139
+ assert_nil(pg.group_state['provisioner_args'])
140
+ assert_nil(pg.group_state['action'])
141
+ assert_nil(pg.group_state['provisioner'])
142
+ assert(pg.first.run_state[:shutdown])
143
+
144
+ pg = Furnish::ProvisionerGroup.new([Dummy.new, prov.new], "#{prov.name}-recover3")
145
+ assert_raises(RuntimeError) { pg.startup }
146
+ assert_equal(1, pg.group_state['index'])
147
+ assert_equal(:startup, pg.group_state['action'])
148
+ assert_equal(prov, pg.group_state['provisioner'].class)
149
+ assert(pg.group_state['provisioner_args'])
150
+ assert(pg.first.run_state[:startup])
151
+ refute(pg.last.run_state[:startup])
152
+ assert(pg.recover)
153
+ assert_nil(pg.group_state['index'])
154
+ assert_nil(pg.group_state['provisioner_args'])
155
+ assert_nil(pg.group_state['action'])
156
+ assert_nil(pg.group_state['provisioner'])
157
+ assert(pg.last.run_state[:startup])
158
+
159
+ pg = Furnish::ProvisionerGroup.new([Dummy.new, prov.new], "#{prov.name}-recover4")
160
+ assert_raises(RuntimeError) { pg.shutdown }
161
+ assert_equal(0, pg.group_state['index'])
162
+ assert_equal(:shutdown, pg.group_state['action'])
163
+ assert_equal(prov, pg.group_state['provisioner'].class)
164
+ assert_equal({ }, pg.group_state['provisioner_args'])
165
+ refute(pg.first.run_state[:shutdown])
166
+ refute(pg.last.run_state[:shutdown])
167
+ assert(pg.recover)
168
+ assert_nil(pg.group_state['index'])
169
+ assert_nil(pg.group_state['provisioner_args'])
170
+ assert_nil(pg.group_state['action'])
171
+ assert_nil(pg.group_state['provisioner'])
172
+
173
+ assert(pg.first.run_state[:shutdown])
174
+ assert(pg.last.run_state[:shutdown])
175
+
176
+ pg = Furnish::ProvisionerGroup.new([prov.new, Dummy.new], "#{prov.name}-recover5")
177
+ assert_raises(RuntimeError) { pg.startup }
178
+ assert_equal(0, pg.group_state['index'])
179
+ assert_equal(:startup, pg.group_state['action'])
180
+ assert_equal(prov, pg.group_state['provisioner'].class)
181
+ assert_equal({ }, pg.group_state['provisioner_args'])
182
+ refute(pg.first.run_state[:startup])
183
+ refute(pg.last.run_state[:startup])
184
+ assert(pg.recover)
185
+ assert_nil(pg.group_state['index'])
186
+ assert_nil(pg.group_state['provisioner_args'])
187
+ assert_nil(pg.group_state['action'])
188
+ assert_nil(pg.group_state['provisioner'])
189
+ assert_equal({ :startup => true }, pg.first.run_state[:startup])
190
+ assert(pg.last.run_state[:startup])
191
+
192
+ pg = Furnish::ProvisionerGroup.new([prov.new, Dummy.new], "#{prov.name}-recover6")
193
+ assert_raises(RuntimeError) { pg.shutdown }
194
+ assert_equal(1, pg.group_state['index'])
195
+ assert_equal(:shutdown, pg.group_state['action'])
196
+ assert_equal(prov, pg.group_state['provisioner'].class)
197
+ assert_equal({ }, pg.group_state['provisioner_args'])
198
+ refute(pg.first.run_state[:shutdown])
199
+ assert(pg.last.run_state[:shutdown])
200
+ assert(pg.recover)
201
+ assert_nil(pg.group_state['index'])
202
+ assert_nil(pg.group_state['provisioner_args'])
203
+ assert_nil(pg.group_state['action'])
204
+ assert_nil(pg.group_state['provisioner'])
205
+ assert_equal({ :shutdown => true }, pg.first.run_state[:shutdown])
206
+ assert(pg.last.run_state[:shutdown])
207
+ end
56
208
  end
57
209
  end
@@ -2,14 +2,12 @@ require 'helper'
2
2
 
3
3
  class TestSchedulerBasic < Furnish::SchedulerTestCase
4
4
  def test_schedule_provision
5
- sched = Furnish::Scheduler.new
6
-
7
5
  assert(sched.schedule_provision('blarg', [Dummy.new]), 'we can schedule')
8
6
  assert_includes(sched.vm.waiters.keys, 'blarg', 'exists in the waiters')
9
7
  assert_includes(sched.vm.groups.keys, 'blarg', 'exists in the vm group set')
10
8
  assert_equal(1, sched.vm.groups['blarg'].count, 'one item array')
11
9
  assert_kind_of(Furnish::Provisioner::Dummy, sched.vm.groups['blarg'].first, 'first object is our dummy object')
12
- assert_equal('blarg', sched.vm.groups['blarg'].first.name, 'name is set properly')
10
+ assert_equal('blarg', sched.vm.groups['blarg'].first.furnish_group_name, 'name is set properly')
13
11
  assert_nil(sched.schedule_provision('blarg', [Dummy.new]), 'does not schedule twice')
14
12
 
15
13
  assert(sched.schedule_provision('blarg2', Dummy.new), 'scheduling does not need an array')
@@ -17,7 +15,7 @@ class TestSchedulerBasic < Furnish::SchedulerTestCase
17
15
  assert_includes(sched.vm.groups.keys, 'blarg2', 'exists in the vm group set')
18
16
  assert_kind_of(Furnish::ProvisionerGroup, sched.vm.groups['blarg2'], 'boxes our single item')
19
17
  assert_kind_of(Furnish::Provisioner::Dummy, sched.vm.groups['blarg2'].first, 'first object is our dummy object')
20
- assert_equal('blarg2', sched.vm.groups['blarg2'].first.name, 'name is set properly')
18
+ assert_equal('blarg2', sched.vm.groups['blarg2'].first.furnish_group_name, 'name is set properly')
21
19
 
22
20
  assert_raises(
23
21
  RuntimeError,
@@ -30,4 +28,59 @@ class TestSchedulerBasic < Furnish::SchedulerTestCase
30
28
  assert_includes(sched.vm.waiters.keys, 'blarg4', 'included in waiters list')
31
29
  assert_includes(sched.vm.dependencies['blarg4'], 'blarg2', 'dependencies are tracked for provision')
32
30
  end
31
+
32
+ def test_protocol
33
+ # NOTE these classes are in test/dummy_classes.rb
34
+ assert(sched.schedule_provision('blarg', [YieldsIntegerBarDummy.new, AcceptsIntegerBarDummy.new]))
35
+ assert(sched.schedule_provision('blarg1', [YieldsIntegerBarDummy.new, RequiresBarDummy.new]))
36
+ assert(sched.schedule_provision('blarg2', [YieldsStringBarDummy.new, AcceptsStringBarDummy.new]))
37
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg3', [YieldsStringBarDummy.new, RequiresBarDummy.new]) }
38
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg4', [YieldsStringBarDummy.new, AcceptsIntegerBarDummy.new]) }
39
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg5', [YieldsFooDummy.new, AcceptsIntegerBarDummy.new]) }
40
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg6', [YieldsFooDummy.new, RequiresBarDummy.new]) }
41
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg7', [YieldsIntegerBarDummy.new, AcceptsFooDummy.new]) }
42
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg8', [YieldsStringBarDummy.new, AcceptsFooDummy.new]) }
43
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg9', [YieldsIntegerBarDummy.new, RequiresBarAcceptsFooDummy.new]) }
44
+ assert(sched.schedule_provision('blarg10', [YieldsFooBarDummy.new, RequiresBarAcceptsFooDummy.new]))
45
+ assert(sched.schedule_provision('blarg11', [YieldsFooBarDummy.new, AcceptsFooDummy.new]))
46
+ assert(sched.schedule_provision('blarg12', [YieldsFooBarDummy.new, AcceptsIntegerBarDummy.new]))
47
+ assert(sched.schedule_provision('blarg13', [YieldsFooDummy.new, AcceptsFooDummy.new]))
48
+ assert(sched.schedule_provision('blarg14', [YieldsFooBarDummy.new, RequiresBarDummy.new]))
49
+ assert(sched.schedule_provision('blarg15', [YieldsIntegerBarDummy.new, YieldsFooDummy.new, RequiresBarAcceptsFooDummy.new]))
50
+
51
+ assert(sched.schedule_provision('blarg-shutdown', [ShutdownAcceptsIntegerBarDummy.new, ShutdownYieldsIntegerBarDummy.new]))
52
+ assert(sched.schedule_provision('blarg1-shutdown', [ShutdownRequiresBarDummy.new, ShutdownYieldsIntegerBarDummy.new]))
53
+ assert(sched.schedule_provision('blarg2-shutdown', [ShutdownAcceptsStringBarDummy.new, ShutdownYieldsStringBarDummy.new]))
54
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg3-shutdown', [ShutdownRequiresBarDummy.new, ShutdownYieldsStringBarDummy.new] ) }
55
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg4-shutdown', [ShutdownAcceptsIntegerBarDummy.new, ShutdownYieldsStringBarDummy.new]) }
56
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg5-shutdown', [ShutdownAcceptsIntegerBarDummy.new, ShutdownYieldsFooDummy.new]) }
57
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg6-shutdown', [ShutdownRequiresBarDummy.new, ShutdownYieldsFooDummy.new]) }
58
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg7-shutdown', [ShutdownAcceptsFooDummy.new, ShutdownYieldsIntegerBarDummy.new]) }
59
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg8-shutdown', [ShutdownAcceptsFooDummy.new, ShutdownYieldsStringBarDummy.new]) }
60
+ assert_raises(ArgumentError) { sched.schedule_provision('blarg9-shutdown', [ShutdownRequiresBarAcceptsFooDummy.new, ShutdownYieldsIntegerBarDummy.new]) }
61
+ assert(sched.schedule_provision('blarg10-shutdown', [ShutdownRequiresBarAcceptsFooDummy.new, ShutdownYieldsFooBarDummy.new]))
62
+ assert(sched.schedule_provision('blarg11-shutdown', [ShutdownAcceptsFooDummy.new, ShutdownYieldsFooBarDummy.new]))
63
+ assert(sched.schedule_provision('blarg12-shutdown', [ShutdownAcceptsIntegerBarDummy.new, ShutdownYieldsFooBarDummy.new]))
64
+ assert(sched.schedule_provision('blarg13-shutdown', [ShutdownAcceptsFooDummy.new, ShutdownYieldsFooDummy.new]))
65
+ assert(sched.schedule_provision('blarg14-shutdown', [ShutdownRequiresBarDummy.new, ShutdownYieldsFooBarDummy.new]))
66
+ assert(sched.schedule_provision('blarg15-shutdown', [ShutdownRequiresBarAcceptsFooDummy.new, ShutdownYieldsFooDummy.new, ShutdownYieldsIntegerBarDummy.new]))
67
+ end
68
+
69
+ def test_cascade_protocol
70
+ assert(sched.schedule_provision('blarg-cascade1', [ReturnsInfoDummy.new, Dummy.new, Dummy.new]))
71
+ assert(sched.schedule_provision('blarg-cascade2', [Dummy.new, Dummy.new, ReturnsInfoDummy.new]))
72
+ sched.run
73
+ assert(sched.serial || sched.running?)
74
+ sched.wait_for('blarg-cascade1', 'blarg-cascade2')
75
+ assert_solved('blarg-cascade1')
76
+ assert_solved('blarg-cascade2')
77
+ cascade1 = sched.vm.groups['blarg-cascade1']
78
+ cascade2 = sched.vm.groups['blarg-cascade2']
79
+ assert_equal({ :startup_blah => [1] }, cascade1.last.run_state[:startup])
80
+ assert_equal({ :startup_blah => [1] }, cascade2.last.run_state[:startup])
81
+ sched.teardown
82
+
83
+ assert_equal({ :shutdown_blah => [1] }, cascade1.first.run_state[:shutdown])
84
+ assert_equal({ :shutdown_blah => [1] }, cascade2.first.run_state[:shutdown])
85
+ end
33
86
  end
@@ -1,19 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class SleepyDummy < Dummy
4
- def startup(*args)
5
- sleep 1
6
- super
7
- end
8
- end
9
-
10
- class SleepyFailingDummy < SleepyDummy
11
- def startup(*args)
12
- super
13
- return false
14
- end
15
- end
16
-
3
+ # NOTE the dummy classes in this file are defined in test/dummy_classes.rb
17
4
  class TestSchedulerThreaded < Furnish::RestartingSchedulerTestCase
18
5
  def setup
19
6
  super
@@ -32,12 +19,13 @@ class TestSchedulerThreaded < Furnish::RestartingSchedulerTestCase
32
19
  #
33
20
  # this actually tests that functionality, so kill the monitor prematurely.
34
21
  #
35
- @monitor.kill rescue nil
36
22
  assert(sched.schedule_provision('blarg', SleepyFailingDummy.new))
37
23
  sched.run
38
24
  assert(sched.running?, 'running after provision')
39
- sleep 3
40
- assert_raises(RuntimeError, "Could not provision blarg with provisioner SleepyFailingDummy") { sched.running? }
25
+ sleep 4
26
+ assert(sched.running?, 'still running after failure')
27
+ assert_kind_of(RuntimeError, sched.needs_recovery['blarg'])
28
+ assert_equal("Could not provision blarg[SleepyFailingDummy]", sched.needs_recovery['blarg'].message)
41
29
  sched.teardown
42
30
  refute(sched.running?, 'not running after teardown')
43
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: furnish
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-25 00:00:00.000000000 Z
12
+ date: 2013-04-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: palsy
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.2
21
+ version: 0.0.4
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.0.2
29
+ version: 0.0.4
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -80,17 +80,17 @@ dependencies:
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - ! '>='
83
+ - - ~>
84
84
  - !ruby/object:Gem::Version
85
- version: '0'
85
+ version: 0.0.8
86
86
  type: :development
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - ! '>='
91
+ - - ~>
92
92
  - !ruby/object:Gem::Version
93
- version: '0'
93
+ version: 0.0.8
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: rdoc
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -156,17 +156,22 @@ files:
156
156
  - furnish.gemspec
157
157
  - lib/furnish.rb
158
158
  - lib/furnish/logger.rb
159
+ - lib/furnish/protocol.rb
159
160
  - lib/furnish/provisioner.rb
160
161
  - lib/furnish/provisioner_group.rb
162
+ - lib/furnish/provisioners/api.rb
161
163
  - lib/furnish/provisioners/dummy.rb
162
164
  - lib/furnish/scheduler.rb
163
165
  - lib/furnish/test.rb
164
166
  - lib/furnish/version.rb
165
167
  - lib/furnish/vm.rb
168
+ - test/dummy_classes.rb
166
169
  - test/helper.rb
167
170
  - test/mt_cases.rb
171
+ - test/test_api.rb
168
172
  - test/test_dummy.rb
169
173
  - test/test_logger.rb
174
+ - test/test_protocol.rb
170
175
  - test/test_provisioner_group.rb
171
176
  - test/test_scheduler_basic.rb
172
177
  - test/test_scheduler_serial.rb
@@ -183,10 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
183
188
  requirements:
184
189
  - - ! '>='
185
190
  - !ruby/object:Gem::Version
186
- version: '0'
187
- segments:
188
- - 0
189
- hash: 2505276676287387659
191
+ version: 1.9.3
190
192
  required_rubygems_version: !ruby/object:Gem::Requirement
191
193
  none: false
192
194
  requirements:
@@ -195,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
197
  version: '0'
196
198
  segments:
197
199
  - 0
198
- hash: 2505276676287387659
200
+ hash: 4039116121410524587
199
201
  requirements: []
200
202
  rubyforge_project:
201
203
  rubygems_version: 1.8.25
@@ -203,10 +205,13 @@ signing_key:
203
205
  specification_version: 3
204
206
  summary: A novel way to do virtual machine provisioning
205
207
  test_files:
208
+ - test/dummy_classes.rb
206
209
  - test/helper.rb
207
210
  - test/mt_cases.rb
211
+ - test/test_api.rb
208
212
  - test/test_dummy.rb
209
213
  - test/test_logger.rb
214
+ - test/test_protocol.rb
210
215
  - test/test_provisioner_group.rb
211
216
  - test/test_scheduler_basic.rb
212
217
  - test/test_scheduler_serial.rb