Init Commit: Moved bproto to seperate repo

This commit is contained in:
AlexanderHD27
2025-04-14 14:43:03 +02:00
commit 45bfc724fc
125 changed files with 10822 additions and 0 deletions

View File

@@ -0,0 +1,181 @@
import sys
sys.path.append('src/')
from protocol_components.dtypes import BprotoFieldBaseType
from nameHandling.base import ComponentName, NameStyleBproto
from protocol_components.message import FactoryMessage
from protocol_components.enumeration import FactoryEnumeration, Enumeration
from protocol_components.bitfields import FactoryBitfield, Bitfield
from protocol_components.protocolFactory import FactoryProtocolDefition
from protocol_components.field import FactoryField, Field, FieldEnum, FieldBitfield, FieldEnumRef, FieldBitfieldRef
from errors import BprotoUnresolvedReferenceError, BprotoAlreadyDefinedError
from nameHandling.resolver import ProtocolReferenceResolver
def test_protocol_factory():
factory = FactoryProtocolDefition()
factory.add_message(FactoryMessage().assemble("Message1", 42))
factory.add_message(FactoryMessage().assemble("Message2", 43))
message_with_fields_factory = FactoryMessage()
message_with_fields_factory.add_field(FactoryField().assemble("field1", 0, "uint64", 1, None))
message_with_fields_factory.add_field(FactoryField().assemble("enum_ref", 1, BprotoFieldBaseType.ENUM, 1, "Enum1"))
message_with_fields_factory.add_field(FactoryField().assemble("bitfield_ref", 2, BprotoFieldBaseType.BITFIELD, 1, "Bitfield2"))
factory.add_message(
message_with_fields_factory.assemble("Message3", 44)
)
factory.add_enum(FactoryEnumeration().assemble("Enum1"))
factory.add_enum(FactoryEnumeration().assemble("Enum2"))
factory.add_enum(FactoryEnumeration().assemble("Enum3"))
factory.add_bitfield(FactoryBitfield().assemble("Bitfield1"))
factory.add_bitfield(FactoryBitfield().assemble("Bitfield2"))
factory.add_bitfield(FactoryBitfield().assemble("Bitfield3"))
protocol = factory.assemble("TESTPROTOCOL", 1)
assert protocol.name.name_parts == ["testprotocol"]
assert isinstance(protocol.name, ComponentName)
assert protocol.version == 1
assert protocol.messages == {
NameStyleBproto.fromStr("Message1"): factory.messages.get(NameStyleBproto.fromStr("Message1")),
NameStyleBproto.fromStr("Message2"): factory.messages.get(NameStyleBproto.fromStr("Message2")),
NameStyleBproto.fromStr("Message3"): factory.messages.get(NameStyleBproto.fromStr("Message3"))
}
assert protocol.enums == {
NameStyleBproto.fromStr("Enum1"): factory.enums.get(NameStyleBproto.fromStr("Enum1")),
NameStyleBproto.fromStr("Enum2"): factory.enums.get(NameStyleBproto.fromStr("Enum2")),
NameStyleBproto.fromStr("Enum3"): factory.enums.get(NameStyleBproto.fromStr("Enum3"))
}
assert protocol.bitfields == {
NameStyleBproto.fromStr("Bitfield1"): factory.bitfields.get(NameStyleBproto.fromStr("Bitfield1")),
NameStyleBproto.fromStr("Bitfield2"): factory.bitfields.get(NameStyleBproto.fromStr("Bitfield2")),
NameStyleBproto.fromStr("Bitfield3"): factory.bitfields.get(NameStyleBproto.fromStr("Bitfield3"))
}
# Check if references are resolved works
assert isinstance(protocol.messages.get(NameStyleBproto.fromStr("Message3")).fields.get(NameStyleBproto.fromStr("enum_ref")), FieldEnum)
assert isinstance(protocol.messages.get(NameStyleBproto.fromStr("Message3")).fields.get(NameStyleBproto.fromStr("bitfield_ref")), FieldBitfield)
def test_protocol_resolve_refernces():
enum1 = FactoryEnumeration().assemble("Enum1")
bitfield1 = FactoryBitfield().assemble("Bitfield1")
message1Factory = FactoryMessage()
message1Factory.add_field(FactoryField().assemble("field1", 0, "uint64", 1, None))
message1Factory.add_field(FactoryField().assemble("enum_field", 1, BprotoFieldBaseType.ENUM, 1, enum1))
message1Factory.add_field(FactoryField().assemble("enum_ref_field", 2, BprotoFieldBaseType.ENUM, 1, "Enum1"))
message1Factory.add_field(FactoryField().assemble("bitfield_field", 3, BprotoFieldBaseType.BITFIELD, 1, bitfield1))
message1Factory.add_field(FactoryField().assemble("bitfield_ref_field", 4, BprotoFieldBaseType.BITFIELD, 1, "Bitfield1"))
message1 = message1Factory.assemble("Message1", 42)
# Check if message is correctly assembled
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("field1")), Field)
assert message1.fields.get(NameStyleBproto.fromStr("field1")).type == BprotoFieldBaseType.UINT64
assert message1.fields.get(NameStyleBproto.fromStr("field1")).array_size == 1
assert message1.fields.get(NameStyleBproto.fromStr("field1")).ref is None
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("field1")).ref, type(None))
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("enum_field")), FieldEnum)
assert message1.fields.get(NameStyleBproto.fromStr("enum_field")).type == BprotoFieldBaseType.ENUM
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("enum_field")).enum, Enumeration)
assert message1.fields.get(NameStyleBproto.fromStr("enum_field")).enum == enum1
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("enum_ref_field")), FieldEnumRef)
assert message1.fields.get(NameStyleBproto.fromStr("enum_ref_field")).type == BprotoFieldBaseType.ENUM
assert message1.fields.get(NameStyleBproto.fromStr("enum_ref_field")).ref == "Enum1"
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("bitfield_field")), FieldBitfield)
assert message1.fields.get(NameStyleBproto.fromStr("bitfield_field")).type == BprotoFieldBaseType.BITFIELD
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("bitfield_field")).bitfield, Bitfield)
assert message1.fields.get(NameStyleBproto.fromStr("bitfield_field")).bitfield == bitfield1
assert isinstance(message1.fields.get(NameStyleBproto.fromStr("bitfield_ref_field")), FieldBitfieldRef)
assert message1.fields.get(NameStyleBproto.fromStr("bitfield_ref_field")).type == BprotoFieldBaseType.BITFIELD
assert message1.fields.get(NameStyleBproto.fromStr("bitfield_ref_field")).ref == "Bitfield1"
factory = FactoryProtocolDefition()
factory.add_message(message1)
factory.add_enum(enum1)
factory.add_bitfield(bitfield1)
protocol = factory.assemble("TestProtocol", 1)
# Check if references are resolved works
resolver = ProtocolReferenceResolver(protocol)
resolver.resolve_refrence_protocol()
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("enum_field")).type == BprotoFieldBaseType.ENUM
assert isinstance(protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("enum_field")), FieldEnum)
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("enum_field")).enum == enum1
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("enum_ref_field")).type == BprotoFieldBaseType.ENUM
assert isinstance(protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("enum_ref_field")), FieldEnum)
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("enum_ref_field")).enum == enum1
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("bitfield_field")).type == BprotoFieldBaseType.BITFIELD
assert isinstance(protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("bitfield_field")), FieldBitfield)
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("bitfield_field")).bitfield == bitfield1
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("bitfield_ref_field")).type == BprotoFieldBaseType.BITFIELD
assert isinstance(protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("bitfield_ref_field")), FieldBitfield)
assert protocol.messages.get(NameStyleBproto.fromStr("Message1")).fields.get(NameStyleBproto.fromStr("bitfield_ref_field")).bitfield == bitfield1
def test_protocol_resolve_refernces_unknown_refernces():
message1Factory = FactoryMessage()
message1Factory.add_field(FactoryField().assemble("field1", 0, "uint64", 1, None))
message1Factory.add_field(FactoryField().assemble("enum_ref_field", 1, BprotoFieldBaseType.ENUM, 1, "Enum1"))
message1Factory.add_field(FactoryField().assemble("bitfield_ref_field", 2, BprotoFieldBaseType.BITFIELD, 1, "Bitfield1",))
message1 = message1Factory.assemble("Message1", 42)
factory = FactoryProtocolDefition()
factory.add_message(message1)
try:
factory.assemble("TestProtocol", 1)
assert False
except Exception as e:
assert isinstance(e, BprotoUnresolvedReferenceError)
try:
factory.assemble("TestProtocol", 1)
assert False
except Exception as e:
assert isinstance(e, BprotoUnresolvedReferenceError)
def test_protocol_factory_already_define_error():
factory = FactoryProtocolDefition()
factory.add_message(FactoryMessage().assemble("Message1", 42))
try:
factory.add_message(FactoryMessage().assemble("Message1", 42))
factory.assemble("A", 1)
assert False
except Exception as e:
assert isinstance(e, BprotoAlreadyDefinedError)
factory = FactoryProtocolDefition()
factory.add_enum(FactoryEnumeration().assemble("Enum1"))
try:
factory.assemble("A", 1)
factory.add_enum(FactoryEnumeration().assemble("Enum1"))
assert False
except Exception as e:
assert isinstance(e, BprotoAlreadyDefinedError)
factory = FactoryProtocolDefition()
factory.add_bitfield(FactoryBitfield().assemble("Bitfield1"))
try:
factory.add_bitfield(FactoryBitfield().assemble("Bitfield1"))
factory.assemble("A", 1)
assert False
except Exception as e:
assert isinstance(e, BprotoAlreadyDefinedError)