Skip to content

Commit f305692

Browse files
committed
Add test for icmpv6 with IPv6 address range
* and fix version check
1 parent fd4265c commit f305692

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

app/messages/validators/security_group_rule_validator.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def validate(record)
2626
end
2727

2828
validate_allowed_keys(rule, record, index)
29-
3029
add_rule_error("protocol must be 'tcp', 'udp', 'icmp', 'icmpv6' or 'all'", record, index) unless valid_protocol(rule[:protocol])
3130

3231
if valid_destination_type(rule[:destination], record, index)
@@ -46,9 +45,9 @@ def validate(record)
4645

4746
def get_allowed_ip_version(rule)
4847
if rule[:protocol] == 'icmp'
49-
NetAddr::IPv4Net
48+
4
5049
elsif rule[:protocol] == 'icmpv6'
51-
NetAddr::IPv6Net
50+
6
5251
end
5352
end
5453

@@ -158,6 +157,7 @@ def validate_destination(destination, protocol, allowed_ip_version, record, inde
158157
unless valid_ip_version?(allowed_ip_version, parsed_ip)
159158
elsif address_list.length == 2
160159
ips = CloudController::RuleValidator.parse_ip(address_list)
160+
161161
return add_rule_error('destination IP address range is invalid', record, index) unless ips
162162

163163
sorted_ips = if ips.first.is_a?(NetAddr::IPv4)
@@ -169,14 +169,14 @@ def validate_destination(destination, protocol, allowed_ip_version, record, inde
169169
reversed_range_error = 'beginning of IP address range is numerically greater than the end of its range (range endpoints are inverted)'
170170
add_rule_error(reversed_range_error, record, index) unless ips.first == sorted_ips.first
171171
add_rule_error("for protocol \"#{protocol}\" you cannot use IPv#{ips.first.version} addresses", record, index) \
172-
unless valid_ip_version?(allowed_ip_version, ips.first)
172+
unless valid_ip_version?(allowed_ip_version, sorted_ips.first)
173173
else
174174
add_rule_error(error_message, record, index)
175175
end
176176
end
177177

178178
def valid_ip_version?(allowed_ip_version, parsed_ip)
179-
parsed_ip.nil? || allowed_ip_version.nil? || parsed_ip.is_a?(allowed_ip_version)
179+
parsed_ip.nil? || allowed_ip_version.nil? || parsed_ip.version == allowed_ip_version
180180
end
181181

182182
def add_rule_error(message, record, index)

spec/unit/messages/validators/security_group_rule_validator_spec.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,6 +1408,23 @@ def self.name
14081408
end
14091409
end
14101410

1411+
context 'icmpv6 protocol contains an IPv6 destination range' do
1412+
let(:rules) do
1413+
[
1414+
{
1415+
protocol: 'icmpv6',
1416+
destination: '2001:0db8::1-2001:0db8::ff',
1417+
type: -1,
1418+
code: 255
1419+
}
1420+
]
1421+
end
1422+
1423+
it 'is valid' do
1424+
expect(subject).to be_valid
1425+
end
1426+
end
1427+
14111428
context 'icmpv6 protocol contains a comma-delimited list of IPv6 destinations' do
14121429
before do
14131430
TestConfig.config[:security_groups][:enable_comma_delimited_destinations] = true

0 commit comments

Comments
 (0)