diff --git a/tests/core/test_ip.py b/tests/core/test_ip.py new file mode 100644 index 000000000..4b436166f --- /dev/null +++ b/tests/core/test_ip.py @@ -0,0 +1,110 @@ +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")