1
+ from swsscommon import swsscommon
2
+ import typing
3
+ import pytest
4
+
5
+ @pytest.fixture(scope='module')
6
+ def dash_db(dvs):
7
+ return DashDB(dvs)
8
+
9
+ def to_string(value):
10
+ if isinstance(value, bool):
11
+ return "true" if value else "false"
12
+ elif isinstance(value, bytes):
13
+ return value
14
+ return str(value)
15
+
16
+ class ProducerStateTable(swsscommon.ProducerStateTable):
17
+ def __setitem__(self, key: str, pairs: typing.Union[dict, list, tuple]):
18
+ pairs_str = []
19
+ if isinstance(pairs, dict):
20
+ pairs = pairs.items()
21
+ for k, v in pairs:
22
+ pairs_str.append((to_string(k), to_string(v)))
23
+ self.set(key, pairs_str)
24
+
25
+ def __delitem__(self, key: str):
26
+ self.delete(str(key))
27
+
28
+
29
+ class Table(swsscommon.Table):
30
+ def __getitem__(self, key: str):
31
+ exists, result = self.get(str(key))
32
+ if not exists:
33
+ return None
34
+ else:
35
+ return dict(result)
36
+
37
+ def get_keys(self):
38
+ return self.getKeys()
39
+
40
+ def get_newly_created_oid(self, old_oids):
41
+ new_oids = self.asic_db.wait_for_n_keys(self, len(old_oids) + 1)
42
+ oid = [ids for ids in new_oids if ids not in old_oids]
43
+ return oid[0]
44
+
45
+
46
+ class DashDB(object):
47
+ def __init__(self, dvs):
48
+ self.dvs = dvs
49
+ self.app_dash_routing_type_table = ProducerStateTable(
50
+ self.dvs.get_app_db().db_connection, "DASH_ROUTING_TYPE_TABLE")
51
+ self.app_dash_appliance_table = ProducerStateTable(
52
+ self.dvs.get_app_db().db_connection, "DASH_APPLIANCE_TABLE")
53
+ self.asic_direction_lookup_table = Table(
54
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_DIRECTION_LOOKUP_ENTRY")
55
+ self.asic_vip_table = Table(
56
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_VIP_ENTRY")
57
+ self.app_dash_vnet_table = ProducerStateTable(
58
+ self.dvs.get_app_db().db_connection, "DASH_VNET_TABLE")
59
+ self.asic_dash_vnet_table = Table(
60
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_VNET")
61
+ self.app_dash_eni_table = ProducerStateTable(
62
+ self.dvs.get_app_db().db_connection, "DASH_ENI_TABLE")
63
+ self.asic_eni_table = Table(
64
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_ENI")
65
+ self.asic_eni_ether_addr_map_table = Table(
66
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_ENI_ETHER_ADDRESS_MAP_ENTRY")
67
+ self.app_dash_vnet_map_table = ProducerStateTable(
68
+ self.dvs.get_app_db().db_connection, "DASH_VNET_MAPPING_TABLE")
69
+ self.asic_dash_outbound_ca_to_pa_table = Table(
70
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_OUTBOUND_CA_TO_PA_ENTRY")
71
+ self.asic_pa_validation_table = Table(
72
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_PA_VALIDATION_ENTRY")
73
+ self.app_dash_route_table = ProducerStateTable(
74
+ self.dvs.get_app_db().db_connection, "DASH_ROUTE_TABLE")
75
+ self.app_dash_route_rule_table = ProducerStateTable(
76
+ self.dvs.get_app_db().db_connection, "DASH_ROUTE_RULE_TABLE")
77
+ self.asic_outbound_routing_table = Table(
78
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_OUTBOUND_ROUTING_ENTRY")
79
+ self.asic_inbound_routing_rule_table = Table(
80
+ self.dvs.get_asic_db().db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_INBOUND_ROUTING_ENTRY")
81
+
82
+ def create_appliance(self, appliance_id, attr_maps: dict):
83
+ self.app_dash_appliance_table[str(appliance_id)] = attr_maps
84
+
85
+ def remove_appliance(self, appliance_id):
86
+ del self.app_dash_appliance_table[str(appliance_id)]
87
+
88
+ def create_vnet(self, vnet, attr_maps: dict):
89
+ self.app_dash_vnet_table[str(vnet)] = attr_maps
90
+
91
+ def remove_vnet(self, vnet):
92
+ del self.app_dash_vnet_table[str(vnet)]
93
+
94
+ def create_eni(self, eni, attr_maps: dict):
95
+ self.app_dash_eni_table[str(eni)] = attr_maps
96
+
97
+ def remove_eni(self, eni):
98
+ del self.app_dash_eni_table[str(eni)]
99
+
100
+ def create_vnet_map(self, vnet, ip, attr_maps: dict):
101
+ self.app_dash_vnet_map_table[str(vnet) + ":" + str(ip)] = attr_maps
102
+
103
+ def remove_vnet_map(self, vnet, ip):
104
+ del self.app_dash_vnet_map_table[str(vnet) + ":" + str(ip)]
105
+
106
+ def create_outbound_routing(self, mac_string, ip, attr_maps: dict):
107
+ self.app_dash_route_table[str(mac_string) + ":" + str(ip)] = attr_maps
108
+
109
+ def remove_outbound_routing(self, mac_string, ip):
110
+ del self.app_dash_route_table[str(mac_string) + ":" + str(ip)]
111
+
112
+ def create_inbound_routing(self, mac_string, vni, ip, attr_maps: dict):
113
+ self.app_dash_route_rule_table[str(mac_string) + ":" + str(vni) + ":" + str(ip)] = attr_maps
114
+
115
+ def remove_inbound_routing(self, mac_string, vni, ip):
116
+ del self.app_dash_route_rule_table[str(mac_string) + ":" + str(vni) + ":" + str(ip)]
117
+
118
+ def create_routing_type(self, routing_type, attr_maps: dict):
119
+ self.app_dash_routing_type_table[str(routing_type)] = attr_maps
120
+
121
+ def remove_routing_type(self, routing_type):
122
+ del self.app_dash_routing_type_table[str(routing_type)]
0 commit comments