vagrant-rimu 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +12 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +1170 -0
  6. data/.travis.yml +55 -0
  7. data/Gemfile +23 -0
  8. data/LICENSE +373 -0
  9. data/README.md +109 -0
  10. data/Rakefile +6 -0
  11. data/Vagrantfile +6 -0
  12. data/gemfiles/vagrant_1.5.gemfile +18 -0
  13. data/gemfiles/vagrant_1.6.gemfile +18 -0
  14. data/gemfiles/vagrant_1.7.gemfile +18 -0
  15. data/lib/vagrant-rimu/actions/billing_methods.rb +20 -0
  16. data/lib/vagrant-rimu/actions/connect_to_rimu.rb +23 -0
  17. data/lib/vagrant-rimu/actions/create.rb +91 -0
  18. data/lib/vagrant-rimu/actions/is_created.rb +16 -0
  19. data/lib/vagrant-rimu/actions/is_stopped.rb +17 -0
  20. data/lib/vagrant-rimu/actions/list_distributions.rb +20 -0
  21. data/lib/vagrant-rimu/actions/list_servers.rb +20 -0
  22. data/lib/vagrant-rimu/actions/message_already_created.rb +16 -0
  23. data/lib/vagrant-rimu/actions/message_already_off.rb +16 -0
  24. data/lib/vagrant-rimu/actions/message_not_created.rb +16 -0
  25. data/lib/vagrant-rimu/actions/message_will_not_destroy.rb +17 -0
  26. data/lib/vagrant-rimu/actions/modify_provision_path.rb +37 -0
  27. data/lib/vagrant-rimu/actions/move.rb +22 -0
  28. data/lib/vagrant-rimu/actions/read_ssh_info.rb +43 -0
  29. data/lib/vagrant-rimu/actions/read_state.rb +37 -0
  30. data/lib/vagrant-rimu/actions/rebuild.rb +52 -0
  31. data/lib/vagrant-rimu/actions/reload.rb +23 -0
  32. data/lib/vagrant-rimu/actions/setup_sudo.rb +43 -0
  33. data/lib/vagrant-rimu/actions/setup_user.rb +68 -0
  34. data/lib/vagrant-rimu/actions/start_instance.rb +29 -0
  35. data/lib/vagrant-rimu/actions/stop_instance.rb +26 -0
  36. data/lib/vagrant-rimu/actions/terminate_instance.rb +26 -0
  37. data/lib/vagrant-rimu/actions.rb +237 -0
  38. data/lib/vagrant-rimu/commands/billing_methods.rb +18 -0
  39. data/lib/vagrant-rimu/commands/distributions.rb +18 -0
  40. data/lib/vagrant-rimu/commands/list_servers.rb +18 -0
  41. data/lib/vagrant-rimu/commands/move.rb +18 -0
  42. data/lib/vagrant-rimu/commands/rebuild.rb +20 -0
  43. data/lib/vagrant-rimu/commands/root.rb +67 -0
  44. data/lib/vagrant-rimu/config.rb +190 -0
  45. data/lib/vagrant-rimu/errors.rb +21 -0
  46. data/lib/vagrant-rimu/plugin.rb +80 -0
  47. data/lib/vagrant-rimu/provider.rb +54 -0
  48. data/lib/vagrant-rimu/version.rb +5 -0
  49. data/lib/vagrant-rimu.rb +20 -0
  50. data/locales/en.yml +79 -0
  51. data/spec/spec_helper.rb +29 -0
  52. data/spec/vagrant-rimu/actions/connect_to_rimu_spec.rb +38 -0
  53. data/spec/vagrant-rimu/actions/message_already_created_spec.rb +33 -0
  54. data/spec/vagrant-rimu/actions/message_already_off_spec.rb +33 -0
  55. data/spec/vagrant-rimu/actions/message_not_created_spec.rb +33 -0
  56. data/spec/vagrant-rimu/actions/message_will_not_destroy_spec.rb +36 -0
  57. data/spec/vagrant-rimu/actions/modify_provision_path_spec.rb +81 -0
  58. data/spec/vagrant-rimu/actions/read_ssh_info_spec.rb +62 -0
  59. data/spec/vagrant-rimu/actions/read_state_spec.rb +59 -0
  60. data/spec/vagrant-rimu/actions/rebuild_spec.rb +148 -0
  61. data/spec/vagrant-rimu/actions/reload_spec.rb +42 -0
  62. data/spec/vagrant-rimu/actions/setup_sudo_spec.rb +94 -0
  63. data/spec/vagrant-rimu/actions/setup_user_spec.rb +78 -0
  64. data/spec/vagrant-rimu/actions/start_instance_spec.rb +64 -0
  65. data/spec/vagrant-rimu/actions/stop_instance_spec.rb +57 -0
  66. data/spec/vagrant-rimu/actions/terminate_instance_spec.rb +54 -0
  67. data/spec/vagrant-rimu/actions_spec.rb +22 -0
  68. data/spec/vagrant-rimu/commands/billing_methods_spec.rb +4 -0
  69. data/spec/vagrant-rimu/commands/distributions_spec.rb +4 -0
  70. data/spec/vagrant-rimu/commands/list_servers_spec.rb +4 -0
  71. data/spec/vagrant-rimu/commands/move_spec.rb +4 -0
  72. data/spec/vagrant-rimu/commands/rebuild_spec.rb +4 -0
  73. data/spec/vagrant-rimu/commands/root_spec.rb +4 -0
  74. data/spec/vagrant-rimu/config_spec.rb +162 -0
  75. data/spec/vagrant-rimu/provider_spec.rb +13 -0
  76. data/test/Vagrantfile +30 -0
  77. data/test/scripts/provision.sh +3 -0
  78. data/test/test.sh +12 -0
  79. data/test/test_rimu_id_rsa +51 -0
  80. data/test/test_rimu_id_rsa.pub +1 -0
  81. data/vagrant-rimu.gemspec +25 -0
  82. metadata +238 -0
@@ -0,0 +1,54 @@
1
+ require "vagrant-rimu/actions"
2
+
3
+ module VagrantPlugins
4
+ module Rimu
5
+ class Provider < Vagrant.plugin('2', :provider)
6
+
7
+ def initialize(machine)
8
+ @machine = machine
9
+ end
10
+
11
+ def action(name)
12
+ # Attempt to get the action method from the Action class if it
13
+ # exists, otherwise return nil to show that we don't support the
14
+ # given action.
15
+ action_method = "action_#{name}"
16
+ return Actions.send(action_method) if Actions.respond_to?(action_method)
17
+ nil
18
+ end
19
+
20
+ def ssh_info
21
+ # Run a custom action called "read_ssh_info" which does what it
22
+ # says and puts the resulting SSH info into the `:machine_ssh_info`
23
+ # key in the environment.
24
+ env = @machine.action("read_ssh_info")
25
+ env[:machine_ssh_info]
26
+ end
27
+
28
+ def state
29
+ # Run a custom action we define called "read_state" which does
30
+ # what it says. It puts the state in the `:machine_state_id`
31
+ # key in the environment.
32
+ env = @machine.action("read_state")
33
+
34
+ state_id = env[:machine_state_id]
35
+
36
+ # Get the short and long description
37
+ short = I18n.t("vagrant_rimu.states.short_#{state_id}")
38
+ long = I18n.t("vagrant_rimu.states.long_#{state_id}")
39
+
40
+ # Return the MachineState object
41
+ Vagrant::MachineState.new(state_id, short, long)
42
+ end
43
+
44
+ def to_s
45
+ if @machine.respond_to?('id') and ! @machine.id.nil?
46
+ id = @machine.id
47
+ else
48
+ id = 'new'
49
+ end
50
+ "Rimu (#{id})"
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module Rimu
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ require 'pathname'
2
+
3
+ require 'vagrant-rimu/plugin'
4
+
5
+ module VagrantPlugins
6
+ module Rimu
7
+ lib_path = Pathname.new(File.expand_path("../vagrant-rimu", __FILE__))
8
+ autoload :Errors, lib_path.join('errors')
9
+
10
+ def self.source_root
11
+ @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
12
+ end
13
+
14
+ def self.public_key(private_key_path)
15
+ File.read("#{private_key_path}.pub")
16
+ rescue
17
+ raise Errors::PublicKeyError, :path => "#{private_key_path}.pub"
18
+ end
19
+ end
20
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,79 @@
1
+ en:
2
+ vagrant_rimu:
3
+ off: |-
4
+ VPS is off
5
+ creating: |-
6
+ Creating a new VPS...
7
+ ready: |-
8
+ Machine is booted and ready for use!
9
+ not_created: |-
10
+ The VPS is not created. Please run `vagrant up` first.
11
+ already_status: |-
12
+ The VPS is already %{status}.
13
+ starting: |-
14
+ Starting the VPS...
15
+ stopping: |-
16
+ Stopping the VPS...
17
+ terminating: |-
18
+ Terminating the VPS...
19
+ waiting_for_ready: |-
20
+ Waiting for VPS to become "ready"...
21
+ will_not_destroy: |-
22
+ The VPS '%{name}' will not be destroyed, since the confirmation
23
+ was declined.
24
+ ip_address: |-
25
+ Assigned IP address: %{ip}
26
+ creating_user: "Creating user account: %{user}..."
27
+ modifying_sudo: "Modifying sudoers file to remove tty requirement..."
28
+ reloading: "Rebooting the VPS..."
29
+ rebuilding: "Rebuilding the VPS..."
30
+ config:
31
+ api_key: "The RIMU API Key option: [api_key] is required"
32
+ host_name: "The Host name option: [host_name] is required"
33
+ invalid_host_name: |-
34
+ Host name: %{host_name} is not a fully qualified domain name (FQDN)
35
+ private_key: "A valid SSH private key path option: [private_key_path] is required"
36
+ missing_private_key: "SSH private key not found: %{key}"
37
+ public_key: "SSH public key not found: %{key}"
38
+ errors:
39
+ api_error: |-
40
+ The API request failed. Please inspect the error message
41
+ below for more info.
42
+
43
+ Error: %{stderr}
44
+ public_key: |-
45
+ There was an issue reading the public key at:
46
+
47
+ Path: %{path}
48
+
49
+ Please check the file's permissions.
50
+ rsync: |-
51
+ There was an error when attemping to rsync a share folder.
52
+ Please inspect the error message below for more info.
53
+
54
+ Host path: %{hostpath}
55
+ Guest path: %{guestpath}
56
+ Error: %{stderr}
57
+ states:
58
+ short_not_created: |-
59
+ not created
60
+ long_not_created: |-
61
+ The VPS is not created. Run `vagrant up` to create it.
62
+ short_starting: |-
63
+ starting
64
+ long_starting: |-
65
+ The VPS is starting.
66
+ short_stopped: |-
67
+ stopped
68
+ long_stopped: |-
69
+ The VPS is stopped. Run `vagrant up` to start it.
70
+ short_stopping: |-
71
+ stopping
72
+ long_stopping: |-
73
+ The VPS is stopping. Wait until is completely stopped to
74
+ run `vagrant up` and start it.
75
+ short_running: |-
76
+ running
77
+ long_running: |-
78
+ The VPS is running. To stop this machine, you can run
79
+ `vagrant halt`. To destroy the machine, you can run `vagrant destroy`.
@@ -0,0 +1,29 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ require 'codeclimate-test-reporter'
4
+
5
+ SimpleCov.start
6
+ if ENV['CI']=='true'
7
+ require 'codecov'
8
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
9
+ Coveralls.wear!
10
+ CodeClimate::TestReporter.start
11
+ end
12
+
13
+ Dir['lib/**/*.rb'].each do|file|
14
+ require_string = file.match(/lib\/(.*)\.rb/)[1]
15
+ require require_string
16
+ end
17
+
18
+ require 'rspec/its'
19
+
20
+ I18n.load_path << File.expand_path('locales/en.yml', Pathname.new(File.expand_path('../../', __FILE__)))
21
+
22
+ RSpec.configure do |config|
23
+ config.mock_with :rspec do |c|
24
+ c.syntax = [:should, :expect]
25
+ end
26
+ config.expect_with :rspec do |c|
27
+ c.syntax = [:should, :expect]
28
+ end
29
+ end
@@ -0,0 +1,38 @@
1
+ require 'spec_helper'
2
+
3
+ describe VagrantPlugins::Rimu::Actions::ConnectToRimu do
4
+ let(:app) do
5
+ double.tap do |app|
6
+ app.stub(:call)
7
+ end
8
+ end
9
+
10
+ let(:config) do
11
+ double.tap do |config|
12
+ config.stub(:api_url) { nil }
13
+ config.stub(:api_key) { 'foo' }
14
+ end
15
+ end
16
+
17
+ let(:env) do
18
+ {}.tap do |env|
19
+ env[:ui] = double
20
+ env[:ui].stub(:info).with(anything)
21
+ env[:ui].stub(:warn).with(anything)
22
+ env[:machine] = double('machine')
23
+ env[:machine].stub(:provider_config) { config }
24
+ env[:rimu_api] = double('rimu_api')
25
+ end
26
+ end
27
+
28
+ before :each do
29
+ @action = VagrantPlugins::Rimu::Actions::ConnectToRimu.new(app, env)
30
+ end
31
+
32
+ describe 'ConnectToRimu' do
33
+ it 'set the correct api_key' do
34
+ @action.call(env)
35
+ expect(env[:rimu_api].api_key).to eq('foo')
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,33 @@
1
+ require 'ostruct'
2
+ require 'pathname'
3
+
4
+ require 'spec_helper'
5
+
6
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
7
+ # autoload :StopInstance, action_root.join('stop_instance')
8
+
9
+ describe VagrantPlugins::Rimu::Actions::MessageAlreadyCreated do
10
+ let(:env) do
11
+ {}.tap do |env|
12
+ env[:ui] = double('ui').tap do |ui|
13
+ ui.stub(:info).with(anything)
14
+ ui.stub(:error).with(anything)
15
+ end
16
+ end
17
+ end
18
+
19
+ let(:app) do
20
+ double('app').tap do |app|
21
+ app.stub(:call).with(anything)
22
+ end
23
+ end
24
+
25
+ describe 'call' do
26
+ it 'sets info variable' do
27
+ expect(I18n).to receive(:t).with('vagrant_rimu.already_status', :status => 'created')
28
+ expect(app).to receive(:call)
29
+ @action = VagrantPlugins::Rimu::Actions::MessageAlreadyCreated.new(app, env)
30
+ @action.call(env)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'ostruct'
2
+ require 'pathname'
3
+
4
+ require 'spec_helper'
5
+
6
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
7
+ # autoload :StopInstance, action_root.join('stop_instance')
8
+
9
+ describe VagrantPlugins::Rimu::Actions::MessageAlreadyOff do
10
+ let(:env) do
11
+ {}.tap do |env|
12
+ env[:ui] = double('ui').tap do |ui|
13
+ ui.stub(:info).with(anything)
14
+ ui.stub(:error).with(anything)
15
+ end
16
+ end
17
+ end
18
+
19
+ let(:app) do
20
+ double('app').tap do |app|
21
+ app.stub(:call).with(anything)
22
+ end
23
+ end
24
+
25
+ describe 'call' do
26
+ it 'sets info variable' do
27
+ expect(I18n).to receive(:t).with('vagrant_rimu.already_status', :status => :off)
28
+ expect(app).to receive(:call)
29
+ @action = VagrantPlugins::Rimu::Actions::MessageAlreadyOff.new(app, env)
30
+ @action.call(env)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'ostruct'
2
+ require 'pathname'
3
+
4
+ require 'spec_helper'
5
+
6
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
7
+ # autoload :StopInstance, action_root.join('stop_instance')
8
+
9
+ describe VagrantPlugins::Rimu::Actions::MessageNotCreated do
10
+ let(:env) do
11
+ {}.tap do |env|
12
+ env[:ui] = double('ui').tap do |ui|
13
+ ui.stub(:info).with(anything)
14
+ ui.stub(:error).with(anything)
15
+ end
16
+ end
17
+ end
18
+
19
+ let(:app) do
20
+ double('app').tap do |app|
21
+ app.stub(:call).with(anything)
22
+ end
23
+ end
24
+
25
+ describe 'call' do
26
+ it 'sets info variable' do
27
+ expect(I18n).to receive(:t).with('vagrant_rimu.not_created')
28
+ expect(app).to receive(:call)
29
+ @action = VagrantPlugins::Rimu::Actions::MessageNotCreated.new(app, env)
30
+ @action.call(env)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ require 'ostruct'
2
+ require 'pathname'
3
+
4
+ require 'spec_helper'
5
+
6
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
7
+ # autoload :StopInstance, action_root.join('stop_instance')
8
+
9
+ describe VagrantPlugins::Rimu::Actions::MessageWillNotDestroy do
10
+ let(:env) do
11
+ {}.tap do |env|
12
+ env[:ui] = double('ui').tap do |ui|
13
+ ui.stub(:info).with(anything)
14
+ ui.stub(:error).with(anything)
15
+ end
16
+ env[:machine] = OpenStruct.new
17
+ end
18
+ end
19
+
20
+ let(:app) do
21
+ double('app').tap do |app|
22
+ app.stub(:call).with(anything)
23
+ end
24
+ end
25
+
26
+ describe 'call' do
27
+ it 'sets info variable' do
28
+ name = 'rimu.example.com'
29
+ env[:machine].name = name
30
+ expect(I18n).to receive(:t).with('vagrant_rimu.will_not_destroy', {:name => name})
31
+ expect(app).to receive(:call)
32
+ @action = VagrantPlugins::Rimu::Actions::MessageWillNotDestroy.new(app, env)
33
+ @action.call(env)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,81 @@
1
+ require 'pathname'
2
+ require 'spec_helper'
3
+
4
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
5
+ # autoload :StopInstance, action_root.join('stop_instance')
6
+
7
+ describe VagrantPlugins::Rimu::Actions::ModifyProvisionPath do
8
+ let(:communicate) { double('communicate') }
9
+ let(:sudo) { double('sudo') }
10
+ let(:machine) { double('machine') }
11
+ let(:ssh_info) { double('ssh_info') }
12
+ let(:vm) { double('vm') }
13
+ let(:provisioners) { double('provisioners') }
14
+
15
+ let(:provisioner) do
16
+ double.tap do |p|
17
+ p.stub(:config) {{:upload_path => '/tmp'}}
18
+ end
19
+ end
20
+
21
+ let(:config) do
22
+ double.tap do |config|
23
+ provisioners.stub(:each) {
24
+ [
25
+ provisioner,
26
+ provisioner,
27
+ ]
28
+ }
29
+ vm.stub(:provisioners) { provisioners }
30
+ config.stub(:vm) { vm }
31
+ end
32
+ end
33
+
34
+ let(:env) do
35
+ {}.tap do |env|
36
+ env[:ui] = double('ui').tap do |ui|
37
+ ui.stub(:info).with(anything)
38
+ ui.stub(:error).with(anything)
39
+ end
40
+ communicate.stub(:sudo) { sudo }
41
+ machine.stub(:config) { config }
42
+ ssh_info.stub(:[]) { {:username=>'rimu'} }
43
+ machine.stub(:ssh_info) { ssh_info }
44
+ machine.stub(:communicate) { communicate }
45
+ env[:machine] = machine
46
+ end
47
+ end
48
+
49
+ let(:app) do
50
+ double('app').tap do |app|
51
+ app.stub(:call).with(anything)
52
+ end
53
+ end
54
+
55
+ describe 'call' do
56
+ context 'when provisioning is not enabled' do
57
+ it 'should not call provisioners' do
58
+ env.stub(:has_key?).with(:provision_enabled) { true }
59
+ expect(env).to receive(:has_key?).with(:provision_enabled)
60
+ expect(env[:machine]).not_to receive(:ssh_info)
61
+ expect(env[:machine].config.vm.provisioners).not_to receive(:each)
62
+ expect(env[:machine].communicate).not_to receive(:sudo)
63
+ expect(app).to receive(:call)
64
+ @action = VagrantPlugins::Rimu::Actions::ModifyProvisionPath.new(app, env)
65
+ @action.call(env)
66
+ end
67
+ end
68
+
69
+ context 'when provisioning is enabled' do
70
+ it 'should call provisioners' do
71
+ env.stub(:has_key?).with(:provision_enabled) { false }
72
+ expect(env).to receive(:has_key?).with(:provision_enabled)
73
+ expect(env[:machine]).to receive(:ssh_info)
74
+ expect(env[:machine].config.vm.provisioners).to receive(:each)
75
+ # expect(env[:machine].communicate).to receive(:sudo)
76
+ @action = VagrantPlugins::Rimu::Actions::ModifyProvisionPath.new(app, env)
77
+ @action.call(env)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,62 @@
1
+ require 'pathname'
2
+ require 'spec_helper'
3
+
4
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
5
+ # autoload :StopInstance, action_root.join('stop_instance')
6
+
7
+ describe VagrantPlugins::Rimu::Actions::ReadSSHInfo do
8
+ let(:orders) { double('orders') }
9
+ let(:machine) { double('machine') }
10
+ let(:order) { double('order') }
11
+ let(:allocated_ips) { {:primary_ip=>'192.168.1.1'} }
12
+ let(:id) { '200' }
13
+
14
+
15
+ let(:env) do
16
+ {}.tap do |env|
17
+ env[:ui] = double('ui').tap do |ui|
18
+ ui.stub(:info).with(anything)
19
+ ui.stub(:error).with(anything)
20
+ end
21
+ env[:rimu_api] = double('rimu_api').tap do |os|
22
+ order.stub(:allocated_ips) { allocated_ips }
23
+ orders.stub(:order) { order }
24
+ os.stub(:orders) { orders }
25
+ end
26
+ machine.stub(:id) { id }
27
+ env[:machine] = machine
28
+ end
29
+ end
30
+
31
+ let(:app) do
32
+ double('app').tap do |app|
33
+ app.stub(:call).with(anything)
34
+ end
35
+ end
36
+
37
+ describe 'call' do
38
+ context 'when machine id is nil' do
39
+ it 'should not call order' do
40
+ env[:machine].id.stub(:nil?) { true }
41
+ expect(env[:machine].id).to receive(:nil?)
42
+ expect(order).not_to receive(:allocated_ips)
43
+ expect(env[:rimu_api].orders).not_to receive(:order).with(id.to_i)
44
+ expect(app).to receive(:call)
45
+ @action = VagrantPlugins::Rimu::Actions::ReadSSHInfo.new(app, env)
46
+ @action.call(env)
47
+ end
48
+ end
49
+
50
+ context 'when machine id is not nil' do
51
+ it 'should call orders' do
52
+ env[:machine].id.stub(:nil?) { false }
53
+ expect(env[:machine].id).to receive(:nil?)
54
+ expect(order).to receive(:allocated_ips)
55
+ expect(env[:rimu_api].orders).to receive(:order).with(id.to_i)
56
+ expect(app).to receive(:call)
57
+ @action = VagrantPlugins::Rimu::Actions::ReadSSHInfo.new(app, env)
58
+ @action.call(env)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,59 @@
1
+ require 'pathname'
2
+ require 'spec_helper'
3
+
4
+ # action_root = Pathname.new(File.expand_path('../../../../lib/vagrant-rimu/actions', __FILE__))
5
+ # autoload :StopInstance, action_root.join('stop_instance')
6
+
7
+ describe VagrantPlugins::Rimu::Actions::ReadState do
8
+ let(:servers) { double('servers') }
9
+ let(:machine) { double('machine') }
10
+ let(:status) { double('status') }
11
+ let(:id) { '200' }
12
+
13
+
14
+ let(:env) do
15
+ {}.tap do |env|
16
+ env[:ui] = double('ui').tap do |ui|
17
+ ui.stub(:info).with(anything)
18
+ ui.stub(:error).with(anything)
19
+ end
20
+ env[:rimu_api] = double('rimu_api').tap do |os|
21
+ status.stub(:running_state) { 'RUNNING' }
22
+ servers.stub(:status) { status }
23
+ os.stub(:servers) { servers }
24
+ end
25
+ machine.stub(:id) { id }
26
+ env[:machine] = machine
27
+ end
28
+ end
29
+
30
+ let(:app) do
31
+ double('app').tap do |app|
32
+ app.stub(:call).with(anything)
33
+ end
34
+ end
35
+
36
+ describe 'call' do
37
+ context 'when machine id is nil' do
38
+ it 'should not call status' do
39
+ env[:machine].id.stub(:nil?) { true }
40
+ expect(env[:machine].id).to receive(:nil?)
41
+ expect(env[:rimu_api].servers).not_to receive(:status).with(id.to_i)
42
+ expect(app).to receive(:call)
43
+ @action = VagrantPlugins::Rimu::Actions::ReadState.new(app, env)
44
+ @action.call(env)
45
+ end
46
+ end
47
+
48
+ context 'when machine id is not nil' do
49
+ it 'should call status' do
50
+ env[:machine].id.stub(:nil?) { false }
51
+ expect(env[:machine].id).to receive(:nil?)
52
+ expect(env[:rimu_api].servers).to receive(:status).with(id.to_i)
53
+ expect(app).to receive(:call)
54
+ @action = VagrantPlugins::Rimu::Actions::ReadState.new(app, env)
55
+ @action.call(env)
56
+ end
57
+ end
58
+ end
59
+ end