rouster 0.7 → 0.41
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -3
- data/README.md +7 -241
- data/Rakefile +18 -55
- data/Vagrantfile +8 -26
- data/lib/rouster.rb +183 -404
- data/lib/rouster/deltas.rb +118 -577
- data/lib/rouster/puppet.rb +34 -209
- data/lib/rouster/testing.rb +59 -366
- data/lib/rouster/tests.rb +19 -70
- data/path_helper.rb +7 -5
- data/rouster.gemspec +1 -3
- data/test/basic.rb +1 -4
- data/test/functional/deltas/test_get_groups.rb +2 -74
- data/test/functional/deltas/test_get_packages.rb +4 -86
- data/test/functional/deltas/test_get_ports.rb +1 -26
- data/test/functional/deltas/test_get_services.rb +4 -43
- data/test/functional/deltas/test_get_users.rb +2 -35
- data/test/functional/puppet/test_facter.rb +1 -41
- data/test/functional/puppet/test_get_puppet_star.rb +68 -0
- data/test/functional/test_caching.rb +1 -5
- data/test/functional/test_dirs.rb +0 -25
- data/test/functional/test_get.rb +6 -10
- data/test/functional/test_inspect.rb +1 -1
- data/test/functional/test_is_file.rb +1 -17
- data/test/functional/test_new.rb +22 -233
- data/test/functional/test_put.rb +11 -9
- data/test/functional/test_restart.rb +4 -1
- data/test/functional/test_run.rb +3 -2
- data/test/puppet/test_apply.rb +11 -13
- data/test/puppet/test_roles.rb +173 -0
- data/test/unit/test_new.rb +0 -88
- data/test/unit/test_parse_ls_string.rb +0 -67
- data/test/unit/testing/test_validate_file.rb +47 -39
- data/test/unit/testing/test_validate_package.rb +10 -36
- metadata +6 -46
- data/.reek +0 -63
- data/.travis.yml +0 -11
- data/Gemfile +0 -17
- data/Gemfile.lock +0 -102
- data/LICENSE +0 -9
- data/examples/aws.rb +0 -85
- data/examples/openstack.rb +0 -61
- data/examples/passthrough.rb +0 -71
- data/lib/rouster/vagrant.rb +0 -311
- data/plugins/aws.rb +0 -347
- data/plugins/openstack.rb +0 -136
- data/test/functional/deltas/test_get_crontab.rb +0 -161
- data/test/functional/deltas/test_get_os.rb +0 -68
- data/test/functional/test_is_in_file.rb +0 -40
- data/test/functional/test_passthroughs.rb +0 -94
- data/test/functional/test_validate_file.rb +0 -131
- data/test/unit/puppet/resources/puppet_run_with_failed_exec +0 -59
- data/test/unit/puppet/resources/puppet_run_with_successful_exec +0 -61
- data/test/unit/puppet/test_get_puppet_star.rb +0 -91
- data/test/unit/puppet/test_puppet_parsing.rb +0 -44
- data/test/unit/testing/resources/osx-launchd +0 -285
- data/test/unit/testing/resources/rhel-systemd +0 -46
- data/test/unit/testing/resources/rhel-systemv +0 -41
- data/test/unit/testing/resources/rhel-upstart +0 -20
- data/test/unit/testing/test_get_services.rb +0 -178
- data/test/unit/testing/test_validate_cron.rb +0 -78
- data/test/unit/testing/test_validate_port.rb +0 -103
@@ -8,7 +8,7 @@ class TestDeltasGetPorts < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
def setup
|
10
10
|
assert_nothing_raised do
|
11
|
-
@app = Rouster.new(:name => 'app'
|
11
|
+
@app = Rouster.new(:name => 'app')
|
12
12
|
end
|
13
13
|
|
14
14
|
@app.up()
|
@@ -95,7 +95,6 @@ class TestDeltasGetPorts < Test::Unit::TestCase
|
|
95
95
|
}
|
96
96
|
|
97
97
|
@app.deltas[:ports] = stock
|
98
|
-
@app.cache[:ports] = Time.now.to_i # since we're faking the contents, we also need to fake other artifacts that would have been generated
|
99
98
|
|
100
99
|
assert_equal(true, @app.is_port_open?(1234, 'tcp', true))
|
101
100
|
assert_equal(true, @app.is_port_active?(22, 'tcp', true))
|
@@ -108,35 +107,11 @@ class TestDeltasGetPorts < Test::Unit::TestCase
|
|
108
107
|
assert_equal(false, @app.is_port_active?(1234, 'tcp', true))
|
109
108
|
|
110
109
|
# caching/argument default validation -- can't currently do this, don't know what ports will be open on others systems
|
111
|
-
# TODO but can fix this by running some ncatish commands
|
112
110
|
#assert_equal(true, @app.is_port_active?(22))
|
113
111
|
#assert_equal(true, @app.is_port_open?(1234))
|
114
112
|
|
115
113
|
end
|
116
114
|
|
117
|
-
def test_happy_path_cache_invalidation
|
118
|
-
res1, res2 = nil, nil
|
119
|
-
|
120
|
-
assert_nothing_raised do
|
121
|
-
res1 = @app.get_ports(true)
|
122
|
-
end
|
123
|
-
|
124
|
-
first_cache_time = @app.cache[:ports]
|
125
|
-
|
126
|
-
sleep (@app.cache_timeout + 1)
|
127
|
-
|
128
|
-
assert_nothing_raised do
|
129
|
-
res2 = @app.get_ports(true)
|
130
|
-
end
|
131
|
-
|
132
|
-
second_cache_time = @app.cache[:ports]
|
133
|
-
|
134
|
-
assert_equal(res1, res2)
|
135
|
-
assert_not_equal(first_cache_time, second_cache_time)
|
136
|
-
assert(second_cache_time > first_cache_time)
|
137
|
-
|
138
|
-
end
|
139
|
-
|
140
115
|
def teardown
|
141
116
|
@app = nil
|
142
117
|
end
|
@@ -8,12 +8,13 @@ class TestDeltasGetServices < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
def setup
|
10
10
|
assert_nothing_raised do
|
11
|
-
@app = Rouster.new(:name => 'app'
|
11
|
+
@app = Rouster.new(:name => 'app')
|
12
12
|
end
|
13
13
|
|
14
14
|
@app.up()
|
15
15
|
|
16
|
-
|
16
|
+
# eventually this should be standardized (and symbolized?)
|
17
|
+
@allowed_states = %w(exists operational running stopped)
|
17
18
|
end
|
18
19
|
|
19
20
|
def test_happy_path
|
@@ -28,51 +29,11 @@ class TestDeltasGetServices < Test::Unit::TestCase
|
|
28
29
|
|
29
30
|
res.each_key do |k|
|
30
31
|
assert_not_nil(res[k])
|
31
|
-
assert(@allowed_states.member?(res[k]))
|
32
32
|
end
|
33
33
|
|
34
|
-
# this isn't the best validation, but does prove a point - no nil keys/values
|
35
|
-
assert_nothing_raised do
|
36
|
-
res.keys.sort
|
37
|
-
res.values.sort
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_happy_path_caching
|
43
|
-
|
44
|
-
assert_nil(@app.deltas[:services])
|
45
|
-
|
46
|
-
assert_nothing_raised do
|
47
|
-
@app.get_services(true)
|
48
|
-
end
|
49
|
-
|
50
|
-
assert_equal(Hash, @app.deltas[:services].class)
|
51
|
-
|
52
34
|
end
|
53
35
|
|
54
|
-
|
55
|
-
res1, res2 = nil, nil
|
56
|
-
|
57
|
-
assert_nothing_raised do
|
58
|
-
res1 = @app.get_services(true)
|
59
|
-
end
|
60
|
-
|
61
|
-
first_cache_time = @app.cache[:services]
|
62
|
-
|
63
|
-
sleep (@app.cache_timeout + 1)
|
64
|
-
|
65
|
-
assert_nothing_raised do
|
66
|
-
res2 = @app.get_services(true)
|
67
|
-
end
|
68
|
-
|
69
|
-
second_cache_time = @app.cache[:services]
|
70
|
-
|
71
|
-
assert_equal(res1, res2)
|
72
|
-
assert_not_equal(first_cache_time, second_cache_time)
|
73
|
-
assert(second_cache_time > first_cache_time)
|
74
|
-
|
75
|
-
end
|
36
|
+
# TODO add some caching tests
|
76
37
|
|
77
38
|
def teardown
|
78
39
|
@app = nil
|
@@ -8,7 +8,7 @@ class TestDeltasGetUsers < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
def setup
|
10
10
|
assert_nothing_raised do
|
11
|
-
@app = Rouster.new(:name => 'app'
|
11
|
+
@app = Rouster.new(:name => 'app')
|
12
12
|
end
|
13
13
|
|
14
14
|
@app.up()
|
@@ -36,40 +36,7 @@ class TestDeltasGetUsers < Test::Unit::TestCase
|
|
36
36
|
|
37
37
|
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
assert_nil(@app.deltas[:users])
|
42
|
-
|
43
|
-
assert_nothing_raised do
|
44
|
-
@app.get_users(true)
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_equal(Hash, @app.deltas[:users].class)
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_happy_path_cache_invalidation
|
52
|
-
res1, res2 = nil, nil
|
53
|
-
|
54
|
-
assert_nothing_raised do
|
55
|
-
res1 = @app.get_users(true)
|
56
|
-
end
|
57
|
-
|
58
|
-
first_cache_time = @app.cache[:users]
|
59
|
-
|
60
|
-
sleep (@app.cache_timeout + 1)
|
61
|
-
|
62
|
-
assert_nothing_raised do
|
63
|
-
res2 = @app.get_users(true)
|
64
|
-
end
|
65
|
-
|
66
|
-
second_cache_time = @app.cache[:users]
|
67
|
-
|
68
|
-
assert_equal(res1, res2)
|
69
|
-
assert_not_equal(first_cache_time, second_cache_time)
|
70
|
-
assert(second_cache_time > first_cache_time)
|
71
|
-
|
72
|
-
end
|
39
|
+
# TODO add some caching tests
|
73
40
|
|
74
41
|
def teardown
|
75
42
|
@app = nil
|
@@ -8,7 +8,7 @@ class TestFacter < Test::Unit::TestCase
|
|
8
8
|
|
9
9
|
def setup
|
10
10
|
assert_nothing_raised do
|
11
|
-
@app = Rouster.new(:name => 'app'
|
11
|
+
@app = Rouster.new(:name => 'app')
|
12
12
|
end
|
13
13
|
|
14
14
|
@app.up()
|
@@ -38,46 +38,6 @@ class TestFacter < Test::Unit::TestCase
|
|
38
38
|
assert_equal(nil, @app.facts)
|
39
39
|
end
|
40
40
|
|
41
|
-
def test_caching
|
42
|
-
# NOTE: this only works if (time_to_run_facter < cache_timeout)
|
43
|
-
|
44
|
-
assert_nothing_raised do
|
45
|
-
@app.facter(true)
|
46
|
-
end
|
47
|
-
|
48
|
-
first_cached_time = @app.cache[:facter]
|
49
|
-
|
50
|
-
assert_nothing_raised do
|
51
|
-
@app.facter(true)
|
52
|
-
end
|
53
|
-
|
54
|
-
second_cached_time = @app.cache[:facter]
|
55
|
-
|
56
|
-
assert_equal(first_cached_time, second_cached_time)
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_cache_invalidation
|
61
|
-
|
62
|
-
assert_nothing_raised do
|
63
|
-
@app.facter(true)
|
64
|
-
end
|
65
|
-
|
66
|
-
first_cached_time = @app.cache[:facter]
|
67
|
-
|
68
|
-
sleep (@app.cache_timeout + 1)
|
69
|
-
|
70
|
-
assert_nothing_raised do
|
71
|
-
@app.facter(true)
|
72
|
-
end
|
73
|
-
|
74
|
-
second_cached_time = @app.cache[:facter]
|
75
|
-
|
76
|
-
assert_not_equal(first_cached_time, second_cached_time)
|
77
|
-
assert(second_cached_time > first_cached_time)
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
41
|
def test_custom_facts
|
82
42
|
|
83
43
|
facts = nil
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require sprintf('%s/../../../path_helper', File.dirname(File.expand_path(__FILE__)))
|
2
|
+
|
3
|
+
require 'rouster'
|
4
|
+
require 'rouster/puppet'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
# this is technically a unit test, no need for a real Rouster VM
|
8
|
+
|
9
|
+
class TestGetPuppetStar < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def setup
|
12
|
+
assert_nothing_raised do
|
13
|
+
@app = Rouster.new(:name => 'app')
|
14
|
+
end
|
15
|
+
|
16
|
+
# expose private methods
|
17
|
+
Rouster.send(:public, *Rouster.protected_instance_methods)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_happy_get_errors
|
21
|
+
|
22
|
+
output = "[1;35merr: Could not retrieve catalog from remote server: Error 400 on SERVER: no result for [api_vip] in Hiera (YAML/CMS)[0m\nfizzybang\n[1;35merr: Could not retrieve catalog from remote server: Error 400 on SERVER: no result for [foobar] in Hiera (YAML/CMS)[0m"
|
23
|
+
@app.output.push(output)
|
24
|
+
|
25
|
+
assert_not_nil(@app.get_puppet_errors())
|
26
|
+
assert_equal(2, @app.get_puppet_errors().size)
|
27
|
+
assert_equal(@app.get_puppet_errors(), @app.get_puppet_errors(output)) # could be split out to a different test
|
28
|
+
|
29
|
+
assert_nil(@app.get_puppet_notices())
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_happy_get_notices
|
34
|
+
|
35
|
+
output = "[0;36mnotice: Not using cache on failed catalog[0m\nfizzbang\n[0;36mnotice: Not using cache on failed catalog[0m"
|
36
|
+
@app.output.push(output)
|
37
|
+
|
38
|
+
assert_not_nil(@app.get_puppet_notices())
|
39
|
+
assert_equal(2, @app.get_puppet_notices().size)
|
40
|
+
assert_equal(@app.get_puppet_notices(), @app.get_puppet_notices(output))
|
41
|
+
|
42
|
+
assert_nil(@app.get_puppet_errors())
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_no_errors
|
47
|
+
|
48
|
+
output = 'there are no errors here'
|
49
|
+
@app.output.push(output)
|
50
|
+
|
51
|
+
assert_nil(@app.get_puppet_errors())
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_no_notices
|
55
|
+
|
56
|
+
output = 'there are no notices here'
|
57
|
+
@app.output.push(output)
|
58
|
+
|
59
|
+
assert_nil(@app.get_puppet_notices())
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
def teardown
|
64
|
+
# noop
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
@@ -74,12 +74,8 @@ class TestCaching < Test::Unit::TestCase
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def test_ssh_caching
|
77
|
-
|
78
77
|
timeout = 100
|
79
|
-
app = Rouster.new(:name => 'app', :
|
80
|
-
app.destroy() # should be a no-op if running under rake, doing this to be safe
|
81
|
-
|
82
|
-
app.up()
|
78
|
+
app = Rouster.new(:name => 'app', :cache_timeout => timeout)
|
83
79
|
|
84
80
|
assert_equal(app.cache_timeout, timeout)
|
85
81
|
|
@@ -56,31 +56,6 @@ class TestDirs < Test::Unit::TestCase
|
|
56
56
|
|
57
57
|
end
|
58
58
|
|
59
|
-
def test_case_sensitvity
|
60
|
-
dirs_to_create = ['Fizz', 'foo', 'baz']
|
61
|
-
dirs_expected_sensitive = ['foo']
|
62
|
-
dirs_expected_insensitive = ['Fizz', 'foo']
|
63
|
-
|
64
|
-
dirs_to_create.each do |dir|
|
65
|
-
@app.run(sprintf('mkdir -p %s/%s', @dir, dir))
|
66
|
-
end
|
67
|
-
|
68
|
-
dirs_actual_sensitive = @app.dirs(@dir, 'f*', false)
|
69
|
-
|
70
|
-
dirs_actual_sensitive.each do |dir|
|
71
|
-
dir = dir.gsub(/#{@dir}/, '')
|
72
|
-
assert(dirs_expected_sensitive.member?(dir))
|
73
|
-
end
|
74
|
-
|
75
|
-
dirs_actual_insensitive = @app.dirs(@dir, 'f*', true)
|
76
|
-
|
77
|
-
dirs_actual_insensitive.each do |dir|
|
78
|
-
dir = dir.gsub(/#{@dir}/, '')
|
79
|
-
assert(dirs_expected_insensitive.member?(dir))
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
59
|
def teardown
|
85
60
|
@app.run(sprintf('rm -rf %s', @dir))
|
86
61
|
end
|
data/test/functional/test_get.rb
CHANGED
@@ -45,8 +45,7 @@ class TestGet < Test::Unit::TestCase
|
|
45
45
|
def test_remote_path_dne
|
46
46
|
|
47
47
|
assert_raise Rouster::FileTransferError do
|
48
|
-
|
49
|
-
assert_equal(false, res)
|
48
|
+
@app.get(@kb_dne_location, @kg_local_location)
|
50
49
|
end
|
51
50
|
|
52
51
|
assert_equal(false, File.file?(@kg_local_location), 'known bad remote file path DNE')
|
@@ -55,7 +54,7 @@ class TestGet < Test::Unit::TestCase
|
|
55
54
|
def test_with_suspended_machine
|
56
55
|
@app.suspend()
|
57
56
|
|
58
|
-
#assert_raise Rouster::SSHConnectionError do <--
|
57
|
+
#assert_raise Rouster::SSHConnectionError do <-- why was this ever used?
|
59
58
|
assert_raise Rouster::FileTransferError do
|
60
59
|
@app.get(@kg_remote_location, @kg_local_location)
|
61
60
|
end
|
@@ -64,13 +63,10 @@ class TestGet < Test::Unit::TestCase
|
|
64
63
|
end
|
65
64
|
|
66
65
|
def teardown
|
67
|
-
File.delete(@kg_local_location) if File.file?(@kg_local_location).true?
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.shutdown
|
71
66
|
# TODO we should suspend instead if any test failed for triage
|
72
|
-
#@app.
|
73
|
-
#@ppm.
|
74
|
-
end
|
67
|
+
#@app.destroy()
|
68
|
+
#@ppm.destroy()
|
75
69
|
|
70
|
+
File.delete(@kg_local_location) if File.file?(@kg_local_location).true?
|
71
|
+
end
|
76
72
|
end
|
@@ -21,7 +21,7 @@ class TestInspect < Test::Unit::TestCase
|
|
21
21
|
assert_match(/status/, res)
|
22
22
|
assert_match(/sudo\[true\]/, res)
|
23
23
|
assert_match(/vagrantfile/, res)
|
24
|
-
assert_match(/verbosity
|
24
|
+
assert_match(/verbosity\[4\]/, res)
|
25
25
|
end
|
26
26
|
|
27
27
|
def teardown
|
@@ -22,9 +22,8 @@ class TestIsFile < Test::Unit::TestCase
|
|
22
22
|
@file_other_rwx = sprintf('%s/other', @dir_tmp)
|
23
23
|
@file_644 = sprintf('%s/sixfourfour', @dir_tmp)
|
24
24
|
@file_755 = sprintf('%s/sevenfivefive', @dir_tmp)
|
25
|
-
@symlink = sprintf('%s/symlinking', @dir_tmp)
|
26
25
|
|
27
|
-
@files = [@file_user_rwx, @file_group_rwx, @file_other_rwx, @file_644, @file_755
|
26
|
+
@files = [@file_user_rwx, @file_group_rwx, @file_other_rwx, @file_644, @file_755]
|
28
27
|
end
|
29
28
|
|
30
29
|
def test_user
|
@@ -42,8 +41,6 @@ class TestIsFile < Test::Unit::TestCase
|
|
42
41
|
assert_equal(false, @app.is_readable?(@file_user_rwx, 'o'))
|
43
42
|
assert_equal(false, @app.is_writeable?(@file_user_rwx, 'o'))
|
44
43
|
assert_equal(false, @app.is_executable?(@file_user_rwx, 'o'))
|
45
|
-
|
46
|
-
assert_equal(false, @app.is_symlink?(@file_755))
|
47
44
|
end
|
48
45
|
|
49
46
|
def test_group
|
@@ -61,8 +58,6 @@ class TestIsFile < Test::Unit::TestCase
|
|
61
58
|
assert_equal(false, @app.is_readable?(@file_group_rwx, 'o'))
|
62
59
|
assert_equal(false, @app.is_writeable?(@file_group_rwx, 'o'))
|
63
60
|
assert_equal(false, @app.is_executable?(@file_group_rwx, 'o'))
|
64
|
-
|
65
|
-
assert_equal(false, @app.is_symlink?(@file_755))
|
66
61
|
end
|
67
62
|
|
68
63
|
def test_other
|
@@ -81,7 +76,6 @@ class TestIsFile < Test::Unit::TestCase
|
|
81
76
|
assert_equal(true, @app.is_writeable?(@file_other_rwx, 'o'))
|
82
77
|
assert_equal(true, @app.is_executable?(@file_other_rwx, 'o'))
|
83
78
|
|
84
|
-
assert_equal(false, @app.is_symlink?(@file_755))
|
85
79
|
end
|
86
80
|
|
87
81
|
def test_644
|
@@ -99,8 +93,6 @@ class TestIsFile < Test::Unit::TestCase
|
|
99
93
|
assert_equal(true, @app.is_readable?(@file_644, 'o'))
|
100
94
|
assert_equal(false, @app.is_writeable?(@file_644, 'o'))
|
101
95
|
assert_equal(false, @app.is_executable?(@file_644, 'o'))
|
102
|
-
|
103
|
-
assert_equal(false, @app.is_symlink?(@file_755))
|
104
96
|
end
|
105
97
|
|
106
98
|
def test_755
|
@@ -118,14 +110,6 @@ class TestIsFile < Test::Unit::TestCase
|
|
118
110
|
assert_equal(true, @app.is_readable?(@file_755, 'o'))
|
119
111
|
assert_equal(false, @app.is_writeable?(@file_755, 'o'))
|
120
112
|
assert_equal(true, @app.is_executable?(@file_755, 'o'))
|
121
|
-
|
122
|
-
assert_equal(false, @app.is_symlink?(@file_755))
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_symlink
|
126
|
-
@app.run("ln -s /etc/hosts #{@symlink}")
|
127
|
-
|
128
|
-
assert_equal(true, @app.is_symlink?(@symlink))
|
129
113
|
end
|
130
114
|
|
131
115
|
def teardown
|