testprotocols 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- testprotocols/__init__.py +217 -0
- testprotocols/aftr_gateway.py +22 -0
- testprotocols/appliance_nat.py +52 -0
- testprotocols/appliance_uplinks.py +32 -0
- testprotocols/appliance_vlans.py +50 -0
- testprotocols/arp_client.py +26 -0
- testprotocols/bgp.py +55 -0
- testprotocols/conntrack.py +147 -0
- testprotocols/content_filtering.py +47 -0
- testprotocols/device_lifecycle.py +49 -0
- testprotocols/device_management.py +50 -0
- testprotocols/devices/__init__.py +46 -0
- testprotocols/devices/base.py +40 -0
- testprotocols/devices/client.py +133 -0
- testprotocols/devices/cpe.py +66 -0
- testprotocols/devices/infra.py +62 -0
- testprotocols/devices/sdwan.py +97 -0
- testprotocols/devices/switch.py +115 -0
- testprotocols/devices/traffic.py +53 -0
- testprotocols/devices/voice.py +69 -0
- testprotocols/devices/wan.py +60 -0
- testprotocols/dhcp_client.py +30 -0
- testprotocols/dhcp_server.py +23 -0
- testprotocols/discovery.py +20 -0
- testprotocols/dns_client.py +23 -0
- testprotocols/file_transfer.py +22 -0
- testprotocols/firewall.py +121 -0
- testprotocols/firewall_zones.py +133 -0
- testprotocols/first_hop_security.py +52 -0
- testprotocols/gateway_redundancy.py +29 -0
- testprotocols/http_client.py +36 -0
- testprotocols/http_server.py +22 -0
- testprotocols/hw_console.py +48 -0
- testprotocols/infra_controller.py +28 -0
- testprotocols/interface_dhcp.py +30 -0
- testprotocols/ip_interface.py +62 -0
- testprotocols/ip_routing.py +57 -0
- testprotocols/iperf_client.py +47 -0
- testprotocols/iperf_generator.py +42 -0
- testprotocols/iperf_server.py +41 -0
- testprotocols/l3_firewall.py +74 -0
- testprotocols/l7_firewall.py +32 -0
- testprotocols/link_aggregation.py +24 -0
- testprotocols/mac_table.py +20 -0
- testprotocols/models/__init__.py +304 -0
- testprotocols/models/dhcp.py +28 -0
- testprotocols/models/firewall.py +197 -0
- testprotocols/models/impairment.py +18 -0
- testprotocols/models/l2_common.py +53 -0
- testprotocols/models/multicast.py +22 -0
- testprotocols/models/networking.py +50 -0
- testprotocols/models/packets.py +21 -0
- testprotocols/models/qoe.py +31 -0
- testprotocols/models/radius.py +63 -0
- testprotocols/models/sdwan_appliance.py +637 -0
- testprotocols/models/switch.py +297 -0
- testprotocols/models/switch_routing.py +122 -0
- testprotocols/models/tr069.py +35 -0
- testprotocols/models/traffic.py +29 -0
- testprotocols/models/wan_edge.py +116 -0
- testprotocols/models/wifi.py +183 -0
- testprotocols/multicast_client.py +20 -0
- testprotocols/nat.py +87 -0
- testprotocols/netem_controller.py +42 -0
- testprotocols/network_endpoint.py +32 -0
- testprotocols/network_probe.py +27 -0
- testprotocols/nmap_scanner.py +27 -0
- testprotocols/ntp_client.py +26 -0
- testprotocols/ntp_config.py +25 -0
- testprotocols/ospf.py +24 -0
- testprotocols/packet_filter.py +144 -0
- testprotocols/pcap_capture.py +39 -0
- testprotocols/pdu_controller.py +26 -0
- testprotocols/port_poe.py +25 -0
- testprotocols/port_security.py +25 -0
- testprotocols/port_status.py +23 -0
- testprotocols/py.typed +0 -0
- testprotocols/qoe_browser.py +62 -0
- testprotocols/radius_client.py +78 -0
- testprotocols/radius_server.py +130 -0
- testprotocols/routed_interfaces.py +29 -0
- testprotocols/router.py +53 -0
- testprotocols/routing_read.py +22 -0
- testprotocols/sdwan_policy_manager.py +64 -0
- testprotocols/sip_phone.py +230 -0
- testprotocols/sip_server.py +205 -0
- testprotocols/site_to_site_vpn.py +61 -0
- testprotocols/snmp_client.py +17 -0
- testprotocols/spanning_tree.py +37 -0
- testprotocols/static_routes.py +47 -0
- testprotocols/storm_control.py +24 -0
- testprotocols/streaming_server.py +32 -0
- testprotocols/switch_acl.py +29 -0
- testprotocols/switch_ports.py +28 -0
- testprotocols/switch_qos.py +33 -0
- testprotocols/switch_vlans.py +34 -0
- testprotocols/syslog_config.py +31 -0
- testprotocols/tftp_server.py +22 -0
- testprotocols/threat_prevention.py +60 -0
- testprotocols/tr069_client.py +47 -0
- testprotocols/tr069_server.py +151 -0
- testprotocols/traffic_shaping.py +54 -0
- testprotocols/upnp_client.py +37 -0
- testprotocols/vlan_client.py +22 -0
- testprotocols/wan_link_admin.py +34 -0
- testprotocols/wifi_bss.py +197 -0
- testprotocols/wifi_client.py +72 -0
- testprotocols/wifi_mesh.py +259 -0
- testprotocols/wifi_onboarding.py +105 -0
- testprotocols/wifi_radio.py +153 -0
- testprotocols/wifi_rf.py +78 -0
- testprotocols/wifi_stations.py +59 -0
- testprotocols/wifi_transitions.py +112 -0
- testprotocols-0.1.0.dist-info/METADATA +29 -0
- testprotocols-0.1.0.dist-info/RECORD +119 -0
- testprotocols-0.1.0.dist-info/WHEEL +5 -0
- testprotocols-0.1.0.dist-info/licenses/LICENSE +201 -0
- testprotocols-0.1.0.dist-info/licenses/NOTICE +11 -0
- testprotocols-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Quality of Experience (QoE) result and measurement specification models."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class QoEResult:
|
|
10
|
+
"""Holds QoE metrics measured during a test (latency, jitter, MOS, etc.)."""
|
|
11
|
+
|
|
12
|
+
ttfb_ms: float | None = None
|
|
13
|
+
load_time_ms: float | None = None
|
|
14
|
+
startup_time_ms: float | None = None
|
|
15
|
+
rebuffer_ratio: float | None = None
|
|
16
|
+
latency_ms: float | None = None
|
|
17
|
+
jitter_ms: float | None = None
|
|
18
|
+
packet_loss_pct: float | None = None
|
|
19
|
+
mos_score: float | None = None
|
|
20
|
+
protocol: str | None = None
|
|
21
|
+
success: bool = True
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass
|
|
25
|
+
class MeasurementSpec:
|
|
26
|
+
"""Holds parameters controlling how a QoE measurement is performed."""
|
|
27
|
+
|
|
28
|
+
tool: str = "browser"
|
|
29
|
+
completion: str = "networkidle"
|
|
30
|
+
timeout_ms: int = 30000
|
|
31
|
+
duration_s: int | None = None
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""RADIUS-domain data models."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class RadiusServerConfig:
|
|
10
|
+
"""Configuration of a registered RADIUS server, as seen from the client side.
|
|
11
|
+
|
|
12
|
+
*secret* is intentionally absent — most vendors do not expose it on read,
|
|
13
|
+
and tests should not depend on retrieving it. To verify, re-set it via
|
|
14
|
+
``RadiusClient.update_server``.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
name: str
|
|
18
|
+
address: str
|
|
19
|
+
port: int # auth port
|
|
20
|
+
acct_port: int | None # accounting port, or None if disabled
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class RadiusUser:
|
|
25
|
+
"""A provisioned RADIUS user, as seen from the server side.
|
|
26
|
+
|
|
27
|
+
*password* is intentionally absent — same reasoning as RadiusServerConfig.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
username: str
|
|
31
|
+
eap_methods: list[str] = field(default_factory=list[str])
|
|
32
|
+
attributes: dict[str, str] = field(default_factory=dict[str, str])
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class RadiusSession:
|
|
37
|
+
"""An active NAS session as tracked by the RADIUS server."""
|
|
38
|
+
|
|
39
|
+
session_id: str # Acct-Session-Id assigned by the NAS
|
|
40
|
+
username: str
|
|
41
|
+
nas_address: str # IP of the NAS (the AP / switch)
|
|
42
|
+
nas_port: str | None # NAS-Port-Id, if reported
|
|
43
|
+
calling_station_id: str # client MAC (canonical lowercase colon-separated)
|
|
44
|
+
called_station_id: str # AP BSSID + SSID
|
|
45
|
+
start_time: float # Unix timestamp
|
|
46
|
+
framed_ip_address: str | None # IP assigned to the client, if known to the server
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class RadiusAccountingRecord:
|
|
51
|
+
"""A single accounting log entry."""
|
|
52
|
+
|
|
53
|
+
timestamp: float # Unix timestamp the record was received
|
|
54
|
+
session_id: str
|
|
55
|
+
username: str
|
|
56
|
+
nas_address: str
|
|
57
|
+
record_type: str # "Start", "Interim-Update", "Stop"
|
|
58
|
+
session_time: int | None # seconds, present on Interim/Stop
|
|
59
|
+
input_octets: int | None
|
|
60
|
+
output_octets: int | None
|
|
61
|
+
input_packets: int | None
|
|
62
|
+
output_packets: int | None
|
|
63
|
+
terminate_cause: str | None # present on Stop only
|