spex 0.4.0 → 0.5.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.
Files changed (47) hide show
  1. data/README.md +66 -0
  2. data/Rakefile +1 -2
  3. data/VERSION +1 -1
  4. data/bin/spex +1 -1
  5. data/examples/chgrp.rb +5 -0
  6. data/examples/chmod.rb +5 -0
  7. data/examples/chown.rb +5 -0
  8. data/examples/puppet.rb +9 -0
  9. data/examples/touch.rb +5 -0
  10. data/examples/writing.rb +5 -0
  11. data/lib/spex.rb +4 -4
  12. data/lib/spex/assertion.rb +57 -13
  13. data/lib/spex/assertions/changed_group_assertion.rb +61 -0
  14. data/lib/spex/assertions/changed_mode_assertion.rb +48 -0
  15. data/lib/spex/assertions/changed_owner_assertion.rb +73 -0
  16. data/lib/spex/assertions/created_assertion.rb +26 -0
  17. data/lib/spex/assertions/file_assertion.rb +1 -10
  18. data/lib/spex/assertions/modified_assertion.rb +56 -0
  19. data/lib/spex/assertions/removed_assertion.rb +27 -0
  20. data/lib/spex/cli.rb +65 -36
  21. data/lib/spex/execution.rb +37 -0
  22. data/lib/spex/runner.rb +73 -51
  23. data/lib/spex/scenario.rb +22 -12
  24. data/lib/spex/script.rb +13 -18
  25. data/test/helper.rb +7 -0
  26. data/test/test_assertion.rb +58 -0
  27. data/test/test_script.rb +54 -0
  28. metadata +29 -42
  29. data/README.markdown +0 -116
  30. data/examples/chgrp/run.sh +0 -3
  31. data/examples/chgrp/scenarios.rb +0 -5
  32. data/examples/chmod/run.sh +0 -3
  33. data/examples/chmod/scenarios.rb +0 -5
  34. data/examples/chown/run.sh +0 -3
  35. data/examples/chown/scenarios.rb +0 -5
  36. data/examples/puppet/manifest.pp +0 -3
  37. data/examples/puppet/run.sh +0 -3
  38. data/examples/puppet/scenarios.rb +0 -5
  39. data/examples/touch/run.sh +0 -3
  40. data/examples/touch/scenarios.rb +0 -5
  41. data/lib/spex/assertions/chgrps_file_assertion.rb +0 -81
  42. data/lib/spex/assertions/chmods_file_assertion.rb +0 -56
  43. data/lib/spex/assertions/chowns_file_assertion.rb +0 -81
  44. data/lib/spex/assertions/creates_file_assertion.rb +0 -31
  45. data/lib/spex/assertions/removes_file_assertion.rb +0 -31
  46. data/lib/spex/script/builder.rb +0 -15
  47. data/test/test_stringup.rb +0 -7
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- spex execute scenarios.rb
@@ -1,5 +0,0 @@
1
- command "sudo chown root /tmp/foo"
2
-
3
- scenario :default, "Change owner" do
4
- assert_chowns_file '/tmp/foo', :to => 'root', :changes => true
5
- end
@@ -1,3 +0,0 @@
1
- file { "/tmp/foo":
2
- ensure => present
3
- }
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env
2
-
3
- spex execute scenarios.rb manifest.pp -s creation
@@ -1,5 +0,0 @@
1
- command 'puppet %s'
2
-
3
- scenario :creation, "Creates a file" do
4
- assert_creates_file '/tmp/foo'
5
- end
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env
2
-
3
- spex execute scenarios.rb -s creation
@@ -1,5 +0,0 @@
1
- command 'touch /tmp/foo'
2
-
3
- scenario :creation, "Creates a file" do
4
- assert_creates_file '/tmp/foo'
5
- end
@@ -1,81 +0,0 @@
1
- require 'etc'
2
-
3
- module Spex
4
- class ChgrpsFileAssertion < FileAssertion
5
- assertion :chgrps_file
6
-
7
- def before(test_case)
8
- if from_groupname
9
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
10
- test_case.assert_equal from_groupname, current_groupname
11
- elsif @options[:changes]
12
- test_case.assert_not_equal to_groupname, current_groupname, "Group will not be changed; already '#{to_groupname}'"
13
- end
14
- @before_groupname = current_groupname
15
- end
16
-
17
- def before?
18
- from_groupname || @options[:changes]
19
- end
20
-
21
- def after(test_case)
22
- if to_groupname
23
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
24
- test_case.assert_equal to_groupname, current_groupname
25
- elsif @options[:changes]
26
- test_case.assert_not_equal @before_groupname, current_groupname, "Group is still '#{@before_groupname}'"
27
- end
28
- end
29
-
30
- def after?
31
- to_groupname || @options[:changes]
32
- end
33
-
34
- def describe_should_at(event)
35
- case event
36
- when :before
37
- if from_groupname
38
- "change group of file at `#{@path}` from '#{from_groupname}'"
39
- elsif @options[:changes]
40
- "not have a file at `#{@path}` with group '#{to_groupname}'"
41
- end
42
- when :after
43
- if to_groupname
44
- "have changed group of file at `#{@path}` to '#{to_groupname}'"
45
- elsif @options[:changes]
46
- "have changed group of file at `#{@path}`"
47
- end
48
- else
49
- super
50
- end
51
- end
52
-
53
- def current_groupname
54
- normalize(File.stat(@path).gid)
55
- end
56
-
57
- def from_groupname
58
- if @options[:from]
59
- @from_groupname ||= normalize(@options[:from])
60
- end
61
- end
62
-
63
- def to_groupname
64
- if @options[:to]
65
- @to_groupname ||= normalize(@options[:to])
66
- end
67
- end
68
-
69
- def normalize(gid_or_groupname)
70
- case gid_or_groupname
71
- when String, Symbol
72
- gid_or_groupname.to_s
73
- when Fixnum
74
- Etc.getgrgid(gid_or_groupname).name
75
- else
76
- raise ArgumentError, "Does not appear to be a gid or group name: #{gid_or_groupname}"
77
- end
78
- end
79
-
80
- end
81
- end
@@ -1,56 +0,0 @@
1
- module Spex
2
- class ChmodsFileAssertion < FileAssertion
3
- assertion :chmods_file
4
-
5
- def before(test_case)
6
- if @options[:from]
7
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
8
- test_case.assert_equal @options[:from].to_s(8), current_mode.to_s(8)
9
- elsif @options[:changes]
10
- test_case.assert_not_equal @options[:to].to_s(8), current_mode.to_s(8), "Mode will not be changed; already at mode #{@options[:to].to_s(8)}"
11
- end
12
- @before_mode = current_mode
13
- end
14
-
15
- def before?
16
- @options[:from] || @options[:changes]
17
- end
18
-
19
- def after(test_case)
20
- if @options[:to]
21
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
22
- test_case.assert_equal @options[:to].to_s(8), current_mode.to_s(8)
23
- elsif @options[:changes]
24
- test_case.assert_not_equal @before_mode.to_s(8), current_mode.to_s(8), "Mode is still #{@before_mode.to_s(8)}"
25
- end
26
- end
27
-
28
- def after?
29
- @options[:to] || @options[:changes]
30
- end
31
-
32
- def describe_should_at(event)
33
- case event
34
- when :before
35
- if @options[:from]
36
- "change mode of file at `#{@path}` from #{@options[:from].to_s(8)}"
37
- elsif @options[:changes]
38
- "not have a file at `#{@path}` with a mode of #{@options[:to].to_s(8)}"
39
- end
40
- when :after
41
- if @options[:to]
42
- "change mode of file at `#{@path}` to #{@options[:to].to_s(8)}"
43
- elsif @options[:changes]
44
- "change mode of file at `#{@path}`"
45
- end
46
- else
47
- super
48
- end
49
- end
50
-
51
- def current_mode
52
- Integer(File.stat(@path).mode.to_s(8)[1..-1])
53
- end
54
-
55
- end
56
- end
@@ -1,81 +0,0 @@
1
- require 'etc'
2
-
3
- module Spex
4
- class ChownsFileAssertion < FileAssertion
5
- assertion :chowns_file
6
-
7
- def before(test_case)
8
- if from_username
9
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
10
- test_case.assert_equal from_username, current_username
11
- elsif @options[:changes]
12
- test_case.assert_not_equal to_username, current_username, "Owner will not be changed; already '#{to_username}'"
13
- end
14
- @before_username = current_username
15
- end
16
-
17
- def before?
18
- from_username || @options[:changes]
19
- end
20
-
21
- def after(test_case)
22
- if to_username
23
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
24
- test_case.assert_equal to_username, current_username
25
- elsif @options[:changes]
26
- test_case.assert_not_equal @before_username, current_username, "Owner is still '#{@before_username}'"
27
- end
28
- end
29
-
30
- def after?
31
- to_username || @options[:changes]
32
- end
33
-
34
- def describe_should_at(event)
35
- case event
36
- when :before
37
- if from_username
38
- "change owner of file at `#{@path}` from '#{from_username}'"
39
- elsif @options[:changes]
40
- "not have a file at `#{@path}` with owner '#{to_username}'"
41
- end
42
- when :after
43
- if to_username
44
- "have changed owner of file at `#{@path}` to '#{to_username}'"
45
- elsif @options[:changes]
46
- "have changed owner of file at `#{@path}`"
47
- end
48
- else
49
- super
50
- end
51
- end
52
-
53
- def current_username
54
- normalize(File.stat(@path).uid)
55
- end
56
-
57
- def from_username
58
- if @options[:from]
59
- @from_username ||= normalize(@options[:from])
60
- end
61
- end
62
-
63
- def to_username
64
- if @options[:to]
65
- @to_username ||= normalize(@options[:to])
66
- end
67
- end
68
-
69
- def normalize(uid_or_username)
70
- case uid_or_username
71
- when String, Symbol
72
- uid_or_username.to_s
73
- when Fixnum
74
- Etc.getpwuid(uid_or_username).name
75
- else
76
- raise ArgumentError, "Does not appear to be a uid or username: #{uid_or_username}"
77
- end
78
- end
79
-
80
- end
81
- end
@@ -1,31 +0,0 @@
1
- module Spex
2
- class CreatesFileAssertion < FileAssertion
3
- assertion :creates_file
4
-
5
- def before(test_case)
6
- test_case.assert !File.exist?(@path), "File already exists at #{@path}"
7
- end
8
-
9
- def after(test_case)
10
- test_case.assert File.exist?(@path), "File was not created at #{@path}"
11
- case kind
12
- when :file
13
- test_case.assert File.file?(@path), "File created at #{@path} is not a regular file"
14
- when :directory
15
- test_case.assert File.file?(@path), "File created at #{@path} is not a directory"
16
- end
17
- end
18
-
19
- def describe_should_at(event)
20
- case event
21
- when :before
22
- "not find #{kind_name} at `#{@path}`"
23
- when :after
24
- "have created #{kind_name} at `#{@path}`"
25
- else
26
- super
27
- end
28
- end
29
-
30
- end
31
- end
@@ -1,31 +0,0 @@
1
- module Spex
2
- class RemovesFileAssertion < FileAssertion
3
- assertion :removes_file
4
-
5
- def after(test_case)
6
- test_case.assert !File.exist?(@path), "File still exists at #{@path}"
7
- end
8
-
9
- def before(test_case)
10
- test_case.assert File.exist?(@path), "File does not exist at #{@path}"
11
- case kind
12
- when :file
13
- test_case.assert File.file?(@path), "File to remove at #{@path} is not a regular file"
14
- when :directory
15
- test_case.assert File.file?(@path), "File to remove at #{@path} is not a directory"
16
- end
17
- end
18
-
19
- def describe_should_at(event)
20
- case event
21
- when :after
22
- "have removed #{kind_name} at `#{@path}`"
23
- when :before
24
- "find #{kind_name} at `#{@path}` to remove"
25
- else
26
- super
27
- end
28
- end
29
-
30
- end
31
- end
@@ -1,15 +0,0 @@
1
- module Spex
2
- class Script::Language
3
-
4
- def initialize(script)
5
- @script = script
6
- end
7
-
8
- def doing(name, description, &block)
9
- scenario = Scenario.new(name, description)
10
- Scenario::Builder.new(scenario, &block)
11
- @script << scenario
12
- end
13
-
14
- end
15
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestSpex < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end