Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions tests/core/test_ip.py
Original file line number Diff line number Diff line change
@@ -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")