vagrant-notify 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +6 -2
- data/lib/vagrant-notify/plugin.rb +17 -3
- data/lib/vagrant-notify/server.rb +3 -6
- data/lib/vagrant-notify/version.rb +1 -1
- metadata +1 -8
- data/burn/middleware/install_command.rb +0 -45
- data/burn/middleware/start_server.rb +0 -78
- data/burn/middleware/stop_server.rb +0 -54
- data/burn/old_stack.rb +0 -11
- data/burn/spec/middleware/install_command_spec.rb +0 -68
- data/burn/spec/middleware/start_server_spec.rb +0 -85
- data/burn/spec/middleware/stop_server_spec.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d66b2dcc7b07f99723c453e8a8708720d3e3139
|
4
|
+
data.tar.gz: d58378442c0b7f1a2850589d146cd620133aa1c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90758ab9aec949ec3ccbe9b14a188da3b1f9555576e59ce7acc4730143578b8024cfca89ad9feb7d80a438b280b63de45b25e8b891c501af2477d6d72f1a69cf
|
7
|
+
data.tar.gz: 6659609a5349738fd444e5f4fa4c0a65370f8b39bd786527c8f1aa9d4511551b58cf203716614df7c6a2ba0671a559624e01e2043057c5e2f1db8313864b374b
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -27,8 +27,12 @@ command.
|
|
27
27
|
If by any chance your IP changes, you can run `vagrant provision` in order to
|
28
28
|
update the guest script with the new IP.
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
## Known issues
|
31
|
+
|
32
|
+
* Does not work properly on multi vm environments, it used to work on a Vagrant
|
33
|
+
< 1.1 version and I'm planning to fix that as soon as I have a chance.
|
34
|
+
|
35
|
+
* vagrant's `suspend` does not stop the notification server
|
32
36
|
|
33
37
|
|
34
38
|
## Contributing
|
@@ -4,13 +4,14 @@ module Vagrant
|
|
4
4
|
name 'vagrant notify'
|
5
5
|
description 'Forwards notify-send from guest to host machine'
|
6
6
|
|
7
|
+
# TODO: This should be generic, we don't want to hard code every single
|
8
|
+
# possible provider action class that Vagrant might have
|
7
9
|
action_hook 'start-server-after-boot' do |hook|
|
8
10
|
require_relative './action'
|
9
|
-
# TODO: This should be generic
|
10
11
|
hook.after VagrantPlugins::ProviderVirtualBox::Action::Boot, Vagrant::Notify::Action.action_start_server
|
11
12
|
|
12
13
|
if defined?(Vagrant::LXC)
|
13
|
-
# TODO: Require just the boot file once its "require dependencies" are sorted out
|
14
|
+
# TODO: Require just the boot action file once its "require dependencies" are sorted out
|
14
15
|
require 'vagrant-lxc/action'
|
15
16
|
hook.after Vagrant::LXC::Action::Boot, Vagrant::Notify::Action.action_start_server
|
16
17
|
end
|
@@ -20,10 +21,23 @@ module Vagrant
|
|
20
21
|
hook.after Vagrant::Action::Builtin::Provision, Vagrant::Notify::Action.action_start_server
|
21
22
|
end
|
22
23
|
|
23
|
-
action_hook 'stop-server-after-halting' do |hook|
|
24
|
+
action_hook 'stop-server-after-halting', :machine_action_halt do |hook|
|
24
25
|
require_relative './action'
|
25
26
|
hook.after Vagrant::Action::Builtin::GracefulHalt, Vagrant::Notify::Action.action_stop_server
|
26
27
|
end
|
28
|
+
|
29
|
+
# TODO: This should be generic, we don't want to hard code every single
|
30
|
+
# possible provider action class that Vagrant might have
|
31
|
+
action_hook 'stop-server-before-destruction', :machine_action_destroy do |hook|
|
32
|
+
require_relative './action'
|
33
|
+
hook.before VagrantPlugins::ProviderVirtualBox::Action::Destroy, Vagrant::Notify::Action.action_stop_server
|
34
|
+
|
35
|
+
if defined?(Vagrant::LXC)
|
36
|
+
# TODO: Require just the destroy action file once its "require dependencies" are sorted out
|
37
|
+
require 'vagrant-lxc/action'
|
38
|
+
hook.before Vagrant::LXC::Action::Destroy, Vagrant::Notify::Action.action_stop_server
|
39
|
+
end
|
40
|
+
end
|
27
41
|
end
|
28
42
|
end
|
29
43
|
end
|
@@ -68,12 +68,9 @@ module Vagrant
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def communicator
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
machine = env.machine(@machine_name, @provider)
|
75
|
-
machine.communicate
|
76
|
-
end
|
71
|
+
env = Vagrant::Environment.new
|
72
|
+
machine = env.machine(@machine_name, @provider)
|
73
|
+
machine.communicate
|
77
74
|
end
|
78
75
|
end
|
79
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-notify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Rehm
|
@@ -27,13 +27,6 @@ files:
|
|
27
27
|
- LICENSE.txt
|
28
28
|
- README.md
|
29
29
|
- Rakefile
|
30
|
-
- burn/middleware/install_command.rb
|
31
|
-
- burn/middleware/start_server.rb
|
32
|
-
- burn/middleware/stop_server.rb
|
33
|
-
- burn/old_stack.rb
|
34
|
-
- burn/spec/middleware/install_command_spec.rb
|
35
|
-
- burn/spec/middleware/start_server_spec.rb
|
36
|
-
- burn/spec/middleware/stop_server_spec.rb
|
37
30
|
- files/notify-send.erb
|
38
31
|
- lib/vagrant-notify.rb
|
39
32
|
- lib/vagrant-notify/action.rb
|
@@ -1,45 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Notify
|
3
|
-
module Middleware
|
4
|
-
class InstallCommand
|
5
|
-
def initialize(app, env)
|
6
|
-
@app = app
|
7
|
-
@command_template_file = Vagrant::Notify.files_path + '/notify-send.erb'
|
8
|
-
end
|
9
|
-
|
10
|
-
def call(env)
|
11
|
-
env[:ui].info('Compiling and installing notify-send script on guest machine')
|
12
|
-
path = compile_command(env)
|
13
|
-
install_command_on_guest(env, path)
|
14
|
-
@app.call(env)
|
15
|
-
end
|
16
|
-
|
17
|
-
def host_ip(env)
|
18
|
-
ip = nil
|
19
|
-
env[:vm].channel.execute('echo -n $SSH_CLIENT | cut -d" " -f1') do |buffer, data|
|
20
|
-
ip = data.chomp if buffer == :stdout
|
21
|
-
end
|
22
|
-
ip
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def compile_command(env)
|
28
|
-
uuid = env[:vm].uuid.to_s
|
29
|
-
local_data = env[:vm].env.local_data
|
30
|
-
host_port = local_data['vagrant-notify'][uuid]['port']
|
31
|
-
template_binding = OpenStruct.new(:host_ip => host_ip(env), :host_port => host_port)
|
32
|
-
command = ERB.new(File.read(@command_template_file)).result(template_binding.instance_eval { binding })
|
33
|
-
File.open(env[:vm].env.tmp_path + 'vagrant-notify-send', 'w') { |f| f.write(command) }
|
34
|
-
end
|
35
|
-
|
36
|
-
def install_command_on_guest(env, command_path)
|
37
|
-
# DISCUSS: Should we back up the original command if present?
|
38
|
-
source = env[:vm].env.tmp_path + 'vagrant-notify-send'
|
39
|
-
env[:vm].channel.upload(source.to_s, '/tmp/notify-send')
|
40
|
-
env[:vm].channel.sudo('mv /tmp/notify-send /usr/bin/notify-send && chmod +x /usr/bin/notify-send')
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Notify
|
3
|
-
module Middleware
|
4
|
-
class StartServer
|
5
|
-
def initialize(app, env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
@env = env
|
11
|
-
if pid = server_is_running?
|
12
|
-
env[:ui].info "Notification server is already running (#{pid})"
|
13
|
-
else
|
14
|
-
port, pid = run_server
|
15
|
-
env[:ui].info "Notification server is listening on #{port} (#{pid})"
|
16
|
-
end
|
17
|
-
|
18
|
-
@app.call(env)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def run_server
|
24
|
-
port = next_available_port
|
25
|
-
uuid = @env[:vm].uuid.to_s
|
26
|
-
pid = Server.run(@env, port)
|
27
|
-
|
28
|
-
local_data = @env[:vm].env.local_data
|
29
|
-
config = local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
|
30
|
-
config.merge!(uuid => {'pid' => pid, 'port' => port })
|
31
|
-
local_data.commit
|
32
|
-
|
33
|
-
[port, pid]
|
34
|
-
end
|
35
|
-
|
36
|
-
def next_available_port
|
37
|
-
range = @env[:vm].config.vm.auto_port_range.to_a
|
38
|
-
range -= @env[:vm].config.vm.forwarded_ports.collect { |opts| opts[:hostport].to_i }
|
39
|
-
range -= used_ports
|
40
|
-
|
41
|
-
if range.empty?
|
42
|
-
raise 'Unable to find a port to bind the notification server to'
|
43
|
-
end
|
44
|
-
|
45
|
-
# Set the port up to be the last one since vagrant's port collision handler
|
46
|
-
# will use the first as in:
|
47
|
-
# https://github.com/mitchellh/vagrant/blob/1-0-stable/lib/vagrant/action/vm/check_port_collisions.rb#L51
|
48
|
-
port = range.pop
|
49
|
-
end
|
50
|
-
|
51
|
-
def used_ports
|
52
|
-
local_data = @env[:vm].env.local_data
|
53
|
-
local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
|
54
|
-
local_data['vagrant-notify'].values.map do |settings|
|
55
|
-
settings['port'].to_i if settings['port']
|
56
|
-
end.compact
|
57
|
-
end
|
58
|
-
|
59
|
-
# REFACTOR: This is duplicated on Middleware::StopServer
|
60
|
-
def server_is_running?
|
61
|
-
uuid = @env[:vm].uuid.to_s
|
62
|
-
begin
|
63
|
-
pid = @env[:vm].env.local_data.
|
64
|
-
fetch('vagrant-notify', {}).
|
65
|
-
fetch(uuid, {}).
|
66
|
-
fetch('pid', nil)
|
67
|
-
return false unless pid
|
68
|
-
|
69
|
-
Process.getpgid(pid)
|
70
|
-
pid
|
71
|
-
rescue Errno::ESRCH
|
72
|
-
false
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
module Vagrant
|
2
|
-
module Notify
|
3
|
-
module Middleware
|
4
|
-
class StopServer
|
5
|
-
def initialize(app, env)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
def call(env)
|
10
|
-
# TODO: Need to handle multi VMs setup
|
11
|
-
|
12
|
-
if pid = server_is_running?(env)
|
13
|
-
env[:ui].info('Stopping notification server...')
|
14
|
-
stop_server(pid)
|
15
|
-
cleanup_local_data(env)
|
16
|
-
end
|
17
|
-
|
18
|
-
@app.call(env)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def stop_server(pid)
|
24
|
-
Process.kill('KILL', pid.to_i) rescue nil
|
25
|
-
end
|
26
|
-
|
27
|
-
def cleanup_local_data(env)
|
28
|
-
uuid = env[:vm].uuid.to_s
|
29
|
-
local_data = env[:vm].env.local_data
|
30
|
-
local_data['vagrant-notify'] ||= Vagrant::Util::HashWithIndifferentAccess.new
|
31
|
-
local_data['vagrant-notify'].delete(uuid)
|
32
|
-
local_data.commit
|
33
|
-
end
|
34
|
-
|
35
|
-
# REFACTOR: This is duplicated on Middleware::StartServer
|
36
|
-
def server_is_running?(env)
|
37
|
-
uuid = env[:vm].uuid.to_s
|
38
|
-
begin
|
39
|
-
pid = env[:vm].env.local_data.
|
40
|
-
fetch('vagrant-notify', {}).
|
41
|
-
fetch(uuid, {}).
|
42
|
-
fetch('pid', nil)
|
43
|
-
return false unless pid
|
44
|
-
|
45
|
-
Process.getpgid(pid.to_i)
|
46
|
-
pid
|
47
|
-
rescue Errno::ESRCH
|
48
|
-
false
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/burn/old_stack.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
Vagrant.actions[:start].tap do |start|
|
2
|
-
start.insert_after Vagrant::Action::VM::Boot, Vagrant::Notify::Middleware::StartServer
|
3
|
-
start.insert_after Vagrant::Notify::Middleware::StartServer, Vagrant::Notify::Middleware::InstallCommand
|
4
|
-
end
|
5
|
-
Vagrant.actions[:resume].tap do |start|
|
6
|
-
start.use Vagrant::Notify::Middleware::StartServer
|
7
|
-
start.use Vagrant::Notify::Middleware::InstallCommand
|
8
|
-
end
|
9
|
-
Vagrant.actions[:halt].use Vagrant::Notify::Middleware::StopServer
|
10
|
-
Vagrant.actions[:suspend].use Vagrant::Notify::Middleware::StopServer
|
11
|
-
Vagrant.actions[:provision].use Vagrant::Notify::Middleware::InstallCommand
|
@@ -1,68 +0,0 @@
|
|
1
|
-
describe Vagrant::Notify::Middleware::InstallCommand do
|
2
|
-
let(:start_stack) { Vagrant.actions[:start].send(:stack) }
|
3
|
-
let(:provision_stack) { Vagrant.actions[:provision].send(:stack) }
|
4
|
-
let(:resume_stack) { Vagrant.actions[:resume].send(:stack) }
|
5
|
-
let(:host_ip) { 'host-ip' }
|
6
|
-
let(:host_port) { 789 }
|
7
|
-
let(:template) { ERB.new('<%= host_ip %> <%= host_port %>') }
|
8
|
-
let(:compiled_command_path) { @env[:vm].env.tmp_path + 'vagrant-notify-send' }
|
9
|
-
let(:target_tmp_path) { '/tmp/notify-send' }
|
10
|
-
let(:target_path) { '/usr/bin/notify-send' }
|
11
|
-
let(:channel) { mock(:channel, :sudo => true, :upload => true, :execute => true) }
|
12
|
-
let(:get_ip_command) { 'echo -n $SSH_CLIENT | cut -d" " -f1' }
|
13
|
-
let(:uuid) { @env[:vm].uuid.to_s }
|
14
|
-
let(:local_data) { Hash.new }
|
15
|
-
|
16
|
-
subject { described_class.new(@app, @env) }
|
17
|
-
|
18
|
-
before do
|
19
|
-
@app, @env = action_env(vagrant_env.vms.values.first.env)
|
20
|
-
@env[:vm].stub(:channel => channel)
|
21
|
-
@env[:vm].env.stub(:local_data => local_data)
|
22
|
-
local_data['vagrant-notify'] = { uuid => {'port' => host_port } }
|
23
|
-
ERB.stub(:new => template)
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'gets called after boot middleware when starting machine' do
|
27
|
-
boot_index = start_stack.index([Vagrant::Action::VM::Boot, [], nil])
|
28
|
-
middleware_index = start_stack.index([described_class, [], nil])
|
29
|
-
|
30
|
-
boot_index.should < middleware_index
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'gets called when resuming machine' do
|
34
|
-
resume_stack.should include([described_class, [], nil])
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'gets called when provisioning machine' do
|
38
|
-
provision_stack.should include([described_class, [], nil])
|
39
|
-
end
|
40
|
-
|
41
|
-
it "is able to identify host's ip" do
|
42
|
-
channel.should_receive(:execute).with(get_ip_command).and_yield(:stdout, host_ip + "\n")
|
43
|
-
subject.host_ip(@env).should == host_ip
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'compiles command script passing host ip and server port' do
|
47
|
-
subject.stub(:host_ip => host_ip)
|
48
|
-
subject.call(@env)
|
49
|
-
File.read(compiled_command_path).should == "#{host_ip} #{host_port}"
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'uploads compiled command script over to guest machine' do
|
53
|
-
channel.should_receive(:upload).with(compiled_command_path.to_s, target_tmp_path)
|
54
|
-
subject.stub(:host_ip => host_ip)
|
55
|
-
subject.call(@env)
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'installs command for all users' do
|
59
|
-
channel.should_receive(:sudo).with("mv #{target_tmp_path} #{target_path} && chmod +x #{target_path}")
|
60
|
-
subject.stub(:host_ip => host_ip)
|
61
|
-
subject.call(@env)
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'notifies user about script installation' do
|
65
|
-
@env[:ui].should_receive(:info).with('Compiling and installing notify-send script on guest machine')
|
66
|
-
subject.call(@env)
|
67
|
-
end
|
68
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
describe Vagrant::Notify::Middleware::StartServer do
|
2
|
-
let(:start_stack) { Vagrant.actions[:start].send(:stack) }
|
3
|
-
let(:resume_stack) { Vagrant.actions[:resume].send(:stack) }
|
4
|
-
let(:server_pid) { 1234 }
|
5
|
-
let(:available_port) { 8080 }
|
6
|
-
let(:uuid) { @env[:vm].uuid.to_s }
|
7
|
-
let(:local_data) { Hash.new }
|
8
|
-
|
9
|
-
subject { described_class.new(@app, @env) }
|
10
|
-
|
11
|
-
before do
|
12
|
-
@app, @env = action_env(vagrant_env.vms.values.first.env)
|
13
|
-
@env[:vm].env.stub(:local_data => local_data)
|
14
|
-
local_data.stub(:commit)
|
15
|
-
Vagrant::Notify::Server.stub(:run => server_pid)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'gets called when starting machine' do
|
19
|
-
start_stack.should include([described_class, [], nil])
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'gets called when resuming machine' do
|
23
|
-
resume_stack.should include([described_class, [], nil])
|
24
|
-
end
|
25
|
-
|
26
|
-
context 'server is down' do
|
27
|
-
before do
|
28
|
-
Process.stub(:getpgid).and_raise(Errno::ESRCH)
|
29
|
-
subject.stub(:next_available_port => available_port)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'fires up notification server when called' do
|
33
|
-
Vagrant::Notify::Server.should_receive(:run).with(@env, available_port)
|
34
|
-
subject.call(@env)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'notifies user about server start' do
|
38
|
-
@env[:ui].should_receive(:info).with("Notification server is listening on #{available_port} (#{server_pid})")
|
39
|
-
subject.call(@env)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "persists server PID on local data" do
|
43
|
-
local_data.should_receive(:commit)
|
44
|
-
subject.call(@env)
|
45
|
-
local_data['vagrant-notify'][uuid]['pid'].should == server_pid
|
46
|
-
end
|
47
|
-
|
48
|
-
it "persists server port on local data" do
|
49
|
-
local_data.should_receive(:commit)
|
50
|
-
subject.call(@env)
|
51
|
-
local_data['vagrant-notify'][uuid]['port'].should == available_port
|
52
|
-
end
|
53
|
-
|
54
|
-
context "and a PID is present on Vagrant's local data" do
|
55
|
-
let(:new_pid) { server_pid + 1 }
|
56
|
-
|
57
|
-
before do
|
58
|
-
Vagrant::Notify::Server.stub(:run => new_pid)
|
59
|
-
local_data['vagrant-notify'] = { uuid => { 'pid' => server_pid } }
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'updates server PID' do
|
63
|
-
subject.call(@env)
|
64
|
-
local_data['vagrant-notify'][uuid]['pid'].should == new_pid
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'server is up' do
|
70
|
-
before do
|
71
|
-
Process.stub(:getpgid => true)
|
72
|
-
local_data['vagrant-notify'] = { uuid => { 'pid' => server_pid } }
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'does not start a new server instance' do
|
76
|
-
Vagrant::Notify::Server.should_not_receive(:run)
|
77
|
-
subject.call(@env)
|
78
|
-
end
|
79
|
-
|
80
|
-
it 'notifies user that server is already running' do
|
81
|
-
@env[:ui].should_receive(:info).with("Notification server is already running (#{server_pid})")
|
82
|
-
subject.call(@env)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
describe Vagrant::Notify::Middleware::StopServer do
|
2
|
-
let(:halt_stack) { Vagrant.actions[:halt].send(:stack) }
|
3
|
-
let(:suspend_stack) { Vagrant.actions[:halt].send(:stack) }
|
4
|
-
let(:server_pid) { '1234' }
|
5
|
-
let(:uuid) { @env[:vm].uuid.to_s }
|
6
|
-
let(:local_data) { { 'vagrant-notify' => { uuid => { 'pid' => server_pid } } } }
|
7
|
-
|
8
|
-
subject { described_class.new(@app, @env) }
|
9
|
-
|
10
|
-
before do
|
11
|
-
@app, @env = action_env(vagrant_env.vms.values.first.env)
|
12
|
-
@env[:vm].env.stub(:local_data => local_data)
|
13
|
-
local_data.stub(:commit)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'gets called when halting machine' do
|
17
|
-
halt_stack.should include([described_class, [], nil])
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'gets called when suspending machine' do
|
21
|
-
suspend_stack.should include([described_class, [], nil])
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'server is down' do
|
25
|
-
before { Process.stub(:getpgid).and_raise(Errno::ESRCH) }
|
26
|
-
|
27
|
-
it 'does not notify user about server stop' do
|
28
|
-
@env[:ui].should_not_receive(:info)
|
29
|
-
subject.call(@env)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'server is up' do
|
34
|
-
before do
|
35
|
-
Process.stub(:getpgid => true)
|
36
|
-
local_data['vagrant-notify'] = { uuid => { 'pid' => server_pid } }
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'notifies user that server is stopping' do
|
40
|
-
@env[:ui].should_receive(:info).with('Stopping notification server...')
|
41
|
-
subject.call(@env)
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'kills notification server' do
|
45
|
-
Process.should_receive(:kill).with('KILL', server_pid.to_i)
|
46
|
-
subject.call(@env)
|
47
|
-
end
|
48
|
-
|
49
|
-
it "removes server PID on local data" do
|
50
|
-
local_data.should_receive(:commit)
|
51
|
-
subject.call(@env)
|
52
|
-
local_data['vagrant-notify']['pid'].should be_nil
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|