blob: f962faa54a036e8b5cbd7523468d708ad450d547 [file] [log] [blame]
# 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.
load(
"//pkg:mappings.bzl",
"REMOVE_BASE_DIRECTORY",
"pkg_attributes",
"pkg_filegroup",
"pkg_files",
"strip_prefix",
)
load("//pkg:rpm.bzl", "pkg_rpm")
load("//tests/util:defs.bzl", "directory")
load("@rules_python//python:defs.bzl", "py_test")
############################################################################
# Test handling of directory outputs
############################################################################
# This package defines tests related to the installation of directory outputs
# (TreeArtifacts) in RPM packages. The rules in common are:
#
# - The order of incoming pkg_filegroups (and their contents) does not matter
#
# - Each file in a TreeArtifact is installed relative to its position in the
# TreeArtifact, which itself is relative to the desired install prefix.
package(default_applicable_licenses = ["//:license"])
# The actual test. It tests whether the contents match a particular desired
# "manifest", most notably with regards to file structure.
py_test(
name = "layer_with_files",
srcs = ["rpm_contents_vs_manifest_test.py"],
data = [":layer_with_files_test_data"],
main = "rpm_contents_vs_manifest_test.py",
tags = [
"no_windows", # Windows doesn't have rpm(8) or rpmbuild(8)
],
env = {"TEST_RPM": "test_dirs_rpm-1.1.1-2222.noarch.rpm"},
deps = [
"//tests/rpm:rpm_util",
"@rules_python//python/runfiles",
],
)
# One cannot simply pass the output of pkg_rpm as runfiles content (#161). This
# seems to be the easiest way around this problem.
sh_library(
name = "layer_with_files_test_data",
testonly = True,
srcs = [":test_dirs_rpm"],
)
# The RPM (target under test)
pkg_rpm(
name = "test_dirs_rpm",
srcs = [
":dirs_test_pfg",
],
architecture = "noarch",
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
release = "2222",
spec_template = "//tests/rpm:template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
############################################################################
# Test RPM Contents
############################################################################
# Establish a directory structure. This will end up looking like:
# test_dir/a (created by a "directory" rule)
# test_dir/b (created by a "directory" rule)
# test_dir/subdir/c (created by a "directory" rule)
# test_dir/subdir/d (created by a "directory" rule)
# test_dir/e (created by a genrule)
# test_dir/f (created by a genrule)
pkg_filegroup(
name = "dirs_test_pfg",
srcs = [
# do not sort
":test_dir1_pf",
":test_files_from_rules",
],
)
pkg_files(
name = "test_dir1_pf",
srcs = [":test_dir1"],
attributes = pkg_attributes(
group = "root",
mode = "0644",
user = "root",
),
strip_prefix = strip_prefix.from_pkg(""),
)
directory(
name = "test_dir1",
contents = "test_dir1",
filenames = [
"a",
"b",
"subdir/c",
"subdir/d",
],
outdir = "test_dir",
)
pkg_files(
name = "test_files_from_rules",
srcs = [":my_files"],
attributes = pkg_attributes(
group = "root",
mode = "0644",
user = "root",
),
prefix = "test_dir",
)
genrule(
name = "my_files",
outs = [
"e",
"f",
],
cmd = "touch $(OUTS)",
)
############################################################################
# Regression: Ensure that TreeArtifact installation WRT files is independent of install order
############################################################################
# The actual test, just like before, except the pkg_filegroup input is slightly
# different.
py_test(
name = "layer_with_files_reversed",
srcs = ["rpm_contents_vs_manifest_test.py"],
data = [":layer_with_files_reversed_test_data"],
env = {"TEST_RPM": "test_dirs_rpm_reversed-1.1.1-2222.noarch.rpm"},
main = "rpm_contents_vs_manifest_test.py",
tags = [
"no_windows", # Windows doesn't have rpm(8) or rpmbuild(8)
],
deps = [
"//tests/rpm:rpm_util",
"@rules_python//python/runfiles",
],
)
# One cannot simply pass the output of pkg_rpm as runfiles content (#161). This
# seems to be the easiest way around this problem.
sh_library(
name = "layer_with_files_reversed_test_data",
testonly = True,
srcs = [":test_dirs_rpm_reversed"],
)
pkg_rpm(
name = "test_dirs_rpm_reversed",
srcs = [
":dirs_test_pfg_reversed",
],
architecture = "noarch",
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
release = "2222",
spec_template = "//tests/rpm:template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
# Like dirs_test_pfg, but the contents are reversed. One of the major issues
# with #292 was inconsistency due to install order.
pkg_filegroup(
name = "dirs_test_pfg_reversed",
srcs = [
# do not sort
":test_files_from_rules",
":test_dir1_pf",
],
)
############################################################################
# Test that renaming TreeArtifacts to nothing results in the files being dropped
# in their prefix.
############################################################################
py_test(
name = "treeartifact_ops",
srcs = ["rpm_treeartifact_ops_test.py"],
data = [":treeartifact_ops_rpm_test_data"],
main = "rpm_treeartifact_ops_test.py",
env = {"TEST_RPM": "treeartifact_ops_rpm-1.1.1-2222.noarch.rpm"},
tags = [
"no_windows", # Windows doesn't have rpm(8) or rpmbuild(8)
],
deps = [
"//tests/rpm:rpm_util",
"@rules_python//python/runfiles",
],
)
sh_library(
name = "treeartifact_ops_rpm_test_data",
testonly = True,
srcs = [":treeartifact_ops_rpm"],
)
pkg_rpm(
name = "treeartifact_ops_rpm",
srcs = [
":treeartifact_ops_pfg",
],
architecture = "noarch",
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
release = "2222",
spec_template = "//tests/rpm:template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
pkg_filegroup(
name = "treeartifact_ops_pfg",
srcs = [
":stripped_treeartifact_pf",
],
)
pkg_files(
name = "stripped_treeartifact_pf",
srcs = [
":test_dir1",
],
attributes = pkg_attributes(
group = "root",
mode = "0644",
user = "root",
),
renames = {":test_dir1": REMOVE_BASE_DIRECTORY},
)