1
+ require File . expand_path ( "../../../../base" , __FILE__ )
2
+
3
+ describe Vagrant ::Action ::Builtin ::WaitForCommunicator do
4
+ let ( :app ) { lambda { |env | } }
5
+ let ( :ui ) { lambda { |env | } }
6
+ let ( :env ) { { machine : machine , ui : ui } }
7
+
8
+ let ( :vm ) do
9
+ double ( "vm" ,
10
+ communicator : nil
11
+ )
12
+ end
13
+
14
+ # Configuration mock
15
+ let ( :config ) { double ( "config" , vm : vm ) }
16
+
17
+ # Communicate mock
18
+ let ( :communicate ) { double ( "communicate" ) }
19
+
20
+ let ( :state ) { double ( "state" ) }
21
+
22
+ let ( :ui ) { Vagrant ::UI ::Silent . new }
23
+
24
+ let ( :machine ) do
25
+ double ( "machine" ,
26
+ config : config ,
27
+ communicate : communicate ,
28
+ state : state , )
29
+ end
30
+
31
+ before do
32
+ allow ( vm ) . to receive ( :boot_timeout ) . and_return ( 1 )
33
+ allow ( communicate ) . to receive ( :wait_for_ready ) . with ( 1 ) . and_return ( true )
34
+ end
35
+
36
+ it "raise an error if a bad state is encountered" do
37
+ allow ( state ) . to receive ( :id ) . and_return ( :stopped )
38
+
39
+ expect { described_class . new ( app , env , [ :running ] ) . call ( env ) } .
40
+ to raise_error ( Vagrant ::Errors ::VMBootBadState )
41
+ end
42
+
43
+ it "raise an error if the vm doesn't boot" do
44
+ allow ( communicate ) . to receive ( :wait_for_ready ) . and_return ( false )
45
+ allow ( state ) . to receive ( :id ) . and_return ( :running )
46
+
47
+ expect { described_class . new ( app , env , [ :running ] ) . call ( env ) } .
48
+ to raise_error ( Vagrant ::Errors ::VMBootTimeout )
49
+ end
50
+
51
+ it "succeed when a valid state is encountered" do
52
+ allow ( communicate ) . to receive ( :wait_for_ready ) . and_return ( true )
53
+ allow ( state ) . to receive ( :id ) . and_return ( :running )
54
+
55
+ expect { described_class . new ( app , env , [ :running ] ) . call ( env ) } .
56
+ to_not raise_error
57
+ end
58
+ end
0 commit comments