blob: b1dd70bba0caf1bb2f580e20cb1e744f7db2b9b3 [file] [log] [blame]
# Copyright 2020 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.
# -*- coding: utf-8 -*-
load("@bazel_skylib//rules:build_test.bzl", "build_test")
load("@bazel_skylib//rules:diff_test.bzl", "diff_test")
load("@rules_python//python:defs.bzl", "py_library", "py_test")
load(
"//pkg:mappings.bzl",
"pkg_attributes",
"pkg_filegroup",
"pkg_files",
"pkg_mkdirs",
"pkg_mklink",
)
load("//pkg:rpm.bzl", "pkg_rpm")
load("analysis_tests.bzl", "analysis_tests")
load("toolchain_tests.bzl", "create_toolchain_analysis_tests")
############################################################################
# analysis tests
############################################################################
package(default_applicable_licenses = ["//:license"])
analysis_tests(name = "analysis_tests")
create_toolchain_analysis_tests()
exports_files(
["template-test.spec.tpl"],
visibility = [":__subpackages__"],
)
############################################################################
# pkg_filegroups for testing
############################################################################
filegroup(
name = "ars",
srcs = [
"//tests:testdata/a.ar",
"//tests:testdata/a_ab.ar",
"//tests:testdata/a_b.ar",
"//tests:testdata/a_b_ab.ar",
"//tests:testdata/ab.ar",
"//tests:testdata/b.ar",
"//tests:testdata/empty.ar",
],
)
pkg_files(
name = "ars_pf",
srcs = [
":ars",
],
attributes = pkg_attributes(
group = "root",
mode = "0755",
user = "root",
),
prefix = "/test",
)
genrule(
name = "config_empty",
outs = ["config.txt"],
cmd = "touch $@",
)
pkg_files(
name = "config_file",
srcs = [":config_empty"],
attributes = pkg_attributes(
group = "root",
mode = "0644",
rpm_filetag = "%config(missingok, noreplace)",
user = "root",
),
)
pkg_mkdirs(
name = "var_log_foo",
attributes = pkg_attributes(
group = "root",
mode = "0755",
user = "root",
),
dirs = ["/var/log/foo"],
)
pkg_mklink(
name = "test_links",
attributes = pkg_attributes(
group = "root",
mode = "0777",
user = "root",
),
link_name = "/usr/bin/link-name",
target = "/usr/bin/link-target",
)
pkg_filegroup(
name = "test_pfg",
# Keep this list in sync with the values of "srcs" in "test_rpm_direct",
# below
srcs = [
":ars_pf",
":config_file",
":test_links",
":var_log_foo",
],
)
############################################################################
# Test RPMs
############################################################################
pkg_rpm(
name = "test_rpm",
srcs = [
":test_pfg",
],
architecture = "noarch",
conflicts = ["not-a-test"],
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
post_scriptlet = """echo post""",
postun_scriptlet = """echo postun""",
pre_scriptlet = """echo pre""",
preun_scriptlet = """echo preun""",
provides = ["test"],
release = "2222",
requires = ["test-lib > 1.0"],
requires_contextual = {"preun": ["bash"]},
spec_template = "template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
# Just like the above one, except the compression is changed.
pkg_rpm(
name = "test_rpm_bzip2",
srcs = [
":test_pfg",
],
architecture = "noarch",
binary_payload_compression = "w2.bzdio",
conflicts = ["not-a-test"],
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
post_scriptlet = """echo post""",
postun_scriptlet = """echo postun""",
pre_scriptlet = """echo pre""",
preun_scriptlet = """echo preun""",
provides = ["test"],
release = "2222",
requires = ["test-lib > 1.0"],
requires_contextual = {"preun": ["bash"]},
spec_template = "template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
# Like the first one, except `srcs` is now passed in without using a
# pkg_filegroup.
pkg_rpm(
name = "test_rpm_direct",
srcs = [
":ars_pf",
":config_file",
":test_links",
":var_log_foo",
],
architecture = "noarch",
conflicts = ["not-a-test"],
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
post_scriptlet = """echo post""",
postun_scriptlet = """echo postun""",
pre_scriptlet = """echo pre""",
preun_scriptlet = """echo preun""",
provides = ["test"],
release = "2222",
requires = ["test-lib > 1.0"],
requires_contextual = {"preun": ["bash"]},
spec_template = "template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
############################################################################
# Test RPM metadata -- used to verify RPM contents in tests
############################################################################
# Emit a CSV file providing a manifest providing the expected RPM contents
genrule(
name = "test_rpm_manifest",
srcs = [
":ars",
":config_file",
],
outs = ["manifest.csv"],
# Keep the header (the first line echo'd below) in sync with
# rpm_queryformat_fieldnames in pkg_rpm_basic_test.py
cmd = """
echo 'path,digest,user,group,mode,fflags,symlink' > $@
for f in $(locations :ars); do
# Destination path
(
echo -n /test/$$(basename $$f),
# Hash
$(execpath //tests/util:md5) $$f | tr '\\n' ,
# User,Group,Mode,Fflags (fflags not provided)
echo -n 'root,root,100755,'
# Symlink destination (not provided)
echo ,
) >> $@
done
# Config file
for f in $(location :config_file); do
(
echo -n /$$(basename $$f),
$(execpath //tests/util:md5) $$f | tr '\\n' ,
# User,Group,Mode,Fflags (fflags "cmn" = config + missingok + noreplace)
echo -n 'root,root,100644,cmn'
# Symlink destination (not provided)
echo ,
) >> $@
done
# Directory (has no hash)
(
echo -n /var/log/foo,
# No hash (beginning), fflags (end), or symlink destination (end)
echo ,root,root,40755,,
) >> $@
# Symlink (has no hash)
(
echo -n /usr/bin/link-name,
# No hash (beginning), or fflags (second-to-last)
echo ,root,root,120777,,/usr/bin/link-target
) >> $@
""",
tools = ["//tests/util:md5"],
)
genrule(
name = "test_rpm_metadata",
srcs = [],
outs = [
"conflicts.csv",
"provides.csv",
"requires.csv",
],
# In the below, we don't use the "," separator for everything, because the
# query tags used to get the associated dependency types
# (e.g. %{REQUIREFLAGS:deptype}) itself uses commas. This makes it so the test
# doesn't have to rely on knowing the number of fields in each CSV file.
cmd = """
(
echo 'capability:sense'
echo 'not-a-test:manual'
) > $(RULEDIR)/conflicts.csv
(
# NOTE: excludes the "self-require" (we did nothing special to make it
# appear)
echo 'capability:sense'
echo 'test:manual'
echo 'config(test_rpm) = 1.1.1-2222:config'
) > $(RULEDIR)/provides.csv
(
# NOTE: excludes 'rpmlib' requires that may be version-dependent
echo 'capability:sense'
# Common, automatically generated
echo '/bin/sh:pre,interp'
echo '/bin/sh:post,interp'
echo '/bin/sh:preun,interp'
echo '/bin/sh:postun,interp'
# Hand-specified, specific dependencies
echo 'bash:preun'
# Hand-specified
echo 'test-lib > 1.0:manual'
echo 'config(test_rpm) = 1.1.1-2222:config'
) > $(RULEDIR)/requires.csv
""",
)
# 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 = "pkg_rpm_basic_test_data",
testonly = True,
srcs = [
":test_rpm",
":test_rpm_bzip2",
":test_rpm_direct",
":test_rpm_manifest",
":test_rpm_metadata",
],
)
############################################################################
# Confirm that the %dir tag is being applied properly (#473)
############################################################################
pkg_mkdirs(
name = "dirtest_dirs",
attributes = pkg_attributes(mode = "0755"),
dirs = [
"dir",
],
)
pkg_files(
name = "dirtest_file",
srcs = [
":config_empty",
],
attributes = pkg_attributes(mode = "0644"),
prefix = "dir",
)
pkg_rpm(
name = "test_rpm_dirs",
srcs = [
# Do not sort. Order important for testing.
":dirtest_file",
":dirtest_dirs",
],
architecture = "noarch",
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
release = "2222",
spec_template = "template-test.spec.tpl",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
genrule(
name = "test_rpm_dirs_contents",
srcs = [":test_rpm_dirs"],
outs = [":test_rpm_dirs_contents.txt"],
cmd = """
# pkg_rpm emits two outputs
RPMS=($(SRCS))
rpm -qp --queryformat '[%{FILEMODES:perms} %{FILENAMES}\n]' $${RPMS[0]} > $@
""",
)
diff_test(
name = "test_rpm_dirs_contents_golden_test",
file1 = ":test_rpm_dirs_contents",
file2 = "test_rpm_dirs_contents.txt.golden",
)
############################################################################
# Common tests
############################################################################
py_library(
name = "rpm_util",
srcs = ["rpm_util.py"],
imports = ["../.."],
visibility = [":__subpackages__"],
)
py_test(
name = "make_rpm_test",
srcs = ["make_rpm_test.py"],
python_version = "PY3",
srcs_version = "PY3",
deps = [
"//pkg:make_rpm_lib",
],
)
# RPM content verification tests
py_test(
name = "pkg_rpm_basic_test",
srcs = ["pkg_rpm_basic_test.py"],
data = [":pkg_rpm_basic_test_data"],
python_version = "PY3",
tags = [
"no_windows", # Windows doesn't have rpm(8) or rpmbuild(8)
],
deps = [
":rpm_util",
"@rules_python//python/runfiles",
],
)
# Smoke test for defaults
pkg_rpm(
name = "test_rpm_default_template",
testonly = True,
srcs = [
":test_pfg",
],
architecture = "noarch",
description = """pkg_rpm test rpm description""",
license = "Apache 2.0",
release = "2222",
summary = "pkg_rpm test rpm summary",
version = "1.1.1",
)
build_test(
name = "pkg_rpm_smoke",
targets = [":test_rpm_default_template"],
)