Skip to content

Commit

Permalink
[test] Adding platform.json configuration file test (sonic-net#13)
Browse files Browse the repository at this point in the history
* [test] Adding platform.json configuration file test

Signed-off-by: Sangita Maity <sangitamaity0211@gmail.com>

* Addressed review comments

Signed-off-by: Sangita Maity <sangitamaity0211@gmail.com>
  • Loading branch information
samaity authored and zhenggen-xu committed Dec 5, 2019
1 parent 51d1830 commit 1963fc2
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 1 deletion.
3 changes: 3 additions & 0 deletions src/sonic-device-data/src/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,7 @@ test:
for f in $$(find ../../../device -name media_settings.json); do
./media_checker $$f
done
for f in $$(find ../../../device -name platform.json); do
./platformJson_checker $$f
done
popd
2 changes: 1 addition & 1 deletion src/sonic-device-data/tests/media_checker
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def main(argv):

# Load target file
if len(argv) == 0:
files = glob.glob('*.json')
files = glob.glob('*media_settings.json')
else:
files = argv

Expand Down
101 changes: 101 additions & 0 deletions src/sonic-device-data/tests/platformJson_checker
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#!/usr/bin/env python
try:
import re
import sys
import glob
import json
except ImportError as e:
raise ImportError (str(e) + "- required module not found")
try:
basestring
except NameError:
basestring = str

# Global variable
PORT_ATTRIBUTES = ["index", "lanes", "alias_at_lanes", "breakout_modes", "default_brkout_mode"]
ATTR_LEN = len(PORT_ATTRIBUTES)
PORT_REG = "Ethernet(\d+)"
PLATFORM_JSON = '*platform.json'

def usage():
print "Usage: " + sys.argv[0] + " <platform_json_file>"
sys.exit(1)


def check_port_attr(port_attr):
for each_key in port_attr:
if each_key not in PORT_ATTRIBUTES:
print "Error: "+ each_key + " is not the correct Port attribute."
return False
if not port_attr[each_key]:
print "Error: "+ each_key + " has no value."
return False
if not isinstance(port_attr[each_key], basestring):
print "Error:value type of "+ each_key + " must be string."
return False
return True

def check_file(platform_json_file):
try:
platform_cap_file = open(platform_json_file,"r")
platform_file_data = platform_cap_file.read()
port_dict = json.loads(platform_file_data)

for each_port in port_dict:

# Validate port at top level
port_id = re.search(PORT_REG, each_port)
if port_id is None:
print "Error: Unknown Interface " + str(each_port) + " at top level"
return False

total_attr = len(port_dict[each_port].keys())
port_attr = port_dict[each_port]

if total_attr != ATTR_LEN:
missing_attr = ', '.join(set(PORT_ATTRIBUTES).difference(list(port_attr)))
print "Error: " + missing_attr + " of " + each_port + " is/are missing"
return False

#Validate port attributes for each port
if not check_port_attr(port_attr):
return False

except IOError:
print "Error: Cannot open file " + platform_json_file
return False
except ValueError,e:
print "Error in parsing json file " + platform_json_file + " "
print str(e)
return False

return True


def main(argv):

if len(argv) > 0 and argv[0] == "-h":
usage()

# Load target file
if len(argv) == 0:
files = glob.glob(PLATFORM_JSON)
else:
files = argv

all_good = True

for f in files:
good = check_file(f)
if good:
print "File " + f + " passed validity check"
else:
print "File " + f + " failed validity check"

all_good = all_good and good

if not all_good:
sys.exit(-1)

if __name__ == "__main__":
main(sys.argv[1:])

0 comments on commit 1963fc2

Please sign in to comment.