db_query / tests /test_ue_capability_ca_assessment.py
DavMelchi's picture
feat: add 3gpp ue capability parser with volte assessment
7b6d659
from queries.process_ue_capability import parse_uecap_text
CA_TEXT = """
08:33:50.000 LTE RRC Signaling
{
ueCapabilityInformation
{
ueCapabilityInformation-r8
{
uE-EUTRA-Capability
{
UE-EUTRA-Capability
{
accessStratumRelease
{
rel15
}
nonCriticalExtension
{
rf-Parameters-v1020
{
supportedBandCombination-r10
{
BandCombinationParameters-r10 #1
{
BandParameters-r10 #1
{
bandEUTRA-r10
{
3
}
bandParametersDL-r10
{
CA-MIMO-ParametersDL-r10 #1
{
ca-BandwidthClassDL-r10
{
a
}
}
}
}
BandParameters-r10 #2
{
bandEUTRA-r10
{
7
}
bandParametersDL-r10
{
CA-MIMO-ParametersDL-r10 #1
{
ca-BandwidthClassDL-r10
{
c
}
}
}
}
}
}
}
}
}
}
}
}
}
"""
def test_ca_assessment_normalizes_combo_string() -> None:
sheets = parse_uecap_text(CA_TEXT, source_name="ca_sample.txt")
assert not sheets["CA_Assessment"].empty
row = sheets["CA_Assessment"].iloc[0].to_dict()
assert row["combo_norm"] == "B3A+B7C"
assert row["combo_type"] == "LTE CA"
assert row["consistency_status"] in {"valid", "partially_valid"}
def test_benchmark_diff_sheet_is_generated_when_reference_is_provided() -> None:
sheets = parse_uecap_text(
CA_TEXT,
source_name="ca_sample.txt",
benchmark_combos=["B7C+B3A", "B1A+B3A"],
)
assert not sheets["Benchmark_CA_Diff"].empty
statuses = set(sheets["Benchmark_CA_Diff"]["status"].unique().tolist())
assert "exact_match" in statuses
assert "missing_in_log" in statuses
assert "missing_in_benchmark" not in statuses
CA_TEXT_WITH_EMPTY_COMBO = """
08:33:50.000 LTE RRC Signaling
{
ueCapabilityInformation
{
ueCapabilityInformation-r8
{
uE-EUTRA-Capability
{
UE-EUTRA-Capability
{
accessStratumRelease
{
rel15
}
nonCriticalExtension
{
rf-Parameters-v1020
{
supportedBandCombination-r10
{
BandCombinationParameters-r10 #1
{
BandParameters-r10 #1
{
bandEUTRA-r10
{
3
}
bandParametersDL-r10
{
CA-MIMO-ParametersDL-r10 #1
{
ca-BandwidthClassDL-r10
{
a
}
}
}
}
}
BandCombinationParameters-r10 #2
{
}
}
}
}
}
}
}
}
}
"""
def test_summary_normalized_count_excludes_empty_combo_norm() -> None:
sheets = parse_uecap_text(CA_TEXT_WITH_EMPTY_COMBO, source_name="ca_empty_combo.txt")
summary = sheets["Summary"].iloc[0].to_dict()
assert int(summary["ca_combo_normalized_count"]) == 1