From e42a14b1803e86e9c72e8c028ee0f71d7ee9ef99 Mon Sep 17 00:00:00 2001 From: "Daniel W. Anner" Date: Wed, 19 Jul 2023 10:32:03 -0400 Subject: [PATCH] Revert "PR CI Testing (#1472)" (#1474) This reverts commit 3d0803957deb608ad29b1c3668b10c2891e6af17. --- .github/workflows/master-slugs.yml | 34 ----------- requirements.txt | 1 - tests/definitions_test.py | 42 ++------------ tests/device_types.py | 16 ++--- tests/generate-slug-list.py | 90 ----------------------------- tests/known-slugs.pickle | Bin 162592 -> 0 bytes tests/pickle_operations.py | 14 ----- tests/test_configuration.py | 10 +--- 8 files changed, 9 insertions(+), 198 deletions(-) delete mode 100644 .github/workflows/master-slugs.yml delete mode 100644 tests/generate-slug-list.py delete mode 100644 tests/known-slugs.pickle delete mode 100644 tests/pickle_operations.py diff --git a/.github/workflows/master-slugs.yml b/.github/workflows/master-slugs.yml deleted file mode 100644 index 0c43d494a..000000000 --- a/.github/workflows/master-slugs.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Create Master Slug List on PR Merge -on: - pull_request: - types: - - closed - branches: - - master -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - uses: actions/checkout@v3 - - name: Setup Python - uses: actions/setup-python@v3 - with: - python-version: 3.8 - - name: Install dependencies - run: pip install -r requirements.txt - - name: Regenerate Master Slug List - run: python3 tests/generate-slug-list.py - - name: Commit and Push Changes to Master - uses: EndBug/add-and-commit@v9 - with: - author_name: NetBox-Bot - author_email: info@netboxlabs.com - committer_name: NetBox-Bot - committer_email: info@netboxlabs.com - default_author: github_actions - message: "Regenerate master slug list after successful PR merge" - push: true diff --git a/requirements.txt b/requirements.txt index 6251a75a6..0142f2e90 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,3 @@ pre-commit==3.3.3 pytest==7.4.0 PyYAML==6.0 yamllint==1.32.0 -gitpython==3.1.32 \ No newline at end of file diff --git a/tests/definitions_test.py b/tests/definitions_test.py index 98875763c..6d94fef32 100644 --- a/tests/definitions_test.py +++ b/tests/definitions_test.py @@ -1,19 +1,16 @@ -from test_configuration import COMPONENT_TYPES, IMAGE_FILETYPES, SCHEMAS, KNOWN_SLUGS, ROOT_DIR, USE_LOCAL_KNOWN_SLUGS, NETBOX_DT_LIBRARY_URL -import pickle_operations +from test_configuration import COMPONENT_TYPES, IMAGE_FILETYPES, SCHEMAS from yaml_loader import DecimalSafeLoader from device_types import DeviceType, ModuleType, verify_filename, validate_components import decimal import glob import json import os -import tempfile from urllib.request import urlopen import pytest import yaml from jsonschema import Draft4Validator, RefResolver from jsonschema.exceptions import ValidationError -from git import Repo def _get_definition_files(): """ @@ -35,29 +32,6 @@ def _get_definition_files(): return file_list -def _get_diff_from_upstream(): - file_list = [] - - repo = Repo(f"{os.path.dirname(os.path.abspath(__file__))}/../") - upstream = repo.remotes.upstream - upstream.fetch() - changes = repo.head.commit.diff(upstream.refs["master"].object.hexsha) - - for path, schema in SCHEMAS: - # Initialize the schema - with open(f"schema/{schema}") as schema_file: - schema = json.loads(schema_file.read(), parse_float=decimal.Decimal) - - # Validate that the schema exists - assert schema, f"Schema definition for {path} is empty!" - - for file in changes: - if file.b_path is not None: - if path in file.b_path: - file_list.append((file.b_path, schema)) - - return file_list - def _get_image_files(): """ Return a list of all image files within the specified path and manufacturer. @@ -87,19 +61,11 @@ def test_environment(): Run basic sanity checks on the environment to ensure tests are running correctly. """ # Validate that definition files exist - if definition_files: - pytest.skip("No changes to definition files found.") + assert definition_files, "No definition files found!" -definition_files = _get_diff_from_upstream() +definition_files = _get_definition_files() image_files = _get_image_files() -if USE_LOCAL_KNOWN_SLUGS: - KNOWN_SLUGS = pickle_operations.read_pickle_data(f'{ROOT_DIR}/tests/known-slugs.pickle') -else: - temp_dir = tempfile.TemporaryDirectory() - repo = Repo.clone_from(url=NETBOX_DT_LIBRARY_URL, to_path=temp_dir.name) - KNOWN_SLUGS = pickle_operations.read_pickle_data(f'{temp_dir.name}/tests/known-slugs.pickle') - @pytest.mark.parametrize(('file_path', 'schema'), definition_files) def test_definitions(file_path, schema): """ @@ -141,7 +107,7 @@ def test_definitions(file_path, schema): # Verify the slug is valid, only if the definition type is a Device if this_device.isDevice: - assert this_device.verify_slug(KNOWN_SLUGS), pytest.fail(this_device.failureMessage, False) + assert this_device.verify_slug(), pytest.fail(this_device.failureMessage, False) # Verify the filename is valid. Must either be the model or part_number. assert verify_filename(this_device), pytest.fail(this_device.failureMessage, False) diff --git a/tests/device_types.py b/tests/device_types.py index 7b58cd0e7..9a6c07a3c 100644 --- a/tests/device_types.py +++ b/tests/device_types.py @@ -1,3 +1,4 @@ +from test_configuration import KNOWN_SLUGS import os class DeviceType: @@ -40,18 +41,9 @@ class DeviceType: def get_filepath(self): return self.file_path - def verify_slug(self, KNOWN_SLUGS): + def verify_slug(self): # Verify the slug is unique, and not already known - known_slug_list_intersect = [(slug, file_path) for slug, file_path in KNOWN_SLUGS if slug == self.slug] - - if len(known_slug_list_intersect) == 0: - pass - elif len(known_slug_list_intersect) == 1: - if self.file_path not in known_slug_list_intersect[0][1]: - self.failureMessage = f'{self.file_path} has a duplicate slug: "{self.slug}"' - return False - return True - else: + if self.slug in KNOWN_SLUGS: self.failureMessage = f'{self.file_path} has a duplicate slug "{self.slug}"' return False @@ -66,7 +58,7 @@ class DeviceType: return False # Add the slug to the list of known slugs - KNOWN_SLUGS.add((self.slug, self.file_path)) + KNOWN_SLUGS.add(self.slug) return True def validate_power(self): diff --git a/tests/generate-slug-list.py b/tests/generate-slug-list.py deleted file mode 100644 index 7cf3f1d0e..000000000 --- a/tests/generate-slug-list.py +++ /dev/null @@ -1,90 +0,0 @@ -import os -import json -import glob -import yaml -import decimal -from yaml_loader import DecimalSafeLoader -from jsonschema import Draft4Validator, RefResolver -from jsonschema.exceptions import ValidationError -from test_configuration import SCHEMAS, KNOWN_SLUGS, ROOT_DIR -from urllib.request import urlopen -import pickle_operations - -def _get_device_type_files(): - """ - Return a list of all definition files within the specified path. - """ - file_list = [] - - for path, schema in SCHEMAS: - if path == 'device-types': - # Initialize the schema - with open(f"{ROOT_DIR}/schema/{schema}") as schema_file: - schema = json.loads(schema_file.read(), - parse_float=decimal.Decimal) - - # Validate that the schema exists - if not schema: - print(f"Schema definition for {path} is empty!") - exit(1) - - # Map each definition file to its schema as a tuple (file, schema) - for file in sorted(glob.glob(f"{path}/*/*", recursive=True)): - file_list.append((f'{file}', schema)) - - return file_list - -def _decimal_file_handler(uri): - """ - Handler to work with floating decimals that fail normal validation. - """ - with urlopen(uri) as url: - result = json.loads(url.read().decode("utf-8"), parse_float=decimal.Decimal) - return result - -def load_file(file_path, schema): - # Read file - try: - with open(file_path) as definition_file: - content = definition_file.read() - except Exception as exc: - return (False, f'Error opening "{file_path}". stderr: {exc}') - - # Check for trailing newline. YAML files must end with an emtpy newline. - if not content.endswith('\n'): - return (False, f'{file_path} is missing trailing newline') - - # Load YAML data from file - try: - definition = yaml.load(content, Loader=DecimalSafeLoader) - except Exception as exc: - return (False, f'Error during yaml.load "{file_path}". stderr: {exc}') - - # Validate YAML definition against the supplied schema - try: - resolver = RefResolver( - f"file://{os.getcwd()}/schema/devicetype.json", - schema, - handlers={"file": _decimal_file_handler}, - ) - # Validate definition against schema - Draft4Validator(schema, resolver=resolver).validate(definition) - except ValidationError as exc: - # Schema validation failure. Ensure you are following the proper format. - return (False, f'{file_path} failed validation: {exc}') - - return (True, definition) - -def _generate_known_slugs(): - all_files = _get_device_type_files() - - for file_path, schema in all_files: - definition_status, definition = load_file(file_path, schema) - if not definition_status: - print(definition) - exit(1) - - KNOWN_SLUGS.add((definition.get('slug'), file_path)) - -_generate_known_slugs() -pickle_operations.write_pickle_data(KNOWN_SLUGS, f'{ROOT_DIR}/tests/known-slugs.pickle') \ No newline at end of file diff --git a/tests/known-slugs.pickle b/tests/known-slugs.pickle deleted file mode 100644 index 801dc573af9e1c5145f4745d7873963a010bd700..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162592 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 OU-G#0*eL&>|NQ^i1V^0! diff --git a/tests/pickle_operations.py b/tests/pickle_operations.py deleted file mode 100644 index 193dd4da5..000000000 --- a/tests/pickle_operations.py +++ /dev/null @@ -1,14 +0,0 @@ -import pickle - -def write_pickle_data(data, file_path): - with open(file_path, 'wb') as pickle_file: - pickle.dump(data, pickle_file) - pickle_file.close() - - -def read_pickle_data(file_path): - with open(file_path, 'rb') as pickle_file: - data = pickle.load(pickle_file) - pickle_file.close() - - return data diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 5f90a0f44..68edcaf5d 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -1,5 +1,3 @@ -import os - SCHEMAS = ( ('device-types', 'devicetype.json'), ('module-types', 'moduletype.json'), @@ -21,10 +19,4 @@ COMPONENT_TYPES = ( 'module-bays', ) -ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname( __file__ ), '..')) - -KNOWN_SLUGS = set() - -USE_LOCAL_KNOWN_SLUGS = False - -NETBOX_DT_LIBRARY_URL = "https://github.com/netbox-community/devicetype-library.git" \ No newline at end of file +KNOWN_SLUGS = set() \ No newline at end of file