vcloud-edge_gateway 0.5.0 → 1.0.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.
- data/.gitignore +1 -0
- data/.travis.yml +0 -3
- data/CHANGELOG.md +30 -0
- data/CONTRIBUTING.md +66 -0
- data/README.md +16 -8
- data/Rakefile +1 -1
- data/bin/vcloud-configure-edge +2 -29
- data/bin/vcloud-edge-configure +5 -0
- data/jenkins.sh +7 -0
- data/jenkins_integration_tests.sh +7 -0
- data/lib/vcloud/edge_gateway/cli.rb +137 -0
- data/lib/vcloud/edge_gateway/configuration_differ.rb +2 -1
- data/lib/vcloud/edge_gateway/configure.rb +9 -5
- data/lib/vcloud/edge_gateway/edge_gateway_configuration.rb +36 -30
- data/lib/vcloud/edge_gateway/version.rb +1 -1
- data/lib/vcloud/edge_gateway.rb +1 -0
- data/spec/integration/README.md +38 -0
- data/spec/integration/edge_gateway/{firewall_service_spec.rb → configure_firewall_spec.rb} +14 -43
- data/spec/integration/edge_gateway/{load_balancer_service_spec.rb → configure_load_balancer_spec.rb} +26 -32
- data/spec/integration/edge_gateway/{nat_service_spec.rb → configure_nat_spec.rb} +32 -44
- data/spec/integration/edge_gateway/{edge_gateway_services_spec.rb → configure_services_spec.rb} +26 -28
- data/spec/integration/vcloud_tools_testing_config.yaml.template +8 -0
- data/spec/spec_helper.rb +26 -15
- data/spec/support/integration_helper.rb +8 -20
- data/spec/vcloud/edge_gateway/cli_spec.rb +221 -0
- data/spec/vcloud/edge_gateway/configure_spec.rb +81 -0
- data/spec/vcloud/edge_gateway/edge_gateway_configuration_spec.rb +75 -0
- data/vcloud-edge_gateway.gemspec +3 -1
- metadata +59 -15
@@ -5,14 +5,8 @@ module Vcloud
|
|
5
5
|
describe EdgeGateway::Configure do
|
6
6
|
|
7
7
|
before(:all) do
|
8
|
-
|
9
|
-
@
|
10
|
-
@ext_net_id = ENV['VCLOUD_PROVIDER_NETWORK_ID']
|
11
|
-
@ext_net_ip = ENV['VCLOUD_PROVIDER_NETWORK_IP']
|
12
|
-
@ext_net_name = ENV['VCLOUD_PROVIDER_NETWORK_NAME']
|
13
|
-
@int_net_id = ENV['VCLOUD_NETWORK1_ID']
|
14
|
-
@int_net_ip = ENV['VCLOUD_NETWORK1_IP']
|
15
|
-
@int_net_name = ENV['VCLOUD_NETWORK1_NAME']
|
8
|
+
config_file = File.join(File.dirname(__FILE__), "../vcloud_tools_testing_config.yaml")
|
9
|
+
@test_data = Vcloud::Tools::Tester::TestParameters.new(config_file)
|
16
10
|
@files_to_delete = []
|
17
11
|
end
|
18
12
|
|
@@ -22,7 +16,7 @@ module Vcloud
|
|
22
16
|
reset_edge_gateway
|
23
17
|
@vars_config_file = generate_vars_file(edge_gateway_vars_hash)
|
24
18
|
@initial_firewall_config_file = IntegrationHelper.fixture_file('firewall_config.yaml.mustache')
|
25
|
-
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@
|
19
|
+
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@test_data.edge_gateway)
|
26
20
|
@firewall_service = {}
|
27
21
|
end
|
28
22
|
|
@@ -44,7 +38,10 @@ module Vcloud
|
|
44
38
|
|
45
39
|
it "should only need to make one call to Core::EdgeGateway.update_configuration" do
|
46
40
|
expect_any_instance_of(Core::EdgeGateway).to receive(:update_configuration).exactly(1).times.and_call_original
|
47
|
-
EdgeGateway::Configure.new(@initial_firewall_config_file, @vars_config_file).update
|
41
|
+
diff = EdgeGateway::Configure.new(@initial_firewall_config_file, @vars_config_file).update
|
42
|
+
|
43
|
+
expect(diff.keys).to eq([:FirewallService])
|
44
|
+
expect(diff[:FirewallService]).to have_at_least(1).items
|
48
45
|
end
|
49
46
|
|
50
47
|
it "should have configured at least one firewall rule" do
|
@@ -60,32 +57,9 @@ module Vcloud
|
|
60
57
|
|
61
58
|
it "and then should not configure the firewall service if updated again with the same configuration (idempotency)" do
|
62
59
|
expect(Vcloud::Core.logger).to receive(:info).with('EdgeGateway::Configure.update: Configuration is already up to date. Skipping.')
|
63
|
-
EdgeGateway::Configure.new(@initial_firewall_config_file, @vars_config_file).update
|
64
|
-
end
|
60
|
+
diff = EdgeGateway::Configure.new(@initial_firewall_config_file, @vars_config_file).update
|
65
61
|
|
66
|
-
|
67
|
-
remote_vcloud_config = @edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration][:FirewallService]
|
68
|
-
differ = EdgeGateway::ConfigurationDiffer.new(@local_vcloud_config, remote_vcloud_config)
|
69
|
-
diff_output = differ.diff
|
70
|
-
expect(diff_output).to eq([])
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should highlight a difference if local firewall config has been updated" do
|
74
|
-
local_config = Core::ConfigLoader.new.load_config(
|
75
|
-
IntegrationHelper.fixture_file('firewall_config_updated_rule.yaml.mustache'),
|
76
|
-
Vcloud::EdgeGateway::Schema::EDGE_GATEWAY_SERVICES,
|
77
|
-
@vars_config_file
|
78
|
-
)
|
79
|
-
local_firewall_config = EdgeGateway::ConfigurationGenerator::FirewallService.new.generate_fog_config(local_config[:firewall_service])
|
80
|
-
|
81
|
-
edge_gateway = Core::EdgeGateway.get_by_name local_config[:gateway]
|
82
|
-
remote_config = edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration]
|
83
|
-
remote_firewall_config = remote_config[:FirewallService]
|
84
|
-
|
85
|
-
differ = EdgeGateway::ConfigurationDiffer.new(local_firewall_config, remote_firewall_config)
|
86
|
-
diff_output = differ.diff
|
87
|
-
|
88
|
-
expect(diff_output.empty?).to be_false
|
62
|
+
expect(diff).to eq({})
|
89
63
|
end
|
90
64
|
|
91
65
|
end
|
@@ -151,14 +125,11 @@ module Vcloud
|
|
151
125
|
end
|
152
126
|
|
153
127
|
after(:all) do
|
154
|
-
|
155
|
-
@files_to_delete.each { |f|
|
156
|
-
f.unlink
|
157
|
-
}
|
128
|
+
IntegrationHelper.remove_temp_config_files(@files_to_delete)
|
158
129
|
end
|
159
130
|
|
160
131
|
def reset_edge_gateway
|
161
|
-
edge_gateway = Core::EdgeGateway.get_by_name @
|
132
|
+
edge_gateway = Core::EdgeGateway.get_by_name @test_data.edge_gateway
|
162
133
|
edge_gateway.update_configuration({
|
163
134
|
FirewallService: {IsEnabled: false, FirewallRule: []},
|
164
135
|
})
|
@@ -175,9 +146,9 @@ module Vcloud
|
|
175
146
|
|
176
147
|
def edge_gateway_vars_hash
|
177
148
|
{
|
178
|
-
:edge_gateway_name => @
|
179
|
-
:edge_gateway_ext_network_id => @
|
180
|
-
:edge_gateway_ext_network_ip => @
|
149
|
+
:edge_gateway_name => @test_data.edge_gateway,
|
150
|
+
:edge_gateway_ext_network_id => @test_data.provider_network_id,
|
151
|
+
:edge_gateway_ext_network_ip => @test_data.provider_network_ip,
|
181
152
|
}
|
182
153
|
end
|
183
154
|
|
data/spec/integration/edge_gateway/{load_balancer_service_spec.rb → configure_load_balancer_spec.rb}
RENAMED
@@ -5,14 +5,8 @@ module Vcloud
|
|
5
5
|
describe EdgeGateway::Configure do
|
6
6
|
|
7
7
|
before(:all) do
|
8
|
-
|
9
|
-
@
|
10
|
-
@ext_net_id = ENV['VCLOUD_PROVIDER_NETWORK_ID']
|
11
|
-
@ext_net_ip = ENV['VCLOUD_PROVIDER_NETWORK_IP']
|
12
|
-
@ext_net_name = ENV['VCLOUD_PROVIDER_NETWORK_NAME']
|
13
|
-
@int_net_id = ENV['VCLOUD_NETWORK1_ID']
|
14
|
-
@int_net_ip = ENV['VCLOUD_NETWORK1_IP']
|
15
|
-
@int_net_name = ENV['VCLOUD_NETWORK1_NAME']
|
8
|
+
config_file = File.join(File.dirname(__FILE__), "../vcloud_tools_testing_config.yaml")
|
9
|
+
@test_data = Vcloud::Tools::Tester::TestParameters.new(config_file)
|
16
10
|
@files_to_delete = []
|
17
11
|
end
|
18
12
|
|
@@ -22,7 +16,7 @@ module Vcloud
|
|
22
16
|
reset_edge_gateway
|
23
17
|
@vars_config_file = generate_vars_file(edge_gateway_vars_hash)
|
24
18
|
@initial_load_balancer_config_file = IntegrationHelper.fixture_file('load_balancer_config.yaml.mustache')
|
25
|
-
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@
|
19
|
+
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@test_data.edge_gateway)
|
26
20
|
end
|
27
21
|
|
28
22
|
context "Check update is functional" do
|
@@ -48,8 +42,11 @@ module Vcloud
|
|
48
42
|
it "should only make one EdgeGateway update task, to minimise EdgeGateway reload events" do
|
49
43
|
start_time = Time.now.getutc
|
50
44
|
task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
51
|
-
EdgeGateway::Configure.new(@initial_load_balancer_config_file, @vars_config_file).update
|
45
|
+
diff = EdgeGateway::Configure.new(@initial_load_balancer_config_file, @vars_config_file).update
|
52
46
|
task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
47
|
+
|
48
|
+
expect(diff.keys).to eq([:LoadBalancerService])
|
49
|
+
expect(diff[:LoadBalancerService]).to have_at_least(1).items
|
53
50
|
expect(task_list_after_update.size - task_list_before_update.size).to be(1)
|
54
51
|
end
|
55
52
|
|
@@ -79,18 +76,12 @@ module Vcloud
|
|
79
76
|
to eq(@local_vcloud_config[:VirtualServer].size)
|
80
77
|
end
|
81
78
|
|
82
|
-
it "ConfigurationDiffer should return empty if local and remote LoadBalancer configs match" do
|
83
|
-
edge_service_config = @edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration]
|
84
|
-
remote_vcloud_config = edge_service_config[:LoadBalancerService]
|
85
|
-
differ = EdgeGateway::LoadBalancerConfigurationDiffer.new(@local_vcloud_config, remote_vcloud_config)
|
86
|
-
diff_output = differ.diff
|
87
|
-
expect(diff_output).to eq([])
|
88
|
-
end
|
89
|
-
|
90
79
|
it "should not then configure the LoadBalancerService if updated again with the same configuration" do
|
91
|
-
expect(Vcloud::Core.logger).
|
92
|
-
|
93
|
-
EdgeGateway::Configure.new(@initial_load_balancer_config_file, @vars_config_file).update
|
80
|
+
expect(Vcloud::Core.logger).to receive(:info).
|
81
|
+
with('EdgeGateway::Configure.update: Configuration is already up to date. Skipping.')
|
82
|
+
diff = EdgeGateway::Configure.new(@initial_load_balancer_config_file, @vars_config_file).update
|
83
|
+
|
84
|
+
expect(diff).to eq({})
|
94
85
|
end
|
95
86
|
|
96
87
|
end
|
@@ -99,18 +90,24 @@ module Vcloud
|
|
99
90
|
|
100
91
|
it "should be able to configure with no pools and virtual_servers" do
|
101
92
|
config_file = IntegrationHelper.fixture_file('load_balancer_empty.yaml.mustache')
|
102
|
-
EdgeGateway::Configure.new(config_file, @vars_config_file).update
|
93
|
+
diff = EdgeGateway::Configure.new(config_file, @vars_config_file).update
|
103
94
|
edge_config = @edge_gateway.vcloud_attributes[:Configuration]
|
104
95
|
remote_vcloud_config = edge_config[:EdgeGatewayServiceConfiguration][:LoadBalancerService]
|
96
|
+
|
97
|
+
expect(diff.keys).to eq([:LoadBalancerService])
|
98
|
+
expect(diff[:LoadBalancerService]).to have_at_least(1).items
|
105
99
|
expect(remote_vcloud_config[:Pool].size).to be == 0
|
106
100
|
expect(remote_vcloud_config[:VirtualServer].size).to be == 0
|
107
101
|
end
|
108
102
|
|
109
103
|
it "should be able to configure with a single Pool and no VirtualServers" do
|
110
104
|
config_file = IntegrationHelper.fixture_file('load_balancer_single_pool.yaml.mustache')
|
111
|
-
EdgeGateway::Configure.new(config_file, @vars_config_file).update
|
105
|
+
diff = EdgeGateway::Configure.new(config_file, @vars_config_file).update
|
112
106
|
edge_config = @edge_gateway.vcloud_attributes[:Configuration]
|
113
107
|
remote_vcloud_config = edge_config[:EdgeGatewayServiceConfiguration][:LoadBalancerService]
|
108
|
+
|
109
|
+
expect(diff.keys).to eq([:LoadBalancerService])
|
110
|
+
expect(diff[:LoadBalancerService]).to have_at_least(1).items
|
114
111
|
expect(remote_vcloud_config[:Pool].size).to be == 1
|
115
112
|
end
|
116
113
|
|
@@ -131,14 +128,11 @@ module Vcloud
|
|
131
128
|
end
|
132
129
|
|
133
130
|
after(:all) do
|
134
|
-
|
135
|
-
@files_to_delete.each { |f|
|
136
|
-
f.unlink
|
137
|
-
}
|
131
|
+
IntegrationHelper.remove_temp_config_files(@files_to_delete)
|
138
132
|
end
|
139
133
|
|
140
134
|
def reset_edge_gateway
|
141
|
-
edge_gateway = Core::EdgeGateway.get_by_name @
|
135
|
+
edge_gateway = Core::EdgeGateway.get_by_name @test_data.edge_gateway
|
142
136
|
edge_gateway.update_configuration({
|
143
137
|
LoadBalancerService: {
|
144
138
|
IsEnabled: "false",
|
@@ -159,9 +153,9 @@ module Vcloud
|
|
159
153
|
|
160
154
|
def edge_gateway_vars_hash
|
161
155
|
{
|
162
|
-
:edge_gateway_name => @
|
163
|
-
:edge_gateway_ext_network_id => @
|
164
|
-
:edge_gateway_ext_network_ip => @
|
156
|
+
:edge_gateway_name => @test_data.edge_gateway,
|
157
|
+
:edge_gateway_ext_network_id => @test_data.provider_network_id,
|
158
|
+
:edge_gateway_ext_network_ip => @test_data.provider_network_ip,
|
165
159
|
}
|
166
160
|
end
|
167
161
|
|
@@ -170,7 +164,7 @@ module Vcloud
|
|
170
164
|
q = Vcloud::Core::QueryRunner.new
|
171
165
|
q.run('task',
|
172
166
|
:filter =>
|
173
|
-
"name==networkConfigureEdgeGatewayServices;objectName==#{@
|
167
|
+
"name==networkConfigureEdgeGatewayServices;objectName==#{@test_data.edge_gateway};startDate=ge=#{vcloud_time}",
|
174
168
|
:sortDesc => 'startDate',
|
175
169
|
)
|
176
170
|
end
|
@@ -5,14 +5,8 @@ module Vcloud
|
|
5
5
|
describe EdgeGateway::Configure do
|
6
6
|
|
7
7
|
before(:all) do
|
8
|
-
|
9
|
-
@
|
10
|
-
@ext_net_id = ENV['VCLOUD_PROVIDER_NETWORK_ID']
|
11
|
-
@ext_net_ip = ENV['VCLOUD_PROVIDER_NETWORK_IP']
|
12
|
-
@ext_net_name = ENV['VCLOUD_PROVIDER_NETWORK_NAME']
|
13
|
-
@int_net_id = ENV['VCLOUD_NETWORK1_ID']
|
14
|
-
@int_net_ip = ENV['VCLOUD_NETWORK1_IP']
|
15
|
-
@int_net_name = ENV['VCLOUD_NETWORK1_NAME']
|
8
|
+
config_file = File.join(File.dirname(__FILE__), "../vcloud_tools_testing_config.yaml")
|
9
|
+
@test_data = Vcloud::Tools::Tester::TestParameters.new(config_file)
|
16
10
|
@files_to_delete = []
|
17
11
|
end
|
18
12
|
|
@@ -22,7 +16,7 @@ module Vcloud
|
|
22
16
|
reset_edge_gateway
|
23
17
|
@vars_config_file = generate_vars_file(edge_gateway_vars_hash)
|
24
18
|
@initial_nat_config_file = IntegrationHelper.fixture_file('nat_config.yaml.mustache')
|
25
|
-
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@
|
19
|
+
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@test_data.edge_gateway)
|
26
20
|
end
|
27
21
|
|
28
22
|
context "Check update is functional" do
|
@@ -47,8 +41,11 @@ module Vcloud
|
|
47
41
|
it "should only make one EdgeGateway update task, to minimise EdgeGateway reload events" do
|
48
42
|
start_time = Time.now.getutc
|
49
43
|
task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
50
|
-
EdgeGateway::Configure.new(@initial_nat_config_file, @vars_config_file).update
|
44
|
+
diff = EdgeGateway::Configure.new(@initial_nat_config_file, @vars_config_file).update
|
51
45
|
task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
46
|
+
|
47
|
+
expect(diff.keys).to eq([:NatService])
|
48
|
+
expect(diff[:NatService]).to have_at_least(1).items
|
52
49
|
expect(task_list_after_update.size - task_list_before_update.size).to be(1)
|
53
50
|
end
|
54
51
|
|
@@ -63,16 +60,11 @@ module Vcloud
|
|
63
60
|
to eq(@local_vcloud_config[:NatRule].size)
|
64
61
|
end
|
65
62
|
|
66
|
-
it "ConfigurationDiffer should return empty if local and remote nat configs match" do
|
67
|
-
remote_vcloud_config = @edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration][:NatService]
|
68
|
-
differ = EdgeGateway::ConfigurationDiffer.new(@local_vcloud_config, remote_vcloud_config)
|
69
|
-
diff_output = differ.diff
|
70
|
-
expect(diff_output).to eq([])
|
71
|
-
end
|
72
|
-
|
73
63
|
it "and then should not configure the firewall service if updated again with the same configuration (idempotency)" do
|
74
64
|
expect(Vcloud::Core.logger).to receive(:info).with('EdgeGateway::Configure.update: Configuration is already up to date. Skipping.')
|
75
|
-
EdgeGateway::Configure.new(@initial_nat_config_file, @vars_config_file).update
|
65
|
+
diff = EdgeGateway::Configure.new(@initial_nat_config_file, @vars_config_file).update
|
66
|
+
|
67
|
+
expect(diff).to eq({})
|
76
68
|
end
|
77
69
|
|
78
70
|
end
|
@@ -88,8 +80,8 @@ module Vcloud
|
|
88
80
|
expect(dnat_rule[:RuleType]).to eq('DNAT')
|
89
81
|
expect(dnat_rule[:Id]).to eq('65537')
|
90
82
|
expect(dnat_rule[:IsEnabled]).to eq('true')
|
91
|
-
expect(dnat_rule[:GatewayNatRule][:Interface][:href]).to include(@
|
92
|
-
expect(dnat_rule[:GatewayNatRule][:OriginalIp]).to eq(@
|
83
|
+
expect(dnat_rule[:GatewayNatRule][:Interface][:href]).to include(@test_data.provider_network_id)
|
84
|
+
expect(dnat_rule[:GatewayNatRule][:OriginalIp]).to eq(@test_data.provider_network_ip)
|
93
85
|
expect(dnat_rule[:GatewayNatRule][:OriginalPort]).to eq('3412')
|
94
86
|
expect(dnat_rule[:GatewayNatRule][:TranslatedIp]).to eq('10.10.1.2-10.10.1.3')
|
95
87
|
expect(dnat_rule[:GatewayNatRule][:TranslatedPort]).to eq('3412')
|
@@ -102,9 +94,9 @@ module Vcloud
|
|
102
94
|
expect(snat_rule[:RuleType]).to eq('SNAT')
|
103
95
|
expect(snat_rule[:Id]).to eq('65538')
|
104
96
|
expect(snat_rule[:IsEnabled]).to eq('true')
|
105
|
-
expect(snat_rule[:GatewayNatRule][:Interface][:href]).to include(@
|
97
|
+
expect(snat_rule[:GatewayNatRule][:Interface][:href]).to include(@test_data.provider_network_id)
|
106
98
|
expect(snat_rule[:GatewayNatRule][:OriginalIp]).to eq('10.10.1.2-10.10.1.3')
|
107
|
-
expect(snat_rule[:GatewayNatRule][:TranslatedIp]).to eq(@
|
99
|
+
expect(snat_rule[:GatewayNatRule][:TranslatedIp]).to eq(@test_data.provider_network_ip)
|
108
100
|
end
|
109
101
|
|
110
102
|
end
|
@@ -113,17 +105,20 @@ module Vcloud
|
|
113
105
|
|
114
106
|
it "and then should configure hairpin NATting with orgVdcNetwork" do
|
115
107
|
vars_file = generate_vars_file({
|
116
|
-
edge_gateway_name: @
|
117
|
-
org_vdc_network_id: @
|
118
|
-
original_ip: @
|
108
|
+
edge_gateway_name: @test_data.edge_gateway,
|
109
|
+
org_vdc_network_id: @test_data.network_1_id,
|
110
|
+
original_ip: @test_data.network_1_ip,
|
119
111
|
})
|
120
112
|
|
121
|
-
EdgeGateway::Configure.new(
|
113
|
+
diff = EdgeGateway::Configure.new(
|
122
114
|
IntegrationHelper.fixture_file('hairpin_nat_config.yaml.mustache'),
|
123
115
|
vars_file
|
124
116
|
).update
|
125
117
|
|
126
|
-
|
118
|
+
expect(diff.keys).to eq([:NatService])
|
119
|
+
expect(diff[:NatService]).to have_at_least(1).items
|
120
|
+
|
121
|
+
edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@test_data.edge_gateway)
|
127
122
|
nat_service = edge_gateway.vcloud_attributes[:Configuration][:EdgeGatewayServiceConfiguration][:NatService]
|
128
123
|
expected_rule = nat_service[:NatRule].first
|
129
124
|
expect(expected_rule).not_to be_nil
|
@@ -131,8 +126,8 @@ module Vcloud
|
|
131
126
|
expect(expected_rule[:Id]).to eq('65537')
|
132
127
|
expect(expected_rule[:RuleType]).to eq('DNAT')
|
133
128
|
expect(expected_rule[:IsEnabled]).to eq('true')
|
134
|
-
expect(expected_rule[:GatewayNatRule][:Interface][:name]).to eq(@
|
135
|
-
expect(expected_rule[:GatewayNatRule][:OriginalIp]).to eq(@
|
129
|
+
expect(expected_rule[:GatewayNatRule][:Interface][:name]).to eq(@test_data.network_1)
|
130
|
+
expect(expected_rule[:GatewayNatRule][:OriginalIp]).to eq(@test_data.network_1_ip)
|
136
131
|
expect(expected_rule[:GatewayNatRule][:OriginalPort]).to eq('3412')
|
137
132
|
expect(expected_rule[:GatewayNatRule][:TranslatedIp]).to eq('10.10.1.2')
|
138
133
|
expect(expected_rule[:GatewayNatRule][:TranslatedPort]).to eq('3412')
|
@@ -142,9 +137,9 @@ module Vcloud
|
|
142
137
|
it "should raise error if network provided in rule does not exist" do
|
143
138
|
random_network_id = SecureRandom.uuid
|
144
139
|
vars_file = generate_vars_file({
|
145
|
-
edge_gateway_name: @
|
140
|
+
edge_gateway_name: @test_data.edge_gateway,
|
146
141
|
network_id: random_network_id,
|
147
|
-
original_ip: @
|
142
|
+
original_ip: @test_data.network_1_ip,
|
148
143
|
})
|
149
144
|
|
150
145
|
expect {
|
@@ -157,18 +152,11 @@ module Vcloud
|
|
157
152
|
end
|
158
153
|
|
159
154
|
after(:all) do
|
160
|
-
|
161
|
-
remove_temp_config_files
|
162
|
-
end
|
163
|
-
|
164
|
-
def remove_temp_config_files
|
165
|
-
@files_to_delete.each { |f|
|
166
|
-
f.unlink
|
167
|
-
}
|
155
|
+
IntegrationHelper.remove_temp_config_files(@files_to_delete)
|
168
156
|
end
|
169
157
|
|
170
158
|
def reset_edge_gateway
|
171
|
-
edge_gateway = Core::EdgeGateway.get_by_name @
|
159
|
+
edge_gateway = Core::EdgeGateway.get_by_name @test_data.edge_gateway
|
172
160
|
edge_gateway.update_configuration({
|
173
161
|
NatService: {:IsEnabled => "true", :NatRule => []},
|
174
162
|
})
|
@@ -185,9 +173,9 @@ module Vcloud
|
|
185
173
|
|
186
174
|
def edge_gateway_vars_hash
|
187
175
|
{
|
188
|
-
:edge_gateway_name => @
|
189
|
-
:network_id => @
|
190
|
-
:original_ip => @
|
176
|
+
:edge_gateway_name => @test_data.edge_gateway,
|
177
|
+
:network_id => @test_data.provider_network_id,
|
178
|
+
:original_ip => @test_data.provider_network_ip,
|
191
179
|
}
|
192
180
|
end
|
193
181
|
|
@@ -195,7 +183,7 @@ module Vcloud
|
|
195
183
|
vcloud_time = timestamp.strftime('%FT%T.000Z')
|
196
184
|
q = Vcloud::Core::QueryRunner.new
|
197
185
|
q.run('task',
|
198
|
-
:filter => "name==networkConfigureEdgeGatewayServices;objectName==#{@
|
186
|
+
:filter => "name==networkConfigureEdgeGatewayServices;objectName==#{@test_data.edge_gateway};startDate=ge=#{vcloud_time}",
|
199
187
|
:sortDesc => 'startDate',
|
200
188
|
)
|
201
189
|
end
|
data/spec/integration/edge_gateway/{edge_gateway_services_spec.rb → configure_services_spec.rb}
RENAMED
@@ -5,14 +5,8 @@ module Vcloud
|
|
5
5
|
describe EdgeGateway::Configure do
|
6
6
|
|
7
7
|
before(:all) do
|
8
|
-
|
9
|
-
@
|
10
|
-
@ext_net_id = ENV['VCLOUD_PROVIDER_NETWORK_ID']
|
11
|
-
@ext_net_ip = ENV['VCLOUD_PROVIDER_NETWORK_IP']
|
12
|
-
@ext_net_name = ENV['VCLOUD_PROVIDER_NETWORK_NAME']
|
13
|
-
@int_net_id = ENV['VCLOUD_NETWORK1_ID']
|
14
|
-
@int_net_ip = ENV['VCLOUD_NETWORK1_IP']
|
15
|
-
@int_net_name = ENV['VCLOUD_NETWORK1_NAME']
|
8
|
+
config_file = File.join(File.dirname(__FILE__), "../vcloud_tools_testing_config.yaml")
|
9
|
+
@test_data = Vcloud::Tools::Tester::TestParameters.new(config_file)
|
16
10
|
@files_to_delete = []
|
17
11
|
end
|
18
12
|
|
@@ -23,7 +17,7 @@ module Vcloud
|
|
23
17
|
@vars_config_file = generate_vars_file(edge_gateway_vars_hash)
|
24
18
|
@initial_config_file = IntegrationHelper.fixture_file('nat_and_firewall_config.yaml.mustache')
|
25
19
|
@adding_load_balancer_config_file = IntegrationHelper.fixture_file('nat_and_firewall_plus_load_balancer_config.yaml.mustache')
|
26
|
-
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@
|
20
|
+
@edge_gateway = Vcloud::Core::EdgeGateway.get_by_name(@test_data.edge_gateway)
|
27
21
|
end
|
28
22
|
|
29
23
|
context "Check update is functional" do
|
@@ -39,8 +33,12 @@ module Vcloud
|
|
39
33
|
it "should only create one edgeGateway update task when updating the configuration" do
|
40
34
|
start_time = Time.now.getutc
|
41
35
|
task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
42
|
-
EdgeGateway::Configure.new(@initial_config_file, @vars_config_file).update
|
36
|
+
diff = EdgeGateway::Configure.new(@initial_config_file, @vars_config_file).update
|
43
37
|
task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
38
|
+
|
39
|
+
expect(diff.keys).to eq([:FirewallService, :NatService])
|
40
|
+
expect(diff[:FirewallService]).to have_at_least(1).items
|
41
|
+
expect(diff[:NatService]).to have_at_least(1).items
|
44
42
|
expect(task_list_after_update.size - task_list_before_update.size).to be(1)
|
45
43
|
end
|
46
44
|
|
@@ -55,42 +53,42 @@ module Vcloud
|
|
55
53
|
it "should not update the EdgeGateway again if the config hasn't changed" do
|
56
54
|
start_time = Time.now.getutc
|
57
55
|
task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
58
|
-
EdgeGateway::Configure.new(@initial_config_file, @vars_config_file).update
|
56
|
+
diff = EdgeGateway::Configure.new(@initial_config_file, @vars_config_file).update
|
59
57
|
task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
58
|
+
|
59
|
+
expect(diff).to eq({})
|
60
60
|
expect(task_list_after_update.size - task_list_before_update.size).to be(0)
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should only create one additional edgeGateway update task when adding the LoadBalancer config" do
|
64
64
|
start_time = Time.now.getutc
|
65
65
|
task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
66
|
-
EdgeGateway::Configure.new(@adding_load_balancer_config_file, @vars_config_file).update
|
66
|
+
diff = EdgeGateway::Configure.new(@adding_load_balancer_config_file, @vars_config_file).update
|
67
67
|
task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
68
|
+
|
69
|
+
expect(diff.keys).to eq([:LoadBalancerService])
|
70
|
+
expect(diff[:LoadBalancerService]).to have_at_least(1).items
|
68
71
|
expect(task_list_after_update.size - task_list_before_update.size).to be(1)
|
69
72
|
end
|
70
73
|
|
71
74
|
it "should not update the EdgeGateway again if we reapply the 'adding load balancer' config" do
|
72
75
|
start_time = Time.now.getutc
|
73
76
|
task_list_before_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
74
|
-
EdgeGateway::Configure.new(@adding_load_balancer_config_file, @vars_config_file).update
|
77
|
+
diff = EdgeGateway::Configure.new(@adding_load_balancer_config_file, @vars_config_file).update
|
75
78
|
task_list_after_update = get_all_edge_gateway_update_tasks_ordered_by_start_date_since_time(start_time)
|
79
|
+
|
80
|
+
expect(diff).to eq({})
|
76
81
|
expect(task_list_after_update.size - task_list_before_update.size).to be(0)
|
77
82
|
end
|
78
83
|
|
79
84
|
end
|
80
85
|
|
81
86
|
after(:all) do
|
82
|
-
|
83
|
-
remove_temp_config_files
|
84
|
-
end
|
85
|
-
|
86
|
-
def remove_temp_config_files
|
87
|
-
@files_to_delete.each { |f|
|
88
|
-
f.unlink
|
89
|
-
}
|
87
|
+
IntegrationHelper.remove_temp_config_files(@files_to_delete)
|
90
88
|
end
|
91
89
|
|
92
90
|
def reset_edge_gateway
|
93
|
-
edge_gateway = Core::EdgeGateway.get_by_name @
|
91
|
+
edge_gateway = Core::EdgeGateway.get_by_name @test_data.edge_gateway
|
94
92
|
edge_gateway.update_configuration({
|
95
93
|
FirewallService: {IsEnabled: false, FirewallRule: []},
|
96
94
|
NatService: {:IsEnabled => "true", :NatRule => []},
|
@@ -113,11 +111,11 @@ module Vcloud
|
|
113
111
|
|
114
112
|
def edge_gateway_vars_hash
|
115
113
|
{
|
116
|
-
edge_gateway_name: @
|
117
|
-
network_id: @
|
118
|
-
original_ip: @
|
119
|
-
edge_gateway_ext_network_id: @
|
120
|
-
edge_gateway_ext_network_ip: @
|
114
|
+
edge_gateway_name: @test_data.edge_gateway,
|
115
|
+
network_id: @test_data.provider_network_id,
|
116
|
+
original_ip: @test_data.provider_network_ip,
|
117
|
+
edge_gateway_ext_network_id: @test_data.provider_network_id,
|
118
|
+
edge_gateway_ext_network_ip: @test_data.provider_network_ip,
|
121
119
|
}
|
122
120
|
end
|
123
121
|
|
@@ -127,7 +125,7 @@ module Vcloud
|
|
127
125
|
|
128
126
|
q.run('task',
|
129
127
|
:filter =>
|
130
|
-
"name==networkConfigureEdgeGatewayServices;objectName==#{@
|
128
|
+
"name==networkConfigureEdgeGatewayServices;objectName==#{@test_data.edge_gateway};startDate=ge=#{vcloud_time}",
|
131
129
|
:sortDesc => 'startDate',
|
132
130
|
)
|
133
131
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,37 @@
|
|
1
|
-
require 'simplecov'
|
2
1
|
require 'support/integration_helper'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
add_filter '/features/'
|
7
|
-
add_filter '/vendor/'
|
3
|
+
if ENV['COVERAGE']
|
4
|
+
require 'simplecov'
|
8
5
|
|
9
|
-
|
10
|
-
|
6
|
+
SimpleCov.profiles.define 'gem' do
|
7
|
+
add_filter '/spec/'
|
8
|
+
add_filter '/features/'
|
9
|
+
add_filter '/vendor/'
|
10
|
+
|
11
|
+
add_group 'Libraries', '/lib/'
|
12
|
+
end
|
11
13
|
|
12
|
-
SimpleCov.start 'gem'
|
14
|
+
SimpleCov.start 'gem'
|
15
|
+
end
|
13
16
|
|
14
17
|
require 'bundler/setup'
|
15
18
|
require 'vcloud/edge_gateway'
|
19
|
+
require 'vcloud/tools/tester'
|
16
20
|
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.expect_with :rspec do |c|
|
23
|
+
c.syntax = :expect
|
24
|
+
end
|
25
|
+
end
|
17
26
|
|
18
|
-
|
19
|
-
SimpleCov.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
27
|
+
if ENV['COVERAGE']
|
28
|
+
SimpleCov.at_exit do
|
29
|
+
SimpleCov.result.format!
|
30
|
+
# do not change the coverage percentage, instead add more unit tests to fix coverage failures.
|
31
|
+
if SimpleCov.result.covered_percent < 90
|
32
|
+
print "ERROR::BAD_COVERAGE\n"
|
33
|
+
print "Coverage is less than acceptable limit(90%). Please add more tests to improve the coverage\n"
|
34
|
+
exit(1)
|
35
|
+
end
|
25
36
|
end
|
26
37
|
end
|
@@ -1,24 +1,4 @@
|
|
1
1
|
module IntegrationHelper
|
2
|
-
REQUIRED_ENV = {
|
3
|
-
'VCLOUD_EDGE_GATEWAY' => 'to name of VSE',
|
4
|
-
'VCLOUD_PROVIDER_NETWORK_ID' => 'to ID of VSE external network',
|
5
|
-
'VCLOUD_PROVIDER_NETWORK_IP' => 'to an available IP on VSE external network',
|
6
|
-
'VCLOUD_NETWORK1_ID' => 'to the ID of a VSE internal network',
|
7
|
-
'VCLOUD_NETWORK1_NAME' => 'to the name of the VSE internal network',
|
8
|
-
'VCLOUD_NETWORK1_IP' => 'to an ID on the VSE internal network',
|
9
|
-
}
|
10
|
-
|
11
|
-
def self.verify_env_vars
|
12
|
-
error = false
|
13
|
-
REQUIRED_ENV.each do |var,message|
|
14
|
-
unless ENV[var]
|
15
|
-
puts "Must set #{var} #{message}" unless ENV[var]
|
16
|
-
error = true
|
17
|
-
end
|
18
|
-
end
|
19
|
-
Kernel.exit(2) if error
|
20
|
-
end
|
21
|
-
|
22
2
|
def self.fixture_path
|
23
3
|
File.expand_path("../integration/edge_gateway/data", File.dirname(__FILE__))
|
24
4
|
end
|
@@ -26,4 +6,12 @@ module IntegrationHelper
|
|
26
6
|
def self.fixture_file(path)
|
27
7
|
File.join(self.fixture_path, path)
|
28
8
|
end
|
9
|
+
|
10
|
+
def self.remove_temp_config_files(files_to_delete)
|
11
|
+
files_to_delete.each { |f|
|
12
|
+
f.unlink
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
|
29
17
|
end
|