safe progress
This commit is contained in:
190
tests/test_dictionary.py
Normal file
190
tests/test_dictionary.py
Normal file
@@ -0,0 +1,190 @@
|
||||
# Copyright 2020 Istvan Ruzman
|
||||
# SPDX-License-Identifier: MIT OR Apache-2.0
|
||||
|
||||
from io import StringIO
|
||||
|
||||
import pytest
|
||||
from pyrad3.dictionary import Dictionary, ParseError
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"filename", ["dictionaries/self_recursive", "dictionaries/mutual_recursive"]
|
||||
)
|
||||
def test_dictionary_recursion(filename):
|
||||
with pytest.raises(ParseError):
|
||||
Dictionary("tests/" + filename)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"line",
|
||||
[
|
||||
"$INCLUDE",
|
||||
"BEGIN-VENDOR",
|
||||
"END-VENDOR",
|
||||
"VENDOR",
|
||||
"VENDOR NAME",
|
||||
"ATTRIBUTE",
|
||||
"ATTRIBUTE NAME",
|
||||
"VALUE",
|
||||
"VALUE ATTRNAME",
|
||||
"VALUE ATTRNAME VALUENAME",
|
||||
],
|
||||
)
|
||||
def test_lines_missing_tokens(line):
|
||||
dictionary = StringIO(line)
|
||||
with pytest.raises(ParseError):
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"vendor",
|
||||
[
|
||||
"VENDOR test 1234",
|
||||
"VENDOR test 1234 format=1,1",
|
||||
"VENDOR test 1234 format=2,2",
|
||||
"VENDOR test 1234 format=1,2",
|
||||
"VENDOR test 1234 format=4,2",
|
||||
"VENDOR test 1234 format=4,0",
|
||||
"VENDOR WiMAX 1234 format=1,1,c",
|
||||
],
|
||||
)
|
||||
def test_valid_vendor_definitions(vendor):
|
||||
dictionary = StringIO(vendor)
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"vendor",
|
||||
[
|
||||
"VENDOR test 1234 1,1",
|
||||
"VENDOR test 1234 format=3,1",
|
||||
"VENDOR test 1234 format=2",
|
||||
"VENDOR test 1234 format=1,2,c",
|
||||
"VENDOR test 1234 format=1,9",
|
||||
"VENDOR test 1234 format=4,4 suffix",
|
||||
"VENDOR test 1234 format=a,b suffix",
|
||||
],
|
||||
)
|
||||
def test_invalid_vendor_definitions(vendor):
|
||||
dictionary = StringIO(vendor)
|
||||
with pytest.raises(ParseError):
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"number",
|
||||
[
|
||||
"ATTRIBUTE NAME 0x01 byte",
|
||||
"ATTRIBUTE NAME 0x0001 byte",
|
||||
"ATTRIBUTE NAME 0o123 byte",
|
||||
"ATTRIBUTE NAME 5 byte",
|
||||
],
|
||||
)
|
||||
def test_valid_attribute_numbers(number):
|
||||
dictionary = StringIO(number)
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"number",
|
||||
[
|
||||
"ATTRIBUTE NAME 1234 byte",
|
||||
"ATTRIBUTE NAME ABCD byte",
|
||||
"ATTRIBUTE NAME -1 byte",
|
||||
],
|
||||
)
|
||||
def test_invalid_attribute_numbers(number):
|
||||
dictionary = StringIO(number)
|
||||
with pytest.raises(ParseError):
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("type_length", [1, 2, 4])
|
||||
def test_attribute_number_limits(type_length):
|
||||
too_big = 2 ** (8 * type_length)
|
||||
max_value = too_big - 1
|
||||
dictionary = StringIO(
|
||||
f"VENDOR TEST 1234 format={type_length},1\n"
|
||||
"BEGIN-VENDOR TEST\n"
|
||||
f"ATTRIBUTE TEST {max_value} byte\n"
|
||||
"END-VENDOR TEST\n"
|
||||
)
|
||||
Dictionary("", dictionary)
|
||||
dictionary = StringIO(
|
||||
f"VENDOR TEST 1234 format={type_length},1\n"
|
||||
"BEGIN-VENDOR TEST\n"
|
||||
f"ATTRIBUTE TEST {too_big} byte\n"
|
||||
"END-VENDOR TEST\n"
|
||||
)
|
||||
with pytest.raises(ParseError):
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"value_definition",
|
||||
[
|
||||
"VALUE TEST-ATTRIBUTE TEST-VALUE 1",
|
||||
"VALUE TEST-ATTRIBUTE TEST-VALUE 0x1",
|
||||
"VALUE TEST-ATTRIBUTE TEST-VALUE 0o1",
|
||||
],
|
||||
)
|
||||
def test_value_definition(value_definition):
|
||||
dictionary = StringIO(
|
||||
"\n".join(["ATTRIBUTE TEST-ATTRIBUTE 1 byte", value_definition])
|
||||
)
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"value_num, attr_type",
|
||||
[
|
||||
(0, "byte"),
|
||||
(255, "byte"),
|
||||
(0, "short"),
|
||||
(2 ** 16 - 1, "short"),
|
||||
(0, "integer"),
|
||||
(2 ** 32 - 1, "integer"),
|
||||
((-(2 ** 31)), "signed"),
|
||||
(2 ** 31 - 1, "signed"),
|
||||
(0, "integer64"),
|
||||
(2 ** 64 - 1, "integer64"),
|
||||
],
|
||||
)
|
||||
def test_value_number_within_limit(value_num, attr_type):
|
||||
dictionary = StringIO(
|
||||
"\n".join(
|
||||
[
|
||||
f"ATTRIBUTE TEST-ATTRIBUTE 1 {attr_type}",
|
||||
f"VALUE TEST-ATTRIBUTE TEST-VALUE {value_num}",
|
||||
]
|
||||
)
|
||||
)
|
||||
Dictionary("", dictionary)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"value_num, attr_type",
|
||||
[
|
||||
(-1, "byte"),
|
||||
(256, "byte"),
|
||||
(-1, "short"),
|
||||
(2 ** 16, "short"),
|
||||
(-1, "integer"),
|
||||
(2 ** 32, "integer"),
|
||||
(2 ** 31, "signed"),
|
||||
((-(2 ** 31)) - 1, "signed"),
|
||||
(-1, "integer64"),
|
||||
(2 ** 64, "integer64"),
|
||||
],
|
||||
)
|
||||
def test_value_number_out_of_limit(value_num, attr_type):
|
||||
dictionary = StringIO(
|
||||
"\n".join(
|
||||
[
|
||||
f"ATTRIBUTE TEST-ATTRIBUTE 1 {attr_type}",
|
||||
f"VALUE TEST-ATTRIBUTE TEST-VALUE {value_num}",
|
||||
]
|
||||
)
|
||||
)
|
||||
with pytest.raises(ParseError):
|
||||
Dictionary("", dictionary)
|
||||
Reference in New Issue
Block a user