Skip to content

Commit db9d5da

Browse files
committed
[tests][twamporch] TWAMP Light orchagent implementation. (sonic-net#2927)
* add TWAMP Light vstest cases Signed-off-by: Xiaodong Hu <[email protected]>
1 parent 55f201a commit db9d5da

File tree

3 files changed

+439
-0
lines changed

3 files changed

+439
-0
lines changed

tests/conftest.py

+10
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from dvslib import dvs_policer
2929
from dvslib import dvs_hash
3030
from dvslib import dvs_switch
31+
from dvslib import dvs_twamp
3132

3233
from buffer_model import enable_dynamic_buffer
3334

@@ -1942,8 +1943,17 @@ def dvs_hash_manager(request, dvs):
19421943
dvs.get_config_db())
19431944

19441945
@pytest.fixture(scope="class")
1946+
<<<<<<< HEAD
19451947
def dvs_switch_manager(request, dvs):
19461948
request.cls.dvs_switch = dvs_switch.DVSSwitch(dvs.get_asic_db())
1949+
=======
1950+
def dvs_twamp_manager(request, dvs):
1951+
request.cls.dvs_twamp = dvs_twamp.DVSTwamp(dvs.get_asic_db(),
1952+
dvs.get_config_db(),
1953+
dvs.get_state_db(),
1954+
dvs.get_counters_db(),
1955+
dvs.get_app_db())
1956+
>>>>>>> [tests][twamporch] TWAMP Light orchagent implementation. (#2927)
19471957

19481958
##################### DPB fixtures ###########################################
19491959
def create_dpb_config_file(dvs):

tests/dvslib/dvs_twamp.py

+96
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
class DVSTwamp(object):
2+
def __init__(self, adb, cdb, sdb, cntrdb, appdb):
3+
self.asic_db = adb
4+
self.config_db = cdb
5+
self.state_db = sdb
6+
self.counters_db = cntrdb
7+
self.app_db = appdb
8+
9+
def create_twamp_light_session_sender_packet_count(self, name, sip, sport, dip, dport, packet_count=100, tx_interval=100, timeout=5, stats_interval=None):
10+
twamp_light_entry = {"mode": "LIGHT",
11+
"role": "SENDER",
12+
"src_ip": sip,
13+
"src_udp_port": sport,
14+
"dst_ip": dip,
15+
"dst_udp_port": dport,
16+
"packet_count": packet_count,
17+
"tx_interval": tx_interval,
18+
"timeout": timeout
19+
}
20+
if stats_interval:
21+
twamp_light_entry["statistics_interval"] = str(stats_interval)
22+
else:
23+
twamp_light_entry["statistics_interval"] = str(int(packet_count) * int(tx_interval) + int(timeout)*1000)
24+
self.config_db.create_entry("TWAMP_SESSION", name, twamp_light_entry)
25+
26+
def create_twamp_light_session_sender_continuous(self, name, sip, sport, dip, dport, monitor_time=0, tx_interval=100, timeout=5, stats_interval=None):
27+
twamp_light_entry = {"mode": "LIGHT",
28+
"role": "SENDER",
29+
"src_ip": sip,
30+
"src_udp_port": sport,
31+
"dst_ip": dip,
32+
"dst_udp_port": dport,
33+
"monitor_time": monitor_time,
34+
"tx_interval": tx_interval,
35+
"timeout": timeout
36+
}
37+
if stats_interval:
38+
twamp_light_entry["statistics_interval"] = str(stats_interval)
39+
else:
40+
twamp_light_entry["statistics_interval"] = str(int(monitor_time)*1000)
41+
self.config_db.create_entry("TWAMP_SESSION", name, twamp_light_entry)
42+
43+
def create_twamp_light_session_reflector(self, name, sip, sport, dip, dport):
44+
twamp_light_entry = {"mode": "LIGHT",
45+
"role": "REFLECTOR",
46+
"src_ip": sip,
47+
"src_udp_port": sport,
48+
"dst_ip": dip,
49+
"dst_udp_port": dport
50+
}
51+
self.config_db.create_entry("TWAMP_SESSION", name, twamp_light_entry)
52+
53+
def start_twamp_light_sender(self, name):
54+
twamp_light_entry = {"admin_state": "enabled"}
55+
self.config_db.create_entry("TWAMP_SESSION", name, twamp_light_entry)
56+
57+
def stop_twamp_light_sender(self, name):
58+
twamp_light_entry = {"admin_state": "disabled"}
59+
self.config_db.create_entry("TWAMP_SESSION", name, twamp_light_entry)
60+
61+
def remove_twamp_light_session(self, name):
62+
self.config_db.delete_entry("TWAMP_SESSION", name)
63+
64+
def get_twamp_light_session_status(self, name):
65+
return self.get_twamp_light_session_state(name)["status"]
66+
67+
def get_twamp_light_session_state(self, name):
68+
tbl = swsscommon.Table(self.sdb, "TWAMP_SESSION_TABLE")
69+
(status, fvs) = tbl.get(name)
70+
assert status == True
71+
assert len(fvs) > 0
72+
return { fv[0]: fv[1] for fv in fvs }
73+
74+
def verify_session_status(self, name, status="active", expected=1):
75+
self.state_db.wait_for_n_keys("TWAMP_SESSION_TABLE", expected)
76+
if expected:
77+
self.state_db.wait_for_field_match("TWAMP_SESSION_TABLE", name, {"status": status})
78+
79+
def verify_no_mirror(self):
80+
self.config_db.wait_for_n_keys("TWAMP_SESSION", 0)
81+
self.state_db.wait_for_n_keys("TWAMP_SESSION_TABLE", 0)
82+
83+
def verify_session_asic_db(self, dvs, name, asic_table=None, expected=1):
84+
session_oids = self.asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_TWAMP_SESSION", expected)
85+
session_oid = session_oids[0]
86+
dvs.asic_db.wait_for_field_match("ASIC_STATE:SAI_OBJECT_TYPE_TWAMP_SESSION", session_oid, asic_table)
87+
88+
def verify_session_counter_db(self, dvs, name, counter_table=None, expected=1, expected_item=1):
89+
fvs = dvs.counters_db.get_entry("COUNTERS_TWAMP_SESSION_NAME_MAP", "")
90+
fvs = dict(fvs)
91+
total_key = self.counters_db.db_connection.keys("COUNTERS:{}".format(fvs[name]))
92+
assert len(total_key) == expected, "TWAMP Light counter entries are not available in counter db"
93+
dvs.counters_db.wait_for_field_match("COUNTERS", fvs[name], counter_table)
94+
item_keys = self.counters_db.db_connection.keys("COUNTERS:{}:INDEX:*".format(fvs[name]))
95+
assert len(item_keys) == expected_item, "TWAMP Light counter entries are not available in counter db"
96+

0 commit comments

Comments
 (0)