aboutsummaryrefslogtreecommitdiff
path: root/tests/rpm/analysis_tests.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/rpm/analysis_tests.bzl')
-rw-r--r--tests/rpm/analysis_tests.bzl318
1 files changed, 0 insertions, 318 deletions
diff --git a/tests/rpm/analysis_tests.bzl b/tests/rpm/analysis_tests.bzl
deleted file mode 100644
index 3565b47..0000000
--- a/tests/rpm/analysis_tests.bzl
+++ /dev/null
@@ -1,318 +0,0 @@
-# Copyright 2021 The Bazel Authors. All rights reserved.
-#
-# Licensed 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.
-
-"""Tests for RPM generation analysis"""
-
-load(
- "//pkg:mappings.bzl",
- "pkg_filegroup",
- "pkg_files",
- "pkg_mkdirs",
- "pkg_mklink",
-)
-load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
-load("//pkg:providers.bzl", "PackageVariablesInfo")
-load("//pkg:rpm.bzl", "pkg_rpm")
-load("//tests/util:defs.bzl", "directory", "generic_base_case_test", "generic_negative_test")
-
-def _declare_pkg_rpm(name, srcs_ungrouped, tags = None, **kwargs):
- pfg_name = "{}_pfg".format(name)
- _tags = tags or ["manual"]
-
- pkg_filegroup(
- name = pfg_name,
- srcs = srcs_ungrouped,
- tags = _tags,
- )
-
- pkg_rpm(
- name = name,
- srcs = [":" + pfg_name],
- version = "1.0",
- release = "1",
- architecture = "noarch",
- license = "N/A",
- summary = "A test",
- description = "very much a test",
- tags = _tags,
- **kwargs
- )
-
-def _declare_conflicts_test(name, srcs, **kwargs):
- rpm_name = name + "_rpm"
- _declare_pkg_rpm(
- name = rpm_name,
- srcs_ungrouped = srcs,
- tags = ["manual"],
- )
-
- generic_negative_test(
- name = name,
- target_under_test = ":" + rpm_name,
- )
-
-############################################################
-# Begin tests. Check that the conflict detection system works.
-############################################################
-
-def _test_conflicting_inputs(name):
- # The test here is to confirm if pkg_rpm rejects conflicting inputs
- #
- # The structure of the code is such that it's only necessary to test any one
- # packaged item conflicts with all others; order is irrelevant.
- #
- # So, we test how everything would conflict with a "file" entry
- pkg_files(
- name = "{}_file_base".format(name),
- srcs = ["foo"],
- tags = ["manual"],
- )
-
- _declare_pkg_rpm(
- name = name + "_base",
- srcs_ungrouped = [":{}_file_base".format(name)],
- )
-
- generic_base_case_test(
- name = name + "_base_case_passes_analysis",
- target_under_test = ":" + name + "_base",
- )
-
- ##################################################
- # file vs conflicting file
- ##################################################
-
- pkg_files(
- name = "{}_file_conflict".format(name),
- srcs = ["foo"],
- tags = ["manual"],
- )
-
- _declare_conflicts_test(
- name = name + "_conflict_with_file",
- srcs = [
- ":{}_file_base".format(name),
- ":{}_file_conflict".format(name),
- ],
- )
-
- ##################################################
- # file vs conflicting dir
- ##################################################
-
- pkg_mkdirs(
- name = "{}_dir_conflict".format(name),
- dirs = ["foo"],
- tags = ["manual"],
- )
-
- _declare_conflicts_test(
- name = name + "_conflict_with_dir",
- srcs = [
- ":{}_file_base".format(name),
- ":{}_dir_conflict".format(name),
- ],
- )
-
- ##################################################
- # file vs conflicting symbolic link
- ##################################################
-
- pkg_mklink(
- name = "{}_symlink_conflict".format(name),
- link_name = "foo",
- target = "bar",
- tags = ["manual"],
- )
-
- _declare_conflicts_test(
- name = name + "_conflict_with_symlink",
- srcs = [
- ":{}_file_base".format(name),
- ":{}_symlink_conflict".format(name),
- ],
- )
-
- native.test_suite(
- name = name,
- tests = [
- ":{}_{}".format(name, test_name)
- for test_name in [
- "base_case_passes_analysis",
- "conflict_with_file",
- "conflict_with_dir",
- "conflict_with_symlink",
- ]
- ],
- )
-
-############################################################
-# Verify that rules produce expected named outputs
-############################################################
-
-#### Setup; helpers
-
-def _package_naming_test_impl(ctx):
- env = analysistest.begin(ctx)
- target_under_test = analysistest.target_under_test(env)
-
- ogi = target_under_test[OutputGroupInfo]
-
- out_file = ogi.out.to_list()[0]
- rpm_file = ogi.rpm.to_list()[0]
- changes_file = ogi.changes.to_list()[0] if ogi.changes else None
- asserts.equals(
- env,
- rpm_file.basename,
- ctx.attr.expected_name,
- "OutputGroupInfo rpm name does not match expected value.",
- )
-
- # Try to find the expected files in the DefaultInfo.
- out_file_found = False
- rpm_file_found = False
- changes_file_found = False
- default_name_found = False
-
- for f in target_under_test[DefaultInfo].files.to_list():
- if f == out_file:
- out_file_found = True
- if f == rpm_file:
- rpm_file_found = True
- if f == changes_file:
- changes_file_found = True
- if f.basename == ctx.attr.expected_name:
- default_name_found = True
-
- asserts.true(
- env,
- rpm_file_found,
- "rpm component of OutputGroupInfo '{}' is not in DefaultInfo".format(rpm_file),
- )
- asserts.false(
- env,
- out_file_found,
- "out component of OutputGroupInfo '{}' is not in DefaultInfo".format(out_file),
- )
- asserts.false(
- env,
- changes_file_found,
- "changes component of OutputGroupInfo '{}' is not in DefaultInfo".format(changes_file),
- )
- asserts.true(
- env,
- default_name_found,
- "Expected package file with default name '{}' is not in DefaultInfo".format(ctx.attr.expected_name),
- )
-
- return analysistest.end(env)
-
-package_naming_test = analysistest.make(
- _package_naming_test_impl,
- attrs = {
- "expected_name": attr.string(),
- },
-)
-
-# Dummy substitution set, used in below test cases
-def _dummy_pkg_variables_impl(ctx):
- return [
- PackageVariablesInfo(
- values = {
- "FOO": "foo",
- "BAR": "bar",
- },
- ),
- ]
-
-dummy_pkg_variables = rule(
- implementation = _dummy_pkg_variables_impl,
- attrs = {},
-)
-
-#### Tests start here
-
-def _test_naming(name):
- # Test whether name templating via PackageVariablesInfo functions as expected, and ensure that
- # outputs are passed through to OutputGroupInfo.
- pkg_files(
- name = "{}_file_base".format(name),
- srcs = ["foo"],
- tags = ["manual"],
- )
-
- _declare_pkg_rpm(
- name = name + "_no_extra_rpm",
- srcs_ungrouped = [":{}_file_base".format(name)],
- )
-
- # Default "full" name defaults to the "NVR.A" format.
- package_naming_test(
- name = name + "_no_extra",
- target_under_test = ":" + name + "_no_extra_rpm",
- expected_name = name + "_no_extra_rpm-1.0-1.noarch.rpm",
- )
-
- ##################################################
- # With pkg_variables
- ##################################################
-
- dummy_pkg_variables(
- name = name + "_pkg_variables",
- )
-
- _declare_pkg_rpm(
- name = name + "_with_different_name_rpm",
- srcs_ungrouped = [":{}_file_base".format(name)],
- package_variables = ":{}_pkg_variables".format(name),
- package_file_name = name + "-{FOO}-{BAR}.rpm",
- )
-
- # Default "full" name defaults to the "NVR.A" format. Set it to something
- # super arbitrary.
- package_naming_test(
- name = name + "_with_different_name",
- target_under_test = ":" + name + "_with_different_name_rpm",
- expected_name = name + "-foo-bar.rpm",
- )
-
- ##################################################
- # Test suite declaration
- ##################################################
-
- native.test_suite(
- name = name,
- tests = [
- ":{}_{}".format(name, test_name)
- for test_name in [
- "no_extra",
- "with_different_name",
- ]
- ],
- )
-
-def analysis_tests(name, **kwargs):
- # Need to test:
- #
- # - Mutual exclusivity of certain options (low priority)
- #
- _test_conflicting_inputs(name = name + "_conflicting_inputs")
- _test_naming(name = name + "_naming")
- native.test_suite(
- name = name,
- tests = [
- name + "_conflicting_inputs",
- name + "_naming",
- ],
- )