59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
# Copyright (c) OpenMMLab. All rights reserved.
|
|
import os
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
import requests
|
|
import yaml
|
|
|
|
MMRAZOR_ROOT = Path(__file__).absolute().parents[1]
|
|
|
|
|
|
class TestMetafiles(unittest.TestCase):
|
|
|
|
def get_metafiles(self, code_path):
|
|
"""
|
|
Function: get the metafile of all configs from model-index.yml
|
|
"""
|
|
metafile = os.path.join(code_path, 'model-index.yml')
|
|
with open(metafile, 'r') as f:
|
|
meta = yaml.safe_load(f)
|
|
return meta['Import']
|
|
|
|
def test_metafiles(self):
|
|
metafiles = self.get_metafiles(MMRAZOR_ROOT)
|
|
for mf in metafiles:
|
|
metafile = os.path.abspath(os.path.join(MMRAZOR_ROOT, mf))
|
|
with open(metafile, 'r') as f:
|
|
meta = yaml.safe_load(f)
|
|
for model in meta['Models']:
|
|
# 1. weights url check
|
|
r = requests.head(model['Weights'], timeout=4)
|
|
assert r.status_code != 404, \
|
|
f"can't connect url {model['Weights']} in " \
|
|
f'metafile {metafile}'
|
|
|
|
# 2. config check
|
|
dir_path = os.path.abspath(os.path.join(metafile, '../'))
|
|
# list all files which are in the same directory of
|
|
# current metafile
|
|
config_files = os.listdir(dir_path)
|
|
|
|
if isinstance(model['Config'], list):
|
|
# TODO: 3. log error
|
|
continue
|
|
|
|
assert (model['Config'].split('/')[-1] in config_files), \
|
|
f"config error in {metafile} model {model['Name']}"
|
|
|
|
# 4. name check
|
|
# erase '.py'
|
|
correct_name = model['Config'].split('/')[-1][:-3]
|
|
assert model['Name'] == correct_name, \
|
|
f'name error in {metafile}, correct name should ' \
|
|
f'be {correct_name}'
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|