fission 0.4.0 → 0.5.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/CHANGELOG.md +12 -3
- data/README.md +45 -19
- data/bin/fission +1 -1
- data/fission.gemspec +3 -2
- data/lib/fission.rb +15 -0
- data/lib/fission/action/shell_executor.rb +37 -0
- data/lib/fission/action/snapshot/creator.rb +81 -0
- data/lib/fission/action/snapshot/deleter.rb +85 -0
- data/lib/fission/action/snapshot/lister.rb +90 -0
- data/lib/fission/action/snapshot/reverter.rb +81 -0
- data/lib/fission/action/vm/cloner.rb +191 -0
- data/lib/fission/action/vm/deleter.rb +73 -0
- data/lib/fission/action/vm/lister.rb +138 -0
- data/lib/fission/action/vm/starter.rb +88 -0
- data/lib/fission/action/vm/stopper.rb +79 -0
- data/lib/fission/action/vm/suspender.rb +68 -0
- data/lib/fission/cli.rb +21 -117
- data/lib/fission/command.rb +39 -0
- data/lib/fission/command/clone.rb +11 -6
- data/lib/fission/command/delete.rb +11 -6
- data/lib/fission/command/info.rb +62 -0
- data/lib/fission/command/snapshot_create.rb +9 -3
- data/lib/fission/command/snapshot_delete.rb +38 -0
- data/lib/fission/command/snapshot_list.rb +9 -3
- data/lib/fission/command/snapshot_revert.rb +9 -3
- data/lib/fission/command/start.rb +11 -6
- data/lib/fission/command/status.rb +9 -1
- data/lib/fission/command/stop.rb +9 -3
- data/lib/fission/command/suspend.rb +11 -6
- data/lib/fission/command_helpers.rb +18 -4
- data/lib/fission/command_line_parser.rb +189 -0
- data/lib/fission/config.rb +1 -1
- data/lib/fission/fusion.rb +3 -4
- data/lib/fission/lease.rb +2 -1
- data/lib/fission/metadata.rb +6 -1
- data/lib/fission/response.rb +17 -9
- data/lib/fission/version.rb +1 -1
- data/lib/fission/vm.rb +142 -382
- data/lib/fission/vm_configuration.rb +79 -0
- data/spec/fission/action/execute_shell_command_spec.rb +25 -0
- data/spec/fission/action/snapshot/creator_spec.rb +77 -0
- data/spec/fission/action/snapshot/deleter_spec.rb +84 -0
- data/spec/fission/action/snapshot/lister_spec.rb +67 -0
- data/spec/fission/action/snapshot/reverter_spec.rb +76 -0
- data/spec/fission/action/vm/cloner_spec.rb +198 -0
- data/spec/fission/action/vm/deleter_spec.rb +79 -0
- data/spec/fission/action/vm/lister_spec.rb +164 -0
- data/spec/fission/action/vm/starter_spec.rb +88 -0
- data/spec/fission/action/vm/stopper_spec.rb +71 -0
- data/spec/fission/action/vm/suspender_spec.rb +59 -0
- data/spec/fission/cli_spec.rb +32 -157
- data/spec/fission/command/clone_spec.rb +9 -3
- data/spec/fission/command/delete_spec.rb +11 -3
- data/spec/fission/command/info_spec.rb +130 -0
- data/spec/fission/command/snapshot_create_spec.rb +11 -3
- data/spec/fission/command/snapshot_delete_spec.rb +74 -0
- data/spec/fission/command/snapshot_list_spec.rb +11 -3
- data/spec/fission/command/snapshot_revert_spec.rb +11 -3
- data/spec/fission/command/start_spec.rb +11 -3
- data/spec/fission/command/status_spec.rb +16 -5
- data/spec/fission/command/stop_spec.rb +11 -3
- data/spec/fission/command/suspend_spec.rb +11 -3
- data/spec/fission/command_helpers_spec.rb +27 -5
- data/spec/fission/command_line_parser_spec.rb +267 -0
- data/spec/fission/command_spec.rb +16 -1
- data/spec/fission/config_spec.rb +3 -3
- data/spec/fission/fusion_spec.rb +11 -6
- data/spec/fission/lease_spec.rb +81 -45
- data/spec/fission/metadata_spec.rb +29 -6
- data/spec/fission/response_spec.rb +20 -9
- data/spec/fission/ui_spec.rb +1 -1
- data/spec/fission/vm_configuration_spec.rb +132 -0
- data/spec/fission/vm_spec.rb +393 -750
- data/spec/helpers/command_helpers.rb +1 -1
- metadata +93 -15
- data/.rvmrc +0 -1
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Fission::Command do
|
4
4
|
describe 'new' do
|
@@ -13,6 +13,13 @@ describe Fission::Command do
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
describe 'command_name' do
|
17
|
+
it 'should return the pretty command name' do
|
18
|
+
cmd = Fission::Command.new
|
19
|
+
cmd.command_name(Fission::Command::SnapshotList.new).should == 'snapshot list'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
16
23
|
describe 'help' do
|
17
24
|
it 'should call option_parser on a new instance' do
|
18
25
|
@new_instance_mock = mock('new_instance')
|
@@ -22,6 +29,14 @@ describe Fission::Command do
|
|
22
29
|
end
|
23
30
|
end
|
24
31
|
|
32
|
+
describe 'summary' do
|
33
|
+
it "should raise an exception that it's not implemented" do
|
34
|
+
lambda {
|
35
|
+
Fission::Command.new.summary
|
36
|
+
}.should raise_error NotImplementedError
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
25
40
|
describe 'ui' do
|
26
41
|
it 'should load a ui object' do
|
27
42
|
Fission::Command.new.ui.should be_a Fission::UI
|
data/spec/fission/config_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Fission::Config do
|
4
4
|
describe "init" do
|
@@ -49,7 +49,7 @@ describe Fission::Config do
|
|
49
49
|
|
50
50
|
it 'should set vmrun_cmd' do
|
51
51
|
@config = Fission::Config.new
|
52
|
-
@config.attributes['vmrun_cmd'].should == '/Library/Application
|
52
|
+
@config.attributes['vmrun_cmd'].should == "'/Library/Application Support/VMware Fusion/vmrun' -T fusion"
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'should set the vmrun_cmd correctly if there is a user specified vmrun bin' do
|
@@ -58,7 +58,7 @@ describe Fission::Config do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
@config = Fission::Config.new
|
61
|
-
@config.attributes['vmrun_cmd'].should == '/var/tmp/vmrun_bin -T fusion
|
61
|
+
@config.attributes['vmrun_cmd'].should == "'/var/tmp/vmrun_bin' -T fusion"
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'should use the fusion default lease file' do
|
data/spec/fission/fusion_spec.rb
CHANGED
@@ -1,21 +1,26 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Fission::Fusion do
|
4
4
|
describe 'self.running?' do
|
5
5
|
before do
|
6
6
|
@cmd = "ps -ef | grep -v grep | "
|
7
|
-
@cmd << "grep -c #{Fission.config['gui_bin']
|
7
|
+
@cmd << "grep -c '#{Fission.config['gui_bin']}' 2>&1"
|
8
|
+
@executor = mock 'executor'
|
8
9
|
end
|
9
10
|
|
10
11
|
it 'should return a successful response and true if the fusion app is running' do
|
11
|
-
|
12
|
-
|
12
|
+
@executor.should_receive(:execute).and_return({'output' => "1\n"})
|
13
|
+
Fission::Action::ShellExecutor.should_receive(:new).
|
14
|
+
with(@cmd).
|
15
|
+
and_return(@executor)
|
13
16
|
Fission::Fusion.running?.should == true
|
14
17
|
end
|
15
18
|
|
16
19
|
it 'should return a successful response and false if the fusion app is not running' do
|
17
|
-
|
18
|
-
|
20
|
+
@executor.should_receive(:execute).and_return({'output' => "0\n"})
|
21
|
+
Fission::Action::ShellExecutor.should_receive(:new).
|
22
|
+
with(@cmd).
|
23
|
+
and_return(@executor)
|
19
24
|
Fission::Fusion.running?.should == false
|
20
25
|
end
|
21
26
|
end
|
data/spec/fission/lease_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Fission::Lease do
|
4
4
|
before do
|
@@ -6,14 +6,22 @@ describe Fission::Lease do
|
|
6
6
|
:mac_address => '00:0c:29:2b:af:50',
|
7
7
|
:start => '2011/10/11 01:50:58',
|
8
8
|
:end => '2011/10/11 02:20:58' },
|
9
|
+
{ :ip_address => '172.16.248.170',
|
10
|
+
:mac_address => '00:0c:29:b3:63:d0',
|
11
|
+
:start => '2010/03/01 00:54:52',
|
12
|
+
:end => '2010/03/01 01:24:52' },
|
9
13
|
{ :ip_address => '172.16.248.132',
|
10
14
|
:mac_address => '00:0c:29:10:23:57',
|
11
15
|
:start => '2010/07/12 21:31:28',
|
12
16
|
:end => '2010/07/12 22:01:28' },
|
13
|
-
{ :ip_address => '172.16.248.
|
17
|
+
{ :ip_address => '172.16.248.150',
|
14
18
|
:mac_address => '00:0c:29:b3:63:d0',
|
15
19
|
:start => '2010/05/27 00:54:52',
|
16
20
|
:end => '2010/05/27 01:24:52' },
|
21
|
+
{ :ip_address => '172.16.248.130',
|
22
|
+
:mac_address => '00:0c:29:b3:63:d0',
|
23
|
+
:start => '2010/04/15 00:54:52',
|
24
|
+
:end => '2010/04/15 01:24:52' },
|
17
25
|
{ :ip_address => '172.16.248.129',
|
18
26
|
:mac_address => '00:0c:29:0a:e9:b3',
|
19
27
|
:start => '2010/02/16 23:16:05',
|
@@ -26,16 +34,26 @@ lease 172.16.248.197 {
|
|
26
34
|
ends 2 2011/10/11 02:20:58;
|
27
35
|
hardware ethernet 00:0c:29:2b:af:50;
|
28
36
|
}
|
37
|
+
lease 172.16.248.170 {
|
38
|
+
starts 4 2010/03/01 00:54:52;
|
39
|
+
ends 4 2010/03/01 01:24:52;
|
40
|
+
hardware ethernet 00:0c:29:b3:63:d0;
|
41
|
+
}
|
29
42
|
lease 172.16.248.132 {
|
30
43
|
starts 1 2010/07/12 21:31:28;
|
31
44
|
ends 1 2010/07/12 22:01:28;
|
32
45
|
hardware ethernet 00:0c:29:10:23:57;
|
33
46
|
}
|
34
|
-
lease 172.16.248.
|
47
|
+
lease 172.16.248.150 {
|
35
48
|
starts 4 2010/05/27 00:54:52;
|
36
49
|
ends 4 2010/05/27 01:24:52;
|
37
50
|
hardware ethernet 00:0c:29:b3:63:d0;
|
38
51
|
}
|
52
|
+
lease 172.16.248.130 {
|
53
|
+
starts 4 2010/04/15 00:54:52;
|
54
|
+
ends 4 2010/04/15 01:24:52;
|
55
|
+
hardware ethernet 00:0c:29:b3:63:d0;
|
56
|
+
}
|
39
57
|
lease 172.16.248.129 {
|
40
58
|
starts 2 2010/02/16 23:16:05;
|
41
59
|
ends 2 2010/02/16 23:46:05;
|
@@ -44,10 +62,6 @@ lease 172.16.248.129 {
|
|
44
62
|
end
|
45
63
|
|
46
64
|
describe 'new' do
|
47
|
-
{ :ip_address => '127.0.0.1',
|
48
|
-
:mac_address => '00:00:00:00:00:00',
|
49
|
-
:start => '2004/07/25 17:18:00',
|
50
|
-
:end => '2004/07/25 18:18:00' }
|
51
65
|
it 'should set the ip address' do
|
52
66
|
lease = Fission::Lease.new :ip_address => '127.0.0.1'
|
53
67
|
lease.ip_address.should == '127.0.0.1'
|
@@ -84,52 +98,63 @@ lease 172.16.248.129 {
|
|
84
98
|
end
|
85
99
|
|
86
100
|
describe 'self.all' do
|
87
|
-
it 'should query the configured lease file' do
|
88
|
-
File.should_receive(:read).with(Fission.config['lease_file']).
|
89
|
-
and_return('')
|
90
|
-
|
91
|
-
Fission::Lease.all
|
92
|
-
end
|
93
101
|
|
94
|
-
|
95
|
-
|
96
|
-
|
102
|
+
context 'when the lease file exists' do
|
103
|
+
before do
|
104
|
+
File.should_receive(:file?).
|
105
|
+
with(Fission.config['lease_file']).
|
106
|
+
and_return(true)
|
107
|
+
end
|
97
108
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
:end => DateTime.parse(lease[:end])
|
109
|
+
it 'returns a response with the list of the found leases' do
|
110
|
+
File.should_receive(:read).
|
111
|
+
with(Fission.config['lease_file']).
|
112
|
+
and_return(@lease_file_content)
|
103
113
|
|
104
|
-
|
114
|
+
example_leases = @lease_info.collect do |lease|
|
115
|
+
Fission::Lease.new :ip_address => lease[:ip_address],
|
116
|
+
:mac_address => lease[:mac_address],
|
117
|
+
:start => DateTime.parse(lease[:start]),
|
118
|
+
:end => DateTime.parse(lease[:end])
|
119
|
+
end
|
105
120
|
|
106
|
-
|
107
|
-
|
121
|
+
response = Fission::Lease.all
|
122
|
+
response.should be_a_successful_response
|
108
123
|
|
109
|
-
|
110
|
-
|
124
|
+
response.data.each do |lease|
|
125
|
+
example_lease = example_leases.select { |l| l.ip_address == lease.ip_address }
|
111
126
|
|
112
|
-
|
113
|
-
|
127
|
+
[:ip_address, :mac_address, :start, :end].each do |attrib|
|
128
|
+
lease.send(attrib).should == example_lease.first.send(attrib)
|
129
|
+
end
|
114
130
|
end
|
131
|
+
|
115
132
|
end
|
116
133
|
|
117
|
-
|
134
|
+
it 'a response with an empty list if there are no leases found' do
|
135
|
+
File.should_receive(:read).
|
136
|
+
with(Fission.config['lease_file']).
|
137
|
+
and_return('')
|
138
|
+
response = Fission::Lease.all
|
139
|
+
response.should be_a_successful_response
|
140
|
+
response.data.should == []
|
141
|
+
end
|
118
142
|
|
119
|
-
it 'should return a successful response with an empty list if there are no leases found' do
|
120
|
-
File.should_receive(:read).with(Fission.config['lease_file']).
|
121
|
-
and_return('')
|
122
|
-
response = Fission::Lease.all
|
123
|
-
response.should be_a_successful_response
|
124
|
-
response.data.should == []
|
125
143
|
end
|
126
144
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
145
|
+
context 'when the lease file does not exist' do
|
146
|
+
before do
|
147
|
+
File.should_receive(:file?).
|
148
|
+
with(Fission.config['lease_file']).
|
149
|
+
and_return(false)
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should return an unsuccessful response if the configured lease file does not exist' do
|
153
|
+
response = Fission::Lease.all
|
154
|
+
error_string = "Unable to find the lease file '#{Fission.config['lease_file']}'"
|
155
|
+
response.should be_an_unsuccessful_response(error_string)
|
156
|
+
end
|
157
|
+
|
133
158
|
end
|
134
159
|
|
135
160
|
end
|
@@ -137,16 +162,27 @@ lease 172.16.248.129 {
|
|
137
162
|
describe 'self.find_by_mac_address' do
|
138
163
|
describe 'when able to get all of the leases' do
|
139
164
|
before do
|
140
|
-
File.
|
141
|
-
|
165
|
+
File.stub(:file?).and_return(true)
|
166
|
+
File.stub(:read).and_return(@lease_file_content)
|
142
167
|
end
|
143
168
|
|
144
|
-
|
169
|
+
context 'when there are multiple leases for the mac address' do
|
170
|
+
it 'should return the lease with the latest expiration' do
|
171
|
+
response = Fission::Lease.find_by_mac_address '00:0c:29:b3:63:d0'
|
172
|
+
|
173
|
+
response.should be_a_successful_response
|
174
|
+
|
175
|
+
response.data.ip_address.should == '172.16.248.150'
|
176
|
+
response.data.mac_address.should == '00:0c:29:b3:63:d0'
|
177
|
+
response.data.start.should == DateTime.parse('2010/05/27 00:54:52')
|
178
|
+
response.data.end.should == DateTime.parse('2010/05/27 01:24:52')
|
179
|
+
end
|
180
|
+
end
|
145
181
|
|
182
|
+
it 'should return a response with the lease associated with the provided mac address' do
|
146
183
|
response = Fission::Lease.find_by_mac_address '00:0c:29:10:23:57'
|
147
184
|
|
148
185
|
response.should be_a_successful_response
|
149
|
-
|
150
186
|
response.data.ip_address.should == '172.16.248.132'
|
151
187
|
response.data.mac_address.should == '00:0c:29:10:23:57'
|
152
188
|
response.data.start.should == DateTime.parse('2010/07/12 21:31:28')
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Fission::Metadata do
|
4
4
|
before do
|
@@ -23,13 +23,16 @@ describe Fission::Metadata do
|
|
23
23
|
|
24
24
|
describe 'delete_vm_restart_document' do
|
25
25
|
before do
|
26
|
-
|
26
|
+
vm_dir = Fission.config['vm_dir']
|
27
|
+
@foo_vm_dir = File.join vm_dir, 'foo.vmwarevm'
|
28
|
+
@bar_vm_dir = File.join vm_dir, 'bar.vmwarevm'
|
29
|
+
@data = { 'PLRestartDocumentPaths' => [@foo_vm_dir, @bar_vm_dir]}
|
27
30
|
@metadata.content = @data
|
28
31
|
end
|
29
32
|
|
30
33
|
it 'should remove the vm item from the list if the vm path is in the list' do
|
31
34
|
@metadata.delete_vm_restart_document(Fission::VM.new('foo').path)
|
32
|
-
@metadata.content.should == { 'PLRestartDocumentPaths' => [
|
35
|
+
@metadata.content.should == { 'PLRestartDocumentPaths' => [@bar_vm_dir]}
|
33
36
|
end
|
34
37
|
|
35
38
|
it 'should not doing anything if the vm is not in the list' do
|
@@ -47,7 +50,9 @@ describe Fission::Metadata do
|
|
47
50
|
|
48
51
|
describe 'delete_vm_favorite_entry' do
|
49
52
|
before do
|
50
|
-
|
53
|
+
foo_vm_dir = File.join Fission.config['vm_dir'], 'foo.vmwarevm'
|
54
|
+
|
55
|
+
@data = { 'VMFavoritesListDefaults2' => [{'path' => foo_vm_dir}] }
|
51
56
|
@metadata.content = @data
|
52
57
|
end
|
53
58
|
|
@@ -60,6 +65,22 @@ describe Fission::Metadata do
|
|
60
65
|
@metadata.delete_vm_favorite_entry(Fission::VM.new('bar').path)
|
61
66
|
@metadata.content.should == @data
|
62
67
|
end
|
68
|
+
|
69
|
+
it 'should ignore VMFavoritesListDefaults2 in Fussion 5' do
|
70
|
+
data = {}
|
71
|
+
@metadata.content = data
|
72
|
+
@metadata.delete_vm_favorite_entry(Fission::VM.new('bar').path)
|
73
|
+
@metadata.content.should == data
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should remove the vm item from the list in Fussion 5' do
|
77
|
+
foo_vm_dir = File.join Fission.config['vm_dir'], 'foo.vmwarevm'
|
78
|
+
data = {"fusionInitialSessions" => [{"documentPath" => foo_vm_dir}]}
|
79
|
+
|
80
|
+
@metadata.content = data
|
81
|
+
@metadata.delete_vm_favorite_entry(Fission::VM.new('foo').path)
|
82
|
+
@metadata.content.should == { 'fusionInitialSessions' => []}
|
83
|
+
end
|
63
84
|
end
|
64
85
|
|
65
86
|
describe 'self.delete_vm_info' do
|
@@ -68,16 +89,18 @@ describe Fission::Metadata do
|
|
68
89
|
@md_mock.should_receive(:load)
|
69
90
|
@md_mock.should_receive(:save)
|
70
91
|
Fission::Metadata.stub!(:new).and_return(@md_mock)
|
92
|
+
|
93
|
+
@foo_vm_dir = File.join Fission.config['vm_dir'], 'foo.vmwarevm'
|
71
94
|
end
|
72
95
|
|
73
96
|
it 'should remove the vm from the restart document list' do
|
74
|
-
@md_mock.should_receive(:delete_vm_restart_document).with(
|
97
|
+
@md_mock.should_receive(:delete_vm_restart_document).with(@foo_vm_dir)
|
75
98
|
@md_mock.stub!(:delete_vm_favorite_entry)
|
76
99
|
Fission::Metadata.delete_vm_info(Fission::VM.new('foo').path)
|
77
100
|
end
|
78
101
|
|
79
102
|
it 'should remove the vm from the favorite list' do
|
80
|
-
@md_mock.should_receive(:delete_vm_favorite_entry).with(
|
103
|
+
@md_mock.should_receive(:delete_vm_favorite_entry).with(@foo_vm_dir)
|
81
104
|
@md_mock.stub!(:delete_vm_restart_document)
|
82
105
|
Fission::Metadata.delete_vm_info(Fission::VM.new('foo').path)
|
83
106
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Fission::Response do
|
4
4
|
describe 'initialize' do
|
@@ -58,23 +58,34 @@ describe Fission::Response do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
-
describe 'self.
|
61
|
+
describe 'self.from_shell_executor' do
|
62
|
+
before do
|
63
|
+
@process_status = mock 'process status'
|
64
|
+
end
|
65
|
+
|
62
66
|
it 'should return a response object' do
|
63
|
-
|
67
|
+
@process_status.stub(:exitstatus).and_return(0)
|
68
|
+
executor = {'process_status' => @process_status}
|
69
|
+
Fission::Response.from_shell_executor(executor).should be_a Fission::Response
|
64
70
|
end
|
65
71
|
|
66
72
|
it 'should set the code to the exit status' do
|
67
|
-
|
68
|
-
|
73
|
+
@process_status.stub(:exitstatus).and_return(55)
|
74
|
+
executor = {'process_status' => @process_status}
|
75
|
+
Fission::Response.from_shell_executor(executor).code.should == 55
|
69
76
|
end
|
70
77
|
|
71
78
|
it 'should set the message if the command was unsuccessful' do
|
72
|
-
|
73
|
-
|
79
|
+
@process_status.stub(:exitstatus).and_return(55)
|
80
|
+
executor = {'process_status' => @process_status,
|
81
|
+
'output' => 'foo'}
|
82
|
+
Fission::Response.from_shell_executor(executor).message.should == 'foo'
|
74
83
|
end
|
75
84
|
it 'should not set the message if the command was successful' do
|
76
|
-
|
77
|
-
|
85
|
+
@process_status.stub(:exitstatus).and_return(0)
|
86
|
+
executor = {'process_status' => @process_status,
|
87
|
+
'output' => 'foo'}
|
88
|
+
Fission::Response.from_shell_executor(executor).message.should == ''
|
78
89
|
end
|
79
90
|
|
80
91
|
end
|
data/spec/fission/ui_spec.rb
CHANGED
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Fission::VMConfiguration do
|
4
|
+
before do
|
5
|
+
@vm = Fission::VM.new 'foo'
|
6
|
+
@conf_file_response_mock = mock 'conf_file_response'
|
7
|
+
@conf_file_response_mock.stub_as_successful @conf_file_path
|
8
|
+
end
|
9
|
+
|
10
|
+
describe 'config_data' do
|
11
|
+
before do
|
12
|
+
@vm.stub(:exists?).and_return(true)
|
13
|
+
@vm_config = Fission::VMConfiguration.new @vm
|
14
|
+
@vm.stub(:conf_file).and_return(@conf_file_response_mock)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return an unsuccessful response if the vm doesn't exist" do
|
18
|
+
@vm.stub(:exists?).and_return(false)
|
19
|
+
@vm_config.config_data.should be_an_unsuccessful_response 'VM does not exist'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should return an unsuccessful response if unable to figure out the conf file' do
|
23
|
+
@conf_file_response_mock.stub_as_unsuccessful
|
24
|
+
@vm_config.config_data.should be_an_unsuccessful_response
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'when the vm exists and the conf file can be found' do
|
28
|
+
before do
|
29
|
+
@conf_file_io = StringIO.new
|
30
|
+
vmx_content = '.encoding = "UTF-8"
|
31
|
+
config.version = "8"
|
32
|
+
virtualHW.version = "7"
|
33
|
+
scsi0.present = "TRUE"
|
34
|
+
scsi0.virtualDev = "lsilogic"
|
35
|
+
memsize = "384"
|
36
|
+
scsi0:0.present = "TRUE"
|
37
|
+
scsi0:0.fileName = "u10_04-000001.vmdk"
|
38
|
+
ethernet0.present = "TRUE"
|
39
|
+
ethernet0.connectionType = "nat"
|
40
|
+
ethernet0.wakeOnPcktRcv = "FALSE"
|
41
|
+
ethernet0.addressType = "generated"
|
42
|
+
ethernet0.linkStatePropagation.enable = "TRUE"
|
43
|
+
ehci.present = "TRUE"
|
44
|
+
pciBridge4.virtualDev = "pcieRootPort"
|
45
|
+
pciBridge4.functions = "8"
|
46
|
+
vmci0.present = "TRUE"
|
47
|
+
roamingVM.exitBehavior = "go"
|
48
|
+
tools.syncTime = "TRUE"
|
49
|
+
displayName = "u10_04"
|
50
|
+
guestOS = "ubuntu"
|
51
|
+
nvram = "u10_04.nvram"
|
52
|
+
virtualHW.productCompatibility = "hosted"
|
53
|
+
tools.upgrade.policy = "upgradeAtPowerCycle"
|
54
|
+
extendedConfigFile = "u10_04.vmxf"
|
55
|
+
serial0.present = "FALSE"
|
56
|
+
usb.present = "FALSE"
|
57
|
+
checkpoint.vmState = "u10_04.vmss"
|
58
|
+
ethernet0.generatedAddress = "00:0c:29:c4:94:22"
|
59
|
+
uuid.location = "56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22"
|
60
|
+
uuid.bios = "56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22"
|
61
|
+
cleanShutdown = "TRUE"
|
62
|
+
scsi0:0.redo = ""
|
63
|
+
scsi0.pciSlotNumber = "16"
|
64
|
+
ethernet0.pciSlotNumber = "32"
|
65
|
+
ethernet0.generatedAddressOffset = "0"
|
66
|
+
vmci0.id = "-1262185438"
|
67
|
+
tools.remindInstall = "TRUE"'
|
68
|
+
@conf_file_io.string = vmx_content
|
69
|
+
File.should_receive(:readlines).with(@conf_file_path).
|
70
|
+
and_return(@conf_file_io.string.split(/$/))
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should return a successful response' do
|
74
|
+
@vm_config.config_data.should be_a_successful_response
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should return the data as a hash like object' do
|
78
|
+
config = @vm_config.config_data
|
79
|
+
config.data.should respond_to :keys
|
80
|
+
config.data.should respond_to :values
|
81
|
+
config.data.should respond_to :each_pair
|
82
|
+
config.data.should respond_to :[]
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'should return accurate data' do
|
86
|
+
expected_data = { '.encoding' => 'UTF-8',
|
87
|
+
'config.version' => '8',
|
88
|
+
'virtualHW.version' => '7',
|
89
|
+
'scsi0.present' => 'TRUE',
|
90
|
+
'scsi0.virtualDev' => 'lsilogic',
|
91
|
+
'memsize' => '384',
|
92
|
+
'scsi0:0.present' => 'TRUE',
|
93
|
+
'scsi0:0.fileName' => 'u10_04-000001.vmdk',
|
94
|
+
'ethernet0.present' => 'TRUE',
|
95
|
+
'ethernet0.connectionType' => 'nat',
|
96
|
+
'ethernet0.wakeOnPcktRcv' => 'FALSE',
|
97
|
+
'ethernet0.addressType' => 'generated',
|
98
|
+
'ethernet0.linkStatePropagation.enable' => 'TRUE',
|
99
|
+
'ehci.present' => 'TRUE',
|
100
|
+
'pciBridge4.virtualDev' => 'pcieRootPort',
|
101
|
+
'pciBridge4.functions' => '8',
|
102
|
+
'vmci0.present' => 'TRUE',
|
103
|
+
'roamingVM.exitBehavior' => 'go',
|
104
|
+
'tools.syncTime' => 'TRUE',
|
105
|
+
'displayName' => 'u10_04',
|
106
|
+
'guestOS' => 'ubuntu',
|
107
|
+
'nvram' => 'u10_04.nvram',
|
108
|
+
'virtualHW.productCompatibility' => 'hosted',
|
109
|
+
'tools.upgrade.policy' => 'upgradeAtPowerCycle',
|
110
|
+
'extendedConfigFile' => 'u10_04.vmxf',
|
111
|
+
'serial0.present' => 'FALSE',
|
112
|
+
'usb.present' => 'FALSE',
|
113
|
+
'checkpoint.vmState' => 'u10_04.vmss',
|
114
|
+
'ethernet0.generatedAddress' => '00:0c:29:c4:94:22',
|
115
|
+
'uuid.location' => '56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22',
|
116
|
+
'uuid.bios' => '56 4d 4b e9 1a bb 22 3a-b0 91 06 4e b4 c4 94 22',
|
117
|
+
'cleanShutdown' => 'TRUE',
|
118
|
+
'scsi0:0.redo' => '',
|
119
|
+
'scsi0.pciSlotNumber' => '16',
|
120
|
+
'ethernet0.pciSlotNumber' => '32',
|
121
|
+
'ethernet0.generatedAddressOffset' => '0',
|
122
|
+
'vmci0.id' => '-1262185438',
|
123
|
+
'tools.remindInstall' => 'TRUE' }
|
124
|
+
|
125
|
+
config = @vm_config.config_data
|
126
|
+
config.data.should == expected_data
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|