Ejemplo n.º 1
0
def test_one_lint_result_per_chart(rule_runner: RuleRunner) -> None:
    rule_runner.write_files({
        "src/chart1/BUILD":
        "helm_chart()",
        "src/chart1/Chart.yaml":
        gen_chart_file("chart1", version="0.1.0"),
        "src/chart1/values.yaml":
        HELM_VALUES_FILE,
        "src/chart1/templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        "src/chart1/templates/service.yaml":
        K8S_SERVICE_FILE,
        "src/chart2/BUILD":
        "helm_chart()",
        "src/chart2/Chart.yaml":
        gen_chart_file("chart2", version="0.1.0"),
        "src/chart2/values.yaml":
        HELM_VALUES_FILE,
        "src/chart2/templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        "src/chart2/templates/service.yaml":
        K8S_SERVICE_FILE,
    })
    source_root_patterns = ("src/*", )

    chart1_target = rule_runner.get_target(
        Address("src/chart1", target_name="chart1"))
    chart2_target = rule_runner.get_target(
        Address("src/chart2", target_name="chart2"))

    lint_results = run_helm_lint(rule_runner, [chart1_target, chart2_target],
                                 source_root_patterns=source_root_patterns)
    assert len(lint_results) == 2
    assert lint_results[0].exit_code == 0
    assert lint_results[0].partition_description == "chart1"
    assert lint_results[1].exit_code == 0
    assert lint_results[1].partition_description == "chart2"
Ejemplo n.º 2
0
def test_lint_non_strict_chart_failing(rule_runner: RuleRunner) -> None:
    rule_runner.write_files({
        "BUILD":
        "helm_chart(name='mychart')",
        "Chart.yaml":
        gen_chart_file("mychart", version="0.1.0", icon="wrong URL"),
        "values.yaml":
        HELM_VALUES_FILE,
        "templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        "templates/service.yaml":
        K8S_SERVICE_FILE,
    })

    tgt = rule_runner.get_target(Address("", target_name="mychart"))
    lint_results = run_helm_lint(rule_runner, [tgt])

    assert len(lint_results) == 1
    assert lint_results[0].exit_code == 1
Ejemplo n.º 3
0
def test_lint_strict_chart_failing(rule_runner: RuleRunner) -> None:
    rule_runner.write_files({
        "BUILD":
        "helm_chart(name='mychart', lint_strict=True)",
        "Chart.yaml":
        gen_chart_file("mychart", version="0.1.0", icon=None),
        "values.yaml":
        HELM_VALUES_FILE,
        "templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        "templates/ingress.yaml":
        K8S_INGRESS_FILE_WITH_LINT_WARNINGS,
    })

    tgt = rule_runner.get_target(Address("", target_name="mychart"))
    lint_results = run_helm_lint(rule_runner, [tgt])

    assert len(lint_results) == 1
    assert lint_results[0].exit_code == 1
Ejemplo n.º 4
0
def test_helm_package(rule_runner: RuleRunner) -> None:
    chart_name = "foo"
    chart_version = "0.1.0"

    rule_runner.write_files({
        f"src/{chart_name}/BUILD":
        f"helm_chart(name='{chart_name}')",
        f"src/{chart_name}/Chart.yaml":
        gen_chart_file(chart_name, version=chart_version),
        f"src/{chart_name}/values.yaml":
        HELM_VALUES_FILE,
        f"src/{chart_name}/templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        f"src/{chart_name}/templates/service.yaml":
        K8S_SERVICE_FILE,
    })

    _assert_build_package(rule_runner,
                          chart_name=chart_name,
                          chart_version=chart_version)
Ejemplo n.º 5
0
def test_skip_lint(rule_runner: RuleRunner) -> None:
    rule_runner.write_files({
        "src/chart/BUILD":
        "helm_chart(skip_lint=True)",
        "src/chart/Chart.yaml":
        gen_chart_file("chart", version="0.1.0"),
        "src/chart/values.yaml":
        HELM_VALUES_FILE,
        "src/chart/templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        "src/chart/templates/service.yaml":
        K8S_SERVICE_FILE,
    })

    source_root_patterns = ("src/*", )

    chart_target = rule_runner.get_target(
        Address("src/chart", target_name="chart"))
    lint_results = run_helm_lint(rule_runner, [chart_target],
                                 source_root_patterns=source_root_patterns)
    assert len(lint_results) == 0
Ejemplo n.º 6
0
def test_helm_package_with_custom_output_path(rule_runner: RuleRunner) -> None:
    chart_name = "bar"
    chart_version = "0.2.0"

    output_path = "charts"

    rule_runner.write_files({
        f"src/{chart_name}/BUILD":
        f"""helm_chart(name="{chart_name}", output_path="{output_path}")""",
        f"src/{chart_name}/Chart.yaml":
        gen_chart_file(chart_name, version=chart_version),
        f"src/{chart_name}/values.yaml":
        HELM_VALUES_FILE,
        f"src/{chart_name}/templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        f"src/{chart_name}/templates/service.yaml":
        K8S_SERVICE_FILE,
    })

    _assert_build_package(rule_runner,
                          chart_name=chart_name,
                          chart_version=chart_version)
Ejemplo n.º 7
0
def test_collects_single_chart_sources(
    rule_runner: RuleRunner,
    name: str,
    version: str,
    type: ChartType,
    icon: str | None,
    lint_strict: bool,
) -> None:
    rule_runner.write_files({
        "BUILD":
        f"helm_chart(name='{name}', lint_strict={lint_strict})",
        "Chart.yaml":
        gen_chart_file(name, version=version, type=type, icon=icon),
        "values.yaml":
        HELM_VALUES_FILE,
        "templates/_helpers.tpl":
        HELM_TEMPLATE_HELPERS_FILE,
        "templates/service.yaml":
        K8S_SERVICE_FILE,
    })

    address = Address("", target_name=name)
    tgt = rule_runner.get_target(address)

    expected_metadata = HelmChartMetadata(
        name=name,
        version=version,
        icon=icon,
        type=type,
    )

    helm_chart = rule_runner.request(HelmChart,
                                     [HelmChartRequest.from_target(tgt)])
    assert helm_chart.metadata == expected_metadata
    assert len(helm_chart.snapshot.files) == 4
    assert helm_chart.address == address
Ejemplo n.º 8
0
def test_injects_parent_chart(rule_runner: RuleRunner) -> None:
    rule_runner.write_files({
        "src/chart1/BUILD":
        """helm_chart()""",
        "src/chart1/Chart.yaml":
        gen_chart_file("chart1", version="0.1.0"),
        "src/chart1/values.yaml":
        HELM_VALUES_FILE,
        "src/chart1/templates/service.yaml":
        K8S_SERVICE_FILE,
        "src/chart1/tests/BUILD":
        """helm_unittest_tests(sources=["*_test.yaml"])""",
        "src/chart1/tests/service_test.yaml":
        "",
        "src/chart2/BUILD":
        """helm_chart()""",
        "src/chart2/Chart.yaml":
        gen_chart_file("chart2", version="0.1.0"),
        "src/chart2/values.yaml":
        HELM_VALUES_FILE,
        "src/chart2/templates/service.yaml":
        K8S_SERVICE_FILE,
        "src/chart2/tests/BUILD":
        """helm_unittest_tests(sources=["*_test.yaml"])""",
        "src/chart2/tests/service_test.yaml":
        "",
    })

    source_roots = ["src/*"]
    rule_runner.set_options([f"--source-roots-patterns={repr(source_roots)}"])

    chart1_tgt = rule_runner.get_target(
        Address("src/chart1", target_name="chart1"))
    chart1_unittest_tgt = rule_runner.get_target(
        Address("src/chart1/tests", target_name="tests"))

    chart2_tgt = rule_runner.get_target(
        Address("src/chart2", target_name="chart2"))
    chart2_unittest_tgt = rule_runner.get_target(
        Address("src/chart2/tests", target_name="tests"))

    chart1_injected_deps = rule_runner.request(
        InjectedDependencies,
        [
            InjectHelmUnitTestChartDependencyRequest(
                chart1_unittest_tgt[HelmUnitTestDependenciesField])
        ],
    )
    chart2_injected_deps = rule_runner.request(
        InjectedDependencies,
        [
            InjectHelmUnitTestChartDependencyRequest(
                chart2_unittest_tgt[HelmUnitTestDependenciesField])
        ],
    )

    assert len(chart1_injected_deps) == 1
    assert len(chart2_injected_deps) == 1

    assert list(chart1_injected_deps)[0] == chart1_tgt.address
    assert list(chart2_injected_deps)[0] == chart2_tgt.address