Skip to content

Commit 0f85026

Browse files
author
Praveen Chaudhary
authored
[sonic-yang-models/yang-models/sonic-acl.yang]: Make type mandatory a… (sonic-net#80)
* [sonic-yang-models/yang-models/sonic-acl.yang]: Make type mandatory and add default value of stage. Changes: -- Make type mandatory and add default value of stage. -- Test case. -- Support for Verification in data tree. Signed-off-by: Praveen Chaudhary [email protected] * [yang_model_tests/yangModelTesting.py]: Adding Description. Signed-off-by: Praveen Chaudhary [email protected] RB= G=lnos-reviewers R=pchaudhary,pmao,rmolina,samaity,sfardeen,zxu A=
1 parent 2a2705a commit 0f85026

File tree

3 files changed

+66
-3
lines changed

3 files changed

+66
-3
lines changed

src/sonic-yang-models/tests/yang_model_tests/yangModelTesting.py

+38-2
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ def __init__(self, tests, yangDir, jsonFile):
4343
'LeafRef': ['Leafref', 'non-existing'],
4444
'When': ['When condition', 'not satisfied'],
4545
'Pattern': ['pattern', 'does not satisfy'],
46+
'Mandatory': ['required element', 'Missing'],
47+
'Verify': ['verified'],
4648
'None': ['']
4749
}
4850

@@ -118,6 +120,18 @@ def __init__(self, tests, yangDir, jsonFile):
118120
'LOOPBACK_IPPREFIX_PORT_MUST_CONDITION_FALSE': {
119121
'desc': 'Loopback Ip-prefix port-name must condition failure.',
120122
'eStr': self.defaultYANGFailure['Must']
123+
},
124+
'ACL_TABLE_MANDATORY_TYPE': {
125+
'desc': 'ACL_TABLE MANDATORY TYPE FIELD.',
126+
'eStr': self.defaultYANGFailure['Mandatory'] + ['type'] + ['ACL_TABLE']
127+
},
128+
'ACL_TABLE_DEFAULT_VALUE_STAGE': {
129+
'desc': 'ACL_TABLE DEFAULT VALUE FOR STAGE FIELD.',
130+
'eStr': self.defaultYANGFailure['Verify'],
131+
'verify': {'xpath': "/sonic-acl:sonic-acl/ACL_TABLE/ACL_TABLE_LIST[ACL_TABLE_NAME='NO-NSW-PACL-V4']/stage",
132+
'key': 'sonic-acl:stage',
133+
'value': 'INGRESS'
134+
}
121135
}
122136
}
123137

@@ -201,12 +215,34 @@ def logStartTest(self, desc):
201215

202216
"""
203217
Load Config Data and return Exception as String
218+
219+
Parameters:
220+
jInput (dict): input config to load.
221+
verify (dict): contains xpath, key and value. This is used to verify,
222+
that node tree at xpath contains correct key and value.
223+
Example:
224+
'verify': {'xpath': "/sonic-acl:sonic-acl/ACL_TABLE/ACL_TABLE_LIST\
225+
[ACL_TABLE_NAME='NO-NSW-PACL-V4']/stage",
226+
'key': 'sonic-acl:stage',
227+
'value': 'INGRESS'
228+
}
204229
"""
205-
def loadConfigData(self, jInput):
230+
def loadConfigData(self, jInput, verify=None):
206231
s = ""
207232
try:
208233
node = self.ctx.parse_data_mem(jInput, ly.LYD_JSON, \
209234
ly.LYD_OPT_CONFIG | ly.LYD_OPT_STRICT)
235+
# verify the data tree if asked
236+
if verify is not None:
237+
xpath = verify['xpath']
238+
set = node.find_path(xpath)
239+
for dnode in set.data():
240+
if (xpath == dnode.path()):
241+
data = dnode.print_mem(ly.LYD_JSON, ly.LYP_WITHSIBLINGS \
242+
| ly.LYP_FORMAT | ly.LYP_WD_ALL)
243+
data = json.loads(data)
244+
assert (data[verify['key']] == verify['value'])
245+
s = 'verified'
210246
except Exception as e:
211247
s = str(e)
212248
log.debug(s)
@@ -221,7 +257,7 @@ def runExceptionTest(self, test):
221257
self.logStartTest(desc)
222258
jInput = self.readJsonInput(test)
223259
# load the data, expect a exception with must condition failure
224-
s = self.loadConfigData(jInput)
260+
s = self.loadConfigData(jInput, self.ExceptionTests[test].get('verify'))
225261
eStr = self.ExceptionTests[test]['eStr']
226262
log.debug(eStr)
227263
if (sum(1 for str in eStr if str not in s) == 0):

src/sonic-yang-models/tests/yang_model_tests/yangTest.json

+26-1
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,30 @@
577577
}
578578
},
579579

580+
"ACL_TABLE_MANDATORY_TYPE": {
581+
"sonic-acl:sonic-acl": {
582+
"sonic-acl:ACL_TABLE": {
583+
"ACL_TABLE_LIST": [{
584+
"ACL_TABLE_NAME": "NO-NSW-PACL-V4",
585+
"policy_desc": "Filter IPv4",
586+
"stage": "EGRESS"
587+
}]
588+
}
589+
}
590+
},
591+
592+
"ACL_TABLE_DEFAULT_VALUE_STAGE": {
593+
"sonic-acl:sonic-acl": {
594+
"sonic-acl:ACL_TABLE": {
595+
"ACL_TABLE_LIST": [{
596+
"ACL_TABLE_NAME": "NO-NSW-PACL-V4",
597+
"policy_desc": "Filter IPv4",
598+
"type": "L3"
599+
}]
600+
}
601+
}
602+
},
603+
580604
"ACL_RULE_WRONG_INNER_ETHER_TYPE": {
581605
"sonic-acl:sonic-acl": {
582606
"sonic-acl:ACL_RULE": {
@@ -1116,7 +1140,8 @@
11161140
"Ethernet26",
11171141
"Ethernet27",
11181142
"Ethernet24"
1119-
]
1143+
],
1144+
"stage": "INGRESS"
11201145
},
11211146
"V6-ACL-TBLE": {
11221147
"type": "L3V6",

src/sonic-yang-models/yang-models/sonic-acl.yang

+2
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ module sonic-acl {
256256
}
257257

258258
leaf type {
259+
mandatory true;
259260
type head:acl_table_type;
260261
}
261262

@@ -264,6 +265,7 @@ module sonic-acl {
264265
enum INGRESS;
265266
enum EGRESS;
266267
}
268+
default INGRESS;
267269
}
268270

269271
leaf-list ports {

0 commit comments

Comments
 (0)