Nettacker/tests/core/test_ip.py

111 lines
2.9 KiB
Python

import json
from unittest.mock import patch
from nettacker.core.ip import (
generate_ip_range,
get_ip_range,
is_single_ipv4,
is_ipv4_range,
is_ipv4_cidr,
is_single_ipv6,
is_ipv6_range,
is_ipv6_cidr,
)
class Responses:
get_ip_range_valid_response = {
"objects": {
"object": [
{
"primary-key": {
"attribute": [
{"name": "inetnum", "value": "223.27.114.0 - 223.27.114.127"}
]
}
}
]
}
}
validate_ip_range = [f"223.27.114.{i}" for i in range(1, 127)]
get_ip_range_invalid_response = {
"link": {},
"errormessages": {
"errormessage": [
{
"severity": "Error",
"text": "ERROR:101: no entries found\n\nNo entries found in source %s.\n",
"args": [{"value": "RIPE"}],
}
]
},
}
def test_generate_ip_range():
assert generate_ip_range("192.168.1.0/30") == [
"192.168.1.0",
"192.168.1.1",
"192.168.1.2",
"192.168.1.3",
]
assert generate_ip_range("192.168.1.1-192.168.1.3") == [
"192.168.1.1",
"192.168.1.2",
"192.168.1.3",
]
@patch("requests.get")
def test_get_ip_range(mock_get):
test_ip = "223.27.115.10"
invalid_test_ip = "223.27.115.10.21"
mock_get.return_value.content = json.dumps(Responses.get_ip_range_valid_response).encode(
"utf-8"
)
assert get_ip_range(test_ip) == Responses.validate_ip_range
mock_get.return_value.content = json.dumps(Responses.get_ip_range_invalid_response).encode(
"utf-8"
)
assert get_ip_range(invalid_test_ip) == [invalid_test_ip]
def test_is_single_ipv4():
assert is_single_ipv4("127.0.0.1")
assert not is_single_ipv4("2001:0DC8:E004:0001:0000:0000:0000:F00A")
assert not is_single_ipv4("256.0.0.1")
def test_is_ipv4_range():
assert is_ipv4_range("192.168.1.0/24")
assert not is_ipv4_range("127.0.0.1")
assert not is_ipv4_range("192.168.1.0/100")
def test_is_ipv4_cidr():
assert is_ipv4_cidr("192.168.1.1-192.168.1.100")
assert not is_ipv4_cidr("192.168.1.1/24")
assert not is_ipv4_cidr("192.168.1.1-192.168.1.256")
def test_is_single_ipv6():
assert is_single_ipv6("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
assert not is_single_ipv6("127.0.0.1")
assert not is_single_ipv6("2001:db8:3333:4444:5555:6666:7777:88g8")
def test_is_ipv6_range():
assert is_ipv6_range("2001:db8::1-2001:db8::100")
assert not is_ipv6_range("2001:db8::/64")
assert not is_ipv6_range("2001:db8::1-2001:db8::1g0")
def test_is_ipv6_cidr():
assert is_ipv6_cidr("2001:db8:abcd:0012::/64")
assert not is_ipv6_cidr("2001:db8::/129")
assert not is_ipv6_cidr("2001:dg8:abcd:0012::/64")