Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[test] Adding platform.json configuration file test #13

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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:])