vcloud-edge_gateway 0.5.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|