vagrant-cucumber 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0de77638a2311e90762aa7c72ea61e552383a47f
4
- data.tar.gz: 4aa80e3e8498aee3d964e663de85a66f96410a56
3
+ metadata.gz: e3dd0d7308492b17caa19ea3f3f0ebee0b3073a2
4
+ data.tar.gz: b6f31e27c53386fef198c4b1294b22ffee91a5c4
5
5
  SHA512:
6
- metadata.gz: bda45949dc846751a038e3ebb1257923c56856eb2e413146d20befcd1183df4816d9f6baa60be3ad0df1759f5bde58e2276061a1dceb158e551e144c07cb0598
7
- data.tar.gz: 18ad2b90f094c62dcded36006315ec82f749e12fab9777c73c62ff6e79820bc15a29a5c7679f98d25567b4490b57dff53b92c45afa76755afa2b598374fed656
6
+ metadata.gz: 017ab2efd36c26b684f2837f4f9366ea1c241a444c934cae25059e131872c52325ce191a10944d36b07c9f4e7cc95938367d75819b85beb2bfaf413b17b90a8b
7
+ data.tar.gz: 0f39cbe18a5836e3efe7a8985fd7a6ff92776d59f9a46f1101d97866a471001baf72b58d6bd71c32d5d4179e7db62a4c6d99c870aba28383a078b09cd8d4fa3a
data/.rubocop.yml ADDED
@@ -0,0 +1,26 @@
1
+ Style/IndentationWidth:
2
+ Width: 4
3
+
4
+ Metrics/LineLength:
5
+ Enabled: false
6
+
7
+ Metrics/MethodLength:
8
+ Enabled: false
9
+
10
+ Style/Documentation:
11
+ Enabled: false
12
+
13
+ Style/AccessorMethodName:
14
+ Enabled: false
15
+
16
+ Style/ClassVars:
17
+ Enabled: false
18
+
19
+ Metrics/AbcSize:
20
+ Enabled: false
21
+
22
+ Lint/AmbiguousRegexpLiteral:
23
+ Enabled: false
24
+
25
+ Style/FileName:
26
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 1.0.0 (December, 2016)
2
+ * Upgrade Cucumber to 2.x release. No longer requires native extensions for Gherkin,
3
+ thus allowing installation on Vagrant 1.9.1
4
+ * Support for libvirt using Sahara plugin
5
+
1
6
  ## 0.1.1 (26 July, 2016)
2
7
 
3
8
  * Retry snapshot operations on lock failure.
data/README.md CHANGED
@@ -43,7 +43,7 @@ install this plugin is via the published gem:
43
43
  vagrant plugin install vagrant-cucumber
44
44
  ```
45
45
 
46
- `vagrant-cucumber` will install a version of cucumber >= 1.3.2 under the
46
+ `vagrant-cucumber` will install a version of cucumber >= 2.4.0 under the
47
47
  Ruby environment provided by Vagrant.
48
48
 
49
49
 
data/example/Vagrantfile CHANGED
@@ -1,11 +1,11 @@
1
1
  Vagrant.configure('2') do |config|
2
- config.vm.box = "ubuntu/precise64"
2
+ config.vm.box = 'ubuntu/precise64'
3
3
 
4
4
  config.vm.provider :virtualbox
5
5
 
6
- config.vm.provider :vmware_fusion do |fusion, override|
6
+ config.vm.provider :vmware_fusion do |_fusion, override|
7
7
  # Standard Ubuntu image doesn't exist for VMWare
8
- override.vm.box = "hashicorp/precise64"
8
+ override.vm.box = 'hashicorp/precise64'
9
9
  end
10
10
 
11
11
  config.vm.define :vm1 do |vm1|
@@ -15,5 +15,4 @@ Vagrant.configure('2') do |config|
15
15
  config.vm.define :vm2 do |vm2|
16
16
  vm2.vm.hostname = 'vm2'
17
17
  end
18
-
19
18
  end
@@ -1,16 +1,15 @@
1
- # Cucumber step definitions are defined like function definitions, and start
1
+ # Cucumber step definitions are defined like function definitions, and start
2
2
  # with a preposition or adverb (Given, When, Then, And, But).
3
- #
3
+ #
4
4
  # The regular expression defined will be matched against steps in the feature
5
5
  # files when cucumber runs. The matched groups in the regex will be passed
6
- # in order as variables to the block. In this case, the three groups are
6
+ # in order as variables to the block. In this case, the three groups are
7
7
  # assigned to "condition", "process_name" and "vmre"
8
8
  #
9
9
  # More information on step definitions can be found at
10
10
  # https://github.com/cucumber/cucumber/wiki/Step-Definitions
11
11
 
12
12
  Then /there should(| not) be a process called "([^"]*)" running(#{VMRE})$/ do |condition, process_name, vmre|
13
-
14
13
  # First, we work out what virtual machine we're going to be dealing with
15
14
  # in this step. The VMRE variable in the regex above is defined by
16
15
  # vagrant-cucumber to match various English-language ways in which we
@@ -28,50 +27,40 @@ Then /there should(| not) be a process called "([^"]*)" running(#{VMRE})$/ do |c
28
27
 
29
28
  machine = vagrant_glue.identified_vm(vmre)
30
29
 
31
-
32
30
  # Now we use the machine's communication interface (probably ssh, though
33
31
  # this is provider-dependent) to execute a shell command inside the VM.
34
32
 
35
33
  machine.communicate.tap do |comm|
34
+ rv = comm.execute(
35
+ "pidof #{process_name}",
36
+ error_check: false, # stop vagrant throwing an exception
37
+ # if the command returns non-zero
36
38
 
37
- rv = comm.execute(
38
- "pidof #{process_name}", {
39
- :error_check => false, # stop vagrant throwing an exception
40
- } # if the command returns non-zero
41
-
42
- ) do |type,data|
43
-
39
+ ) do |type, data|
44
40
  # Execute takes a block, which is yielded to whenever there's
45
41
  # output on stdout or stderr. We handle any output in this block.
46
42
  #
47
43
  # In this case, we'll put all output onto stdout, but only if
48
44
  # @vagrant_cucumber_debug has been set. This class variable will
49
- # be set to true in the Before hook defined in
45
+ # be set to true in the Before hook defined in
50
46
  # lib/vagrant-cucumber/step_definitions.rb
51
47
 
52
- if @vagrant_cucumber_debug
53
- puts "[:#{type}] #{data.chomp}"
54
- end
55
-
48
+ puts "[:#{type}] #{data.chomp}" if @vagrant_cucumber_debug
56
49
  end
57
50
 
58
51
  # Output the status from the command if we're in debugging mode
59
- if @vagrant_cucumber_debug
60
- puts "Exit status of pidof command: #{rv}"
61
- end
52
+ puts "Exit status of pidof command: #{rv}" if @vagrant_cucumber_debug
62
53
 
63
54
  # Cucumber steps are expected to exit cleanly if they worked ok, and
64
55
  # raise exceptions if they fail. The following logic implements
65
56
  # the conditions in which we want to fail the step.
66
57
 
67
- if rv != 0 and condition == ''
58
+ if rv != 0 && condition == ''
68
59
  raise "There was no proces called #{process_name} running on #{machine.name}"
69
60
  end
70
61
 
71
- if rv == 0 and condition == ' not'
62
+ if rv == 0 && condition == ' not'
72
63
  raise "There was a process called #{process_name} running on #{machine.name}"
73
64
  end
74
-
75
65
  end
76
-
77
66
  end
@@ -1,3 +1,3 @@
1
1
  require 'vagrant-cucumber/step_definitions'
2
2
 
3
- World( VagrantPlugins::Cucumber::Glue )
3
+ World(VagrantPlugins::Cucumber::Glue)
@@ -1,17 +1,16 @@
1
- FORCE_COLOUR_ENV_VARS = [
2
- 'VAGRANT_CUCUMBER_FORCE_COLOR',
3
- 'VAGRANT_CUCUMBER_FORCE_COLOUR',
4
- ]
1
+ FORCE_COLOUR_ENV_VARS = %w(
2
+ VAGRANT_CUCUMBER_FORCE_COLOR
3
+ VAGRANT_CUCUMBER_FORCE_COLOUR
4
+ ).freeze
5
5
 
6
6
  module VagrantPlugins
7
7
  module Cucumber
8
8
  class CucumberCommand < Vagrant.plugin(2, :command)
9
9
  FORCE_COLOUR_ENV_VARS.each do |k|
10
- if ENV.key?(k)
11
- require 'cucumber/term/ansicolor'
12
- ::Cucumber::Term::ANSIColor.coloring = true
13
- break
14
- end
10
+ next unless ENV.key?(k)
11
+ require 'cucumber/term/ansicolor'
12
+ ::Cucumber::Term::ANSIColor.coloring = true
13
+ break
15
14
  end
16
15
 
17
16
  def execute
@@ -24,7 +23,7 @@ module VagrantPlugins
24
23
 
25
24
  VagrantPlugins::Cucumber::Glue::VagrantGlue.set_environment(@env)
26
25
 
27
- failure = ::Cucumber::Cli::Main.execute(@argv)
26
+ _ = ::Cucumber::Cli::Main.execute(@argv)
28
27
  end
29
28
  end
30
29
  end
@@ -1,6 +1,6 @@
1
1
  require 'cucumber/formatter/html'
2
2
 
3
- ANSI_PATTERN = /\e\[(\d+)?(;\d+)?m/
3
+ ANSI_PATTERN = /\e\[\d+([;\d]+)?m/
4
4
 
5
5
  def remove_ansi(string = nil)
6
6
  string.gsub(ANSI_PATTERN, '')
@@ -11,7 +11,6 @@ module VagrantPlugins
11
11
  module Formatter
12
12
  class Html < ::Cucumber::Formatter::Html
13
13
  def puts(message)
14
- # TODO: Strip ansi escape codes
15
14
  @delayed_messages << remove_ansi(message)
16
15
  end
17
16
  end
@@ -7,7 +7,7 @@ module VagrantPlugins
7
7
  # Use the Pretty formatter, but disable use of
8
8
  # delayed messages (ie. output each line at once)
9
9
 
10
- def initialize(*args)
10
+ def initialize(runtime, path_or_io = STDOUT, options = {})
11
11
  super
12
12
  @delayed_messages = nil
13
13
  end
@@ -22,17 +22,15 @@ module VagrantPlugins
22
22
  end
23
23
 
24
24
  def initialize
25
- @vagrant_env = @@vagrant_env or raise "The vagrant_env hasn't been set"
25
+ (@vagrant_env = @@vagrant_env) || raise("The vagrant_env hasn't been set")
26
26
  @last_machine_mentioned = nil
27
27
  end
28
28
 
29
29
  def self.instance
30
- return @@instance ||= VagrantGlue.new
30
+ @@instance ||= VagrantGlue.new
31
31
  end
32
32
 
33
- def vagrant_env
34
- @vagrant_env
35
- end
33
+ attr_reader :vagrant_env
36
34
 
37
35
  def get_last_vm
38
36
  get_vm(@last_machine_mentioned)
@@ -55,9 +53,9 @@ module VagrantPlugins
55
53
  end
56
54
 
57
55
  unless machine_name
58
- raise "The VM '#{vmname}' is configured in the Vagrantfile "+
59
- "but has not been started. Run 'vagrant up #{vmname}' and "+
60
- "specify a provider if necessary."
56
+ raise "The VM '#{vmname}' is configured in the Vagrantfile "\
57
+ "but has not been started. Run 'vagrant up #{vmname}' and "\
58
+ 'specify a provider if necessary.'
61
59
  end
62
60
 
63
61
  machine_provider ||= vagrant_env.default_provider
@@ -74,10 +72,10 @@ module VagrantPlugins
74
72
 
75
73
  def identified_vm(str)
76
74
  case str
77
- when /^( on the last VM|)$/
78
- get_last_vm
79
- when /^ on the VM(?: called|) "([^"]+)"$/
80
- get_vm($1)
75
+ when /^( on the last VM|)$/
76
+ get_last_vm
77
+ when /^ on the VM(?: called|) "([^"]+)"$/
78
+ get_vm(Regexp.last_match(1))
81
79
  end
82
80
  end
83
81
 
@@ -87,17 +85,15 @@ module VagrantPlugins
87
85
  def execute_on_vm(command, machine, opts = {})
88
86
  @last_shell_command_output = {
89
87
  stdout: '',
90
- stderr: '',
88
+ stderr: ''
91
89
  }
92
90
 
93
91
  @last_shell_command_status = nil
94
92
 
95
93
  machine.communicate.tap do |comm|
96
94
  @last_shell_command_status = comm.execute(
97
- command, {
98
- error_check: false,
99
- sudo: opts[:as_root]
100
- }
95
+ command, error_check: false,
96
+ sudo: opts[:as_root]
101
97
  ) do |type, data|
102
98
  if @vagrant_cucumber_debug
103
99
  puts "[:#{type}] #{data.chomp}"
@@ -1,19 +1,52 @@
1
1
  require 'to_regexp'
2
2
 
3
3
  def push_snapshot(vmname)
4
- vagrant_glue.vagrant_env.cli('snapshot', 'push', vmname)
4
+ case machine_provider(vmname)
5
+ when :libvirt
6
+ vagrant_glue.vagrant_env.cli('sandbox', 'on', vmname)
7
+ vagrant_glue.vagrant_env.cli('sandbox', 'commit', vmname)
8
+ when :no_machines
9
+ return
10
+ else
11
+ vagrant_glue.vagrant_env.cli('snapshot', 'push', vmname)
12
+ end
5
13
  rescue Vagrant::Errors::EnvironmentLockedError
6
14
  sleep 0.2
7
15
  retry
16
+ rescue LoadError
17
+ raise 'Please install the `sahara` vagrant plugin.'
18
+ end
19
+
20
+ def snapshots_enabled?(vmname)
21
+ case machine_provider(vmname)
22
+ when :libvirt
23
+ require 'sahara/session/factory'
24
+ ses = Sahara::Session::Factory.create(vagrant_glue.get_vm(vmname))
25
+ ses.is_snapshot_mode_on?
26
+ when :no_machines
27
+ return false
28
+ else
29
+ machine = vagrant_glue.get_vm(vmname)
30
+ !machine.provider.capability(:snapshot_list).empty?
31
+ end
32
+ end
33
+
34
+ def machine_provider(vmname)
35
+ if vmname.nil?
36
+ return :no_machines if vagrant_glue.vagrant_env.active_machines.empty?
37
+ vagrant_glue.vagrant_env.active_machines[0][1]
38
+ else
39
+ vagrant_glue.get_vm(vmname).provider_name
40
+ end
8
41
  end
9
42
 
10
43
  def pop_snapshot(vmname = nil)
11
- args = [
12
- 'snapshot',
13
- 'pop',
14
- '--no-provision',
15
- '--no-delete',
16
- ]
44
+ args = case machine_provider(vmname)
45
+ when :libvirt
46
+ %w(sandbox rollback)
47
+ else
48
+ %w(snapshot pop --no-provision --no-delete)
49
+ end
17
50
  args << vmname unless vmname.nil?
18
51
 
19
52
  vagrant_glue.vagrant_env.cli(*args)
@@ -24,14 +57,12 @@ end
24
57
 
25
58
  Given /^there is a running VM called "([^"]*)"$/ do |vmname|
26
59
  machine = vagrant_glue.get_vm(vmname)
27
-
28
60
  machine.action(:up)
29
-
30
- push_snapshot(vmname) if machine.provider.capability(:snapshot_list).empty?
61
+ push_snapshot(vmname) unless snapshots_enabled?(vmname)
31
62
  end
32
63
 
33
64
  When /^I roll back the VM called "([^"]*)"$/ do |vmname|
34
- machine = vagrant_glue.get_vm(vmname)
65
+ _machine = vagrant_glue.get_vm(vmname)
35
66
 
36
67
  pop_snapshot(vmname)
37
68
  end
@@ -39,7 +70,7 @@ end
39
70
  Then /^(?:running|I run) the shell command `(.*)`(| as root)(#{VMRE})(?:|, it) should (succeed|fail)$/ do |command, as_root, vmre, condition|
40
71
  options = {
41
72
  as_root: (as_root == ' as root'),
42
- expect_non_zero: (condition == 'fail'),
73
+ expect_non_zero: (condition == 'fail')
43
74
  }
44
75
 
45
76
  options[:expect] = 0 if condition == 'succeed'
@@ -54,7 +85,7 @@ end
54
85
  Then /^(?:running|I run) the shell command `(.*)`(| as root)(#{VMRE})$/ do |command, as_root, vmre|
55
86
  options = {
56
87
  machine: vagrant_glue.identified_vm(vmre),
57
- as_root: (as_root == ' as root'),
88
+ as_root: (as_root == ' as root')
58
89
  }
59
90
 
60
91
  vagrant_glue.execute_on_vm(
@@ -64,7 +95,7 @@ Then /^(?:running|I run) the shell command `(.*)`(| as root)(#{VMRE})$/ do |comm
64
95
  )
65
96
  end
66
97
 
67
- Then /^the (.+) of that shell command should(| not) match (\/.+\/)$/ do |stream, condition, re|
98
+ Then %r{/^the (.+) of that shell command should(| not) match (\/.+\/)$/} do |stream, condition, re|
68
99
  stream.downcase!
69
100
 
70
101
  unless vagrant_glue.last_shell_command_output.key?(stream.to_sym)
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Cucumber
3
- VERSION = '0.1.1'
3
+ VERSION = '1.0.0'.freeze
4
4
  end
5
5
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
3
  require 'vagrant-cucumber/version'
4
4
 
5
5
  Gem::Specification.new do |s|
@@ -24,8 +24,9 @@ Gem::Specification.new do |s|
24
24
  end
25
25
  end
26
26
 
27
- s.add_runtime_dependency 'cucumber', '~>1.3.2'
28
- s.add_runtime_dependency 'to_regexp', '>=0.2.1'
27
+ s.add_runtime_dependency 'cucumber', '~>2.4'
28
+ s.add_runtime_dependency 'to_regexp', '~>0.2.1'
29
+ s.add_runtime_dependency 'sahara', '~>0.0.17'
29
30
 
30
31
  s.files = files
31
32
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Topper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-26 00:00:00.000000000 Z
11
+ date: 2016-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cucumber
@@ -16,28 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3.2
19
+ version: '2.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3.2
26
+ version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: to_regexp
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.2.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.2.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: sahara
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.17
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.17
41
55
  description: This plugin makes it possible for Cucumber to interact with Vagrant
42
56
  email:
43
57
  - jon@scalefactory.com
@@ -45,6 +59,7 @@ executables: []
45
59
  extensions: []
46
60
  extra_rdoc_files: []
47
61
  files:
62
+ - ".rubocop.yml"
48
63
  - CHANGELOG.md
49
64
  - CONTRIBUTING.md
50
65
  - LICENSE