Back to Repositories

Validating Helm Chart Schema Compliance in Apache Airflow

This test suite focuses on validating the quality and schema compliance of Airflow Helm charts. It ensures proper configuration validation and structural integrity of chart values against defined JSON schemas.

Test Coverage Overview

The test coverage encompasses comprehensive validation of Helm chart values against predefined schema specifications.

  • Schema validation for values.yaml
  • Strict property validation and count verification
  • JSON schema compliance checking
  • Chart structure integrity validation

Implementation Analysis

The testing approach utilizes Python’s yaml and jsonschema libraries to implement robust schema validation. The implementation enforces strict validation rules by preventing additional properties and ensuring all required properties are present.

  • YAML to Python object conversion
  • JSON schema validation implementation
  • Additional property restrictions
  • Minimum property count validation

Technical Details

  • Testing Framework: Python unittest
  • Key Libraries: yaml, jsonschema
  • Test Dependencies: Path from pathlib
  • Configuration: values.schema.json, values.yaml
  • Test Environment: Local file system based testing

Best Practices Demonstrated

The test suite demonstrates several testing best practices in Helm chart validation. It implements thorough schema validation with strict requirements and clear failure conditions.

  • Explicit schema validation
  • Strict property management
  • Clear file path handling
  • Comprehensive configuration validation

apache/airflow

helm_tests/airflow_aux/test_chart_quality.py

            
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
from __future__ import annotations

import json
from pathlib import Path

import yaml
from jsonschema import validate

CHART_DIR = Path(__file__).parents[2] / "chart"


class TestChartQuality:
    """Tests chart quality."""

    def test_values_validate_schema(self):
        values = yaml.safe_load((CHART_DIR / "values.yaml").read_text())
        schema = json.loads((CHART_DIR / "values.schema.json").read_text())

        # Add extra restrictions just for the tests to make sure
        # we don't forget to update the schema if we add a new property
        schema["additionalProperties"] = False
        schema["minProperties"] = len(schema["properties"].keys())

        # shouldn't raise
        validate(instance=values, schema=schema)