vagrant-skytap 0.2.10 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/lib/vagrant-skytap/action/check_created.rb +43 -0
  4. data/lib/vagrant-skytap/action/check_running.rb +43 -0
  5. data/lib/vagrant-skytap/action/get_host_vm.rb +52 -0
  6. data/lib/vagrant-skytap/action/prepare_nfs_settings.rb +22 -5
  7. data/lib/vagrant-skytap/action.rb +11 -18
  8. data/lib/vagrant-skytap/api/connectable.rb +50 -0
  9. data/lib/vagrant-skytap/api/environment.rb +10 -5
  10. data/lib/vagrant-skytap/api/interface.rb +9 -0
  11. data/lib/vagrant-skytap/api/network.rb +60 -1
  12. data/lib/vagrant-skytap/api/public_ip.rb +7 -75
  13. data/lib/vagrant-skytap/api/publish_set.rb +4 -0
  14. data/lib/vagrant-skytap/api/published_service.rb +7 -71
  15. data/lib/vagrant-skytap/api/resource.rb +25 -3
  16. data/lib/vagrant-skytap/api/tunnel.rb +69 -0
  17. data/lib/vagrant-skytap/api/vm.rb +10 -2
  18. data/lib/vagrant-skytap/api/vpn.rb +2 -106
  19. data/lib/vagrant-skytap/cap/host_metadata.rb +45 -0
  20. data/lib/vagrant-skytap/connection/public_ip_choice.rb +94 -0
  21. data/lib/vagrant-skytap/connection/published_service_choice.rb +100 -0
  22. data/lib/vagrant-skytap/connection/tunnel_choice.rb +118 -0
  23. data/lib/vagrant-skytap/connection/vpn_choice.rb +132 -0
  24. data/lib/vagrant-skytap/connection.rb +123 -0
  25. data/lib/vagrant-skytap/errors.rb +4 -0
  26. data/lib/vagrant-skytap/plugin.rb +5 -0
  27. data/lib/vagrant-skytap/setup_helper.rb +34 -8
  28. data/lib/vagrant-skytap/version.rb +1 -1
  29. data/locales/en.yml +46 -0
  30. data/spec/unit/actions/prepare_nfs_settings_spec.rb +63 -16
  31. data/spec/unit/cap/host_metadata_spec.rb +43 -0
  32. data/spec/unit/connections/public_ip_choice_spec.rb +57 -0
  33. data/spec/unit/connections/published_service_choice_spec.rb +79 -0
  34. data/spec/unit/connections/tunnel_choice_spec.rb +124 -0
  35. data/spec/unit/connections/vpn_choice_spec.rb +109 -0
  36. data/spec/unit/interface_spec.rb +53 -0
  37. data/spec/unit/network_spec.rb +123 -0
  38. data/spec/unit/setup_helper_spec.rb +59 -19
  39. data/spec/unit/support/api_responses/tunnel1.json +7 -0
  40. data/spec/unit/support/api_responses/vm1.json +12 -1
  41. data/spec/unit/support/shared/rest_api_context.rb +1 -0
  42. data/spec/unit/tunnel_spec.rb +62 -0
  43. data/spec/unit/vm_spec.rb +53 -60
  44. metadata +22 -2
@@ -58,10 +58,15 @@ describe VagrantPlugins::Skytap::SetupHelper do
58
58
  end
59
59
  end
60
60
 
61
- let(:vpn) {API::Vpn.new(vpn_attrs, env)}
62
- let(:vpns) {[vpn]}
63
- let(:vpn_choice) {double(:vpn_choice, vpn: vpn, choose: ["1.2.3.4", 22], :valid? => true)}
64
- let(:user_input) { "" }
61
+ let(:vpn) {API::Vpn.new(vpn_attrs, env)}
62
+ let(:vpns) {[vpn]}
63
+ let(:vpn_choice) {double(:vpn_choice, vpn: vpn, choose: ["1.2.3.4", 22], :valid? => true)}
64
+ let(:vpn_choice2) {double(:vpn_choice2, vpn: nil, choose: ["5.6.7.8", 22], :valid? => true)}
65
+ let(:icnr_choice) {double(:icnr_choice, choose: ["10.0.0.1", 22], :valid? => icnr_valid, validation_error_message: icnr_err_msg)}
66
+ let(:icnr_valid) { true }
67
+ let(:icnr_err_msg) { nil }
68
+ let(:user_input) { "" }
69
+ let(:running_in_skytap_vm) {false}
65
70
 
66
71
  let(:ssh_config) do
67
72
  double(:ssh_config, username: nil, password: nil, host: nil, port: nil)
@@ -83,6 +88,7 @@ describe VagrantPlugins::Skytap::SetupHelper do
83
88
  ENV.stub(:[] => nil)
84
89
  allow(ui).to receive(:ask).and_return(user_input)
85
90
  allow(instance).to receive(:vpns).and_return(vpns)
91
+ allow(instance).to receive(:running_in_skytap_vm?).and_return(running_in_skytap_vm)
86
92
  allow(vpn).to receive(:choice_for_setup).and_return(vpn_choice)
87
93
  stub_request(:get, /.*/).to_return(body: "{}", status: 200)
88
94
  end
@@ -110,29 +116,63 @@ describe VagrantPlugins::Skytap::SetupHelper do
110
116
  instance.send(:ask_routing)
111
117
  end
112
118
 
113
- context "when valid vpn_url specified" do
114
- it {should eq ["1.2.3.4", 22]}
119
+ let(:connection_choices) {[vpn_choice, vpn_choice2]}
120
+ let(:asks_user) {false}
121
+
122
+ before do
123
+ allow(instance).to receive(:connection_choices).and_return(connection_choices)
124
+ if asks_user
125
+ expect(ui).to receive(:ask)
126
+ else
127
+ expect(ui).to_not receive(:ask)
128
+ end
115
129
  end
116
130
 
117
- context "when invalid vpn_url specified" do
118
- let(:vpn_url) {"bogus"}
119
- it "raises error" do
120
- expect{subject}.to raise_error Errors::DoesNotExist
131
+ context "when no valid choices are available" do
132
+ let(:connection_choices) {[]}
133
+ it "should raise NoConnectionOptions" do
134
+ expect{subject}.to raise_error Errors::NoConnectionOptions
121
135
  end
122
136
  end
123
137
 
124
- context "when vpn_url unspecified" do
125
- let(:vpn_url) {nil}
126
- let(:user_input) {"1"}
127
- it {should eq ["1.2.3.4", 22]}
138
+ context "when a single valid choice is available" do
139
+ let(:connection_choices) {[vpn_choice]}
140
+ it "should pick the only available choice automatically" do
141
+ expect(subject).to eq connection_choices.first.choose
142
+ end
128
143
  end
129
144
 
130
- context "when no valid vpns exist" do
131
- before do
132
- allow(vpn_choice).to receive(:valid?).and_return(false)
145
+ context "when vpn_url specified" do
146
+ context "when vpn is an available choice" do
147
+ it "should use the specified vpn" do
148
+ expect(subject).to eq vpn_choice.choose
149
+ end
133
150
  end
134
- it "raises error" do
135
- expect{subject}.to raise_error Errors::NoConnectionOptions
151
+
152
+ context "when vpn is not an available choice" do
153
+ let(:vpn_url) {"/vpns/999"}
154
+ it "should raise DoesNotExist" do
155
+ expect{subject}.to raise_error Errors::DoesNotExist
156
+ end
157
+ end
158
+
159
+ context "when running in skytap vm" do
160
+ let(:running_in_skytap_vm) {true}
161
+ let(:connection_choices) {[icnr_choice]}
162
+ it "should ignore the vpn_url" do
163
+ expect(subject).to eq icnr_choice.choose
164
+ end
165
+ end
166
+ end
167
+
168
+ context "when vpn_url is not specified" do
169
+ let(:vpn_url) {nil}
170
+ context "when multiple valid choices are available" do
171
+ let(:user_input) {"2"}
172
+ let(:asks_user) {true}
173
+ it "should pick the one chosen by the user" do
174
+ expect(subject).to eq vpn_choice2.choose
175
+ end
136
176
  end
137
177
  end
138
178
  end
@@ -0,0 +1,7 @@
1
+ {
2
+ "id": "tunnel-xxx-yyy",
3
+ "status": "not_busy",
4
+ "error": null,
5
+ "source_network": {},
6
+ "target_network": {}
7
+ }
@@ -47,7 +47,18 @@
47
47
  "vm_name": "Ubuntu Server 14.04 - 64-bit",
48
48
  "status": "Running",
49
49
  "nat_addresses": {
50
- "network_nat_addresses": [],
50
+ "network_nat_addresses": [
51
+ {
52
+ "ip_address": "10.0.4.1",
53
+ "network_id": "2",
54
+ "network_name": "network",
55
+ "network_url": "https://example.com/configurations/7345188/networks/2",
56
+ "configuration_id": 7345188,
57
+ "configuration_name": "cfg7345188",
58
+ "configuration_url": "https://example.com/configurations/7345188",
59
+ "viewable": true
60
+ }
61
+ ],
51
62
  "vpn_nat_addresses": [
52
63
  {
53
64
  "ip_address": "3.4.5.6",
@@ -27,6 +27,7 @@ require "vagrant-skytap/api/network"
27
27
  require "vagrant-skytap/api/public_ip"
28
28
  require "vagrant-skytap/api/published_service"
29
29
  require "vagrant-skytap/api/resource"
30
+ require "vagrant-skytap/api/tunnel"
30
31
  require "vagrant-skytap/api/vm"
31
32
  require "vagrant-skytap/api/vpn_attachment"
32
33
  require "vagrant-skytap/api/vpn"
@@ -0,0 +1,62 @@
1
+ # Copyright (c) 2014-2016 Skytap, Inc.
2
+ #
3
+ # The MIT License (MIT)
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the "Software"), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in
13
+ # all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
+ # DEALINGS IN THE SOFTWARE.
22
+
23
+ require_relative 'base'
24
+
25
+ describe VagrantPlugins::Skytap::API::Tunnel do
26
+ include_context "rest_api"
27
+
28
+ let(:json_path) { File.join(File.expand_path('..', __FILE__), 'support', 'api_responses') }
29
+ let(:tunnel1_attrs) { read_json(json_path, 'tunnel1.json') }
30
+ let(:network1_attrs) { read_json(json_path, 'network1.json').merge("id" => "1") }
31
+ let(:network2_attrs) { network1_attrs.merge("id" => "2", "tunnelable" => true) }
32
+
33
+ # TODO is this backward or not???
34
+ let(:tunnel_attrs) { tunnel1_attrs.merge("source_network" => network2_attrs, "target_network" => network1_attrs)}
35
+
36
+ let(:source_network) { API::Network.new(network1_attrs, nil, env) }
37
+ let(:target_network) { API::Network.new(network2_attrs, nil, env) }
38
+
39
+ let(:nat_subnet) { "11.0.0.0/24" }
40
+ let(:tunnelable) { false }
41
+
42
+ let(:provider_config) do
43
+ double(:provider_config, vm_url: "/vms/1", username: "jsmith", api_token: "123123", base_url: base_url)
44
+ end
45
+ let(:api_client) { API::Client.new(provider_config) }
46
+
47
+ let(:environment) {nil}
48
+ let(:env) { { environment: environment, api_client: api_client, provider_config: provider_config } }
49
+
50
+ let(:attrs) { tunnel_attrs }
51
+ let(:instance) { described_class.new(attrs, environment, env) }
52
+
53
+ describe "create!" do
54
+ subject { API::Tunnel.create!(env, source_network, target_network) }
55
+
56
+ it "should have a source and target network" do
57
+ expect(subject.source_network).to be_a_kind_of(API::Network)
58
+ expect(subject.source_network).to be_a_kind_of(API::Network)
59
+ expect(a_request(:post, %r{/tunnels})).to have_been_made.once
60
+ end
61
+ end
62
+ end
data/spec/unit/vm_spec.rb CHANGED
@@ -38,7 +38,6 @@ describe VagrantPlugins::Skytap::API::Vm do
38
38
  let(:api_client) { API::Client.new(provider_config) }
39
39
  let(:machine) { double(:machine, name: "vm1", id: nil, :id= => nil, provider_config: provider_config) }
40
40
  let(:env) { { machine: machine, api_client: api_client } }
41
- let(:instance) { described_class.new(attrs, env) }
42
41
 
43
42
  let(:environment) do
44
43
  env_attrs = empty_environment_attrs
@@ -46,30 +45,19 @@ describe VagrantPlugins::Skytap::API::Vm do
46
45
  end
47
46
 
48
47
  let(:attrs) { vm1_attrs }
48
+ let(:runstate) { nil }
49
49
  let(:instance) { described_class.new(attrs, environment, env) }
50
50
 
51
- # Ensure tests are not affected by Skytap credential environment variables
51
+ let(:get_vm_attrs) { vm1_attrs }
52
52
  before :each do
53
- ENV.stub(:[] => nil)
54
- stub_request(:get, /.*/).to_return(body: '{}', status: 200)
55
- stub_request(:get, %r{/vms/\d+}).to_return(body: JSON.dump(attrs), status: 200)
53
+ stub_get(%r{/vms/\d+}, get_vm_attrs)
54
+ allow(instance).to receive(:runstate).and_return(runstate)
56
55
  end
57
56
 
58
57
  describe "reload" do
59
- subject do
60
- new_attrs = attrs.merge('name' => 'VM1, renamed')
61
- client = double('api_client',
62
- get: double('resp', body: JSON.dump(new_attrs))
63
- )
64
- myenv = env.merge(api_client: client)
65
- described_class.new(attrs, environment, myenv)
66
- end
67
-
68
- it "updates the attrs" do
69
- expect(subject.get_api_attribute('name')).to eq 'VM1'
70
- subject.reload
71
- expect(subject.get_api_attribute('name')).to eq 'VM1, renamed'
72
- end
58
+ subject { instance.reload }
59
+ let(:get_vm_attrs) {vm1_attrs.merge('name' => 'VM1, renamed')}
60
+ its("name") {should eq 'VM1, renamed'}
73
61
  end
74
62
 
75
63
  describe "url" do
@@ -80,68 +68,73 @@ describe VagrantPlugins::Skytap::API::Vm do
80
68
  end
81
69
 
82
70
  describe "busy?" do
83
- subject do
84
- instance
85
- end
71
+ subject { instance.busy? }
86
72
 
87
- it "returns false when stopped" do
88
- allow(subject).to receive(:runstate).and_return('stopped')
89
- expect(subject.busy?).to eq false
90
- allow(subject).to receive(:runstate).and_call_original
73
+ context "when stopped" do
74
+ let(:runstate) {'stopped'}
75
+ it {should be false}
91
76
  end
92
77
 
93
- it "returns false when running" do
94
- allow(subject).to receive(:runstate).and_return('running')
95
- expect(subject.busy?).to eq false
96
- allow(subject).to receive(:runstate).and_call_original
78
+ context "when running" do
79
+ let(:runstate) {'running'}
80
+ it {should be false}
97
81
  end
98
82
 
99
- it "returns true when runstate is busy" do
100
- allow(subject).to receive(:runstate).and_return('busy')
101
- expect(subject.busy?).to eq true
102
- allow(subject).to receive(:runstate).and_call_original
83
+ context "when busy" do
84
+ let(:runstate) {'busy'}
85
+ it {should be true}
103
86
  end
104
87
  end
105
88
 
106
89
  describe "running?" do
107
- subject do
108
- instance
90
+ subject { instance.running? }
91
+
92
+ context "when stopped" do
93
+ let(:runstate) {'stopped'}
94
+ it {should be false}
95
+ end
96
+
97
+ context "when suspended" do
98
+ let(:runstate) {'suspended'}
99
+ it {should be false}
109
100
  end
110
101
 
111
- it "returns false when stopped" do
112
- allow(subject).to receive(:runstate).and_return('stopped')
113
- expect(subject.running?).to eq false
114
- allow(subject).to receive(:runstate).and_call_original
102
+ context "when busy" do
103
+ let(:runstate) {'busy'}
104
+ it {should be false}
115
105
  end
116
106
 
117
- it "returns false when suspended" do
118
- allow(subject).to receive(:runstate).and_return('suspended')
119
- expect(subject.running?).to eq false
120
- allow(subject).to receive(:runstate).and_call_original
107
+ context "when running" do
108
+ let(:runstate) {'running'}
109
+ it {should be true}
121
110
  end
111
+ end
112
+
113
+ describe "parent" do
114
+ subject {instance.region}
122
115
 
123
- it "returns false when runstate is busy" do
124
- allow(subject).to receive(:runstate).and_return('busy')
125
- expect(subject.running?).to eq false
126
- allow(subject).to receive(:runstate).and_call_original
116
+ context "when environment was passed in" do
117
+ before do
118
+ expect(a_request(:any, %r{.*})).not_to have_been_made
119
+ end
120
+ it { should eq 'US-West'}
127
121
  end
128
122
 
129
- it "returns true when running" do
130
- allow(subject).to receive(:runstate).and_return('running')
131
- expect(subject.running?).to eq true
132
- allow(subject).to receive(:runstate).and_call_original
123
+ context "when environment was not passed in" do
124
+ let(:environment) {nil}
125
+ before do
126
+ stub_get(%r{/templates/\d+}, {region: 'US-East'})
127
+ end
128
+ it { should eq 'US-East'}
133
129
  end
134
130
  end
135
131
 
136
132
  describe "region" do
137
- subject do
138
- fake_template_attrs = {'id' => '5570024', 'region' => 'EMEA'}
139
- client = double('api_client',
140
- get: double('resp', body: JSON.dump(fake_template_attrs))
141
- )
142
- myenv = env.merge(api_client: client)
143
- described_class.new(attrs, environment, myenv)
133
+ subject {instance.region}
134
+
135
+ before do
136
+ allow(environment).to receive(:region).and_return('EMEA')
144
137
  end
145
- its("region") { should == 'EMEA' }
138
+ it { should eq 'EMEA' }
146
139
  end
147
140
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-skytap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric True
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-03-17 00:00:00.000000000 Z
12
+ date: 2016-04-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json_pure
@@ -124,6 +124,8 @@ files:
124
124
  - Gemfile
125
125
  - lib/vagrant-skytap/action/action_helpers.rb
126
126
  - lib/vagrant-skytap/action/add_vm_to_environment.rb
127
+ - lib/vagrant-skytap/action/check_created.rb
128
+ - lib/vagrant-skytap/action/check_running.rb
127
129
  - lib/vagrant-skytap/action/clear_forwarded_ports.rb
128
130
  - lib/vagrant-skytap/action/compose_environment.rb
129
131
  - lib/vagrant-skytap/action/create_environment.rb
@@ -132,6 +134,7 @@ files:
132
134
  - lib/vagrant-skytap/action/existence_check.rb
133
135
  - lib/vagrant-skytap/action/fetch_environment.rb
134
136
  - lib/vagrant-skytap/action/forward_ports.rb
137
+ - lib/vagrant-skytap/action/get_host_vm.rb
135
138
  - lib/vagrant-skytap/action/initial_state.rb
136
139
  - lib/vagrant-skytap/action/initialize_api_client.rb
137
140
  - lib/vagrant-skytap/action/is_parallelized.rb
@@ -165,6 +168,7 @@ files:
165
168
  - lib/vagrant-skytap/action.rb
166
169
  - lib/vagrant-skytap/api/busyable.rb
167
170
  - lib/vagrant-skytap/api/client.rb
171
+ - lib/vagrant-skytap/api/connectable.rb
168
172
  - lib/vagrant-skytap/api/credentials.rb
169
173
  - lib/vagrant-skytap/api/environment.rb
170
174
  - lib/vagrant-skytap/api/interface.rb
@@ -175,9 +179,11 @@ files:
175
179
  - lib/vagrant-skytap/api/resource.rb
176
180
  - lib/vagrant-skytap/api/runstate_operations.rb
177
181
  - lib/vagrant-skytap/api/specified_attributes.rb
182
+ - lib/vagrant-skytap/api/tunnel.rb
178
183
  - lib/vagrant-skytap/api/vm.rb
179
184
  - lib/vagrant-skytap/api/vpn.rb
180
185
  - lib/vagrant-skytap/api/vpn_attachment.rb
186
+ - lib/vagrant-skytap/cap/host_metadata.rb
181
187
  - lib/vagrant-skytap/cap/public_address.rb
182
188
  - lib/vagrant-skytap/command/helpers.rb
183
189
  - lib/vagrant-skytap/command/publish_url/create.rb
@@ -186,6 +192,11 @@ files:
186
192
  - lib/vagrant-skytap/command/publish_url/show.rb
187
193
  - lib/vagrant-skytap/command/up.rb
188
194
  - lib/vagrant-skytap/config.rb
195
+ - lib/vagrant-skytap/connection/public_ip_choice.rb
196
+ - lib/vagrant-skytap/connection/published_service_choice.rb
197
+ - lib/vagrant-skytap/connection/tunnel_choice.rb
198
+ - lib/vagrant-skytap/connection/vpn_choice.rb
199
+ - lib/vagrant-skytap/connection.rb
189
200
  - lib/vagrant-skytap/core_ext/object/blank.rb
190
201
  - lib/vagrant-skytap/core_ext/object/tap.rb
191
202
  - lib/vagrant-skytap/core_ext/try.rb
@@ -217,17 +228,25 @@ files:
217
228
  - spec/unit/actions/update_hardware_spec.rb
218
229
  - spec/unit/api_client_spec.rb
219
230
  - spec/unit/base.rb
231
+ - spec/unit/cap/host_metadata_spec.rb
220
232
  - spec/unit/config_spec.rb
233
+ - spec/unit/connections/public_ip_choice_spec.rb
234
+ - spec/unit/connections/published_service_choice_spec.rb
235
+ - spec/unit/connections/tunnel_choice_spec.rb
236
+ - spec/unit/connections/vpn_choice_spec.rb
221
237
  - spec/unit/credentials_spec.rb
222
238
  - spec/unit/environment_spec.rb
223
239
  - spec/unit/forwarded_port_spec.rb
224
240
  - spec/unit/hosts/common/cap/ssh_tunnel_spec.rb
241
+ - spec/unit/interface_spec.rb
242
+ - spec/unit/network_spec.rb
225
243
  - spec/unit/prepare_collision_params_spec.rb
226
244
  - spec/unit/publish_set_spec.rb
227
245
  - spec/unit/setup_helper_spec.rb
228
246
  - spec/unit/support/api_responses/empty_environment.json
229
247
  - spec/unit/support/api_responses/empty_publish_set.json
230
248
  - spec/unit/support/api_responses/network1.json
249
+ - spec/unit/support/api_responses/tunnel1.json
231
250
  - spec/unit/support/api_responses/vm1.json
232
251
  - spec/unit/support/api_responses/vpn1.json
233
252
  - spec/unit/support/api_responses/vpn_attachment1.json
@@ -243,6 +262,7 @@ files:
243
262
  - spec/unit/support/forwarded_ports/machines/vm4/skytap/tcp8888_tcp_8888_80.pid
244
263
  - spec/unit/support/shared/rest_api_context.rb
245
264
  - spec/unit/support/shared/skytap_context.rb
265
+ - spec/unit/tunnel_spec.rb
246
266
  - spec/unit/vm_spec.rb
247
267
  - tasks/acceptance.rake
248
268
  - tasks/bundler.rake