# 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("@bazel_skylib//rules:common_settings.bzl", "string_flag")
load("@rules_python//python:defs.bzl", "py_test")
load("//pkg:install.bzl", "pkg_install")
load("//pkg:mappings.bzl", "pkg_attributes", "pkg_files", "pkg_mkdirs", "pkg_mklink")
load("//tests/util:defs.bzl", "directory", "fake_artifact")

package(default_applicable_licenses = ["//:license"])

py_test(
    name = "install_test",
    srcs = ["test.py"],
    args = ["-v"],
    data = [
        ":test_installer",
        ":test_installer_flag",
        "@mappings_test_external_repo//pkg:install_cross_repo",
    ],
    imports = ["../.."],
    main = "test.py",
    tags = [
        # TODO(nacl): investigate this.  See also
        # https://buildkite.com/bazel/rules-pkg/builds/961#992dbe09-7e4b-4e34-91b6-491120476ed3
        "no-windows",
        # TODO(nacl): consider enabling this for testing on Linux.
        #"requires-fakeroot"
    ],
    deps = [
        "//pkg/private:manifest",
        "@rules_python//python/runfiles",
    ],
)

pkg_install(
    name = "test_installer",
    srcs = [
        ":artifact-in-owned-dir",
        ":artifact-in-unowned-dir",
        ":dirs",
        ":fake_lib_link",
        ":fake_so_in_lib",
        ":generate_tree_pkg_files",
    ],
)

fake_artifact(
    name = "artifact",
)

pkg_files(
    name = "artifact-in-owned-dir",
    srcs = ["artifact"],
    attributes = pkg_attributes(mode = "0700"),
    prefix = "owned-dir",
)

pkg_files(
    name = "artifact-in-unowned-dir",
    srcs = ["artifact"],
    attributes = pkg_attributes(mode = "0755"),
    prefix = "unowned-dir",
)

pkg_mkdirs(
    name = "dirs",
    dirs = [
        "empty-owned-dir",
        "owned-dir",
    ],
)

directory(
    name = "generate_tree",
    contents = "hello there",
    filenames = [
        # buildifier: don't sort
        "b/e",
        "a/a",
        "b/c/d",
        "b/d",
        "a/b/c",
    ],
)

pkg_files(
    name = "generate_tree_pkg_files",
    srcs = [":generate_tree"],
    attributes = pkg_attributes(
        mode = "640",
    ),
)

fake_artifact(
    name = "fake.so.1.2.3",
)

pkg_files(
    name = "fake_so_in_lib",
    srcs = [":fake.so.1.2.3"],
    prefix = "/lib",
)

pkg_mklink(
    name = "fake_lib_link",
    link_name = "/lib/fake.so.1",
    target = "fake.so.1.2.3",
)

string_flag(
    name = "install_dir",
    build_setting_default = "FromFlag",
)

pkg_install(
    name = "test_installer_flag",
    srcs = [
        ":artifact-in-owned-dir",
    ],
    destdir_flag = ":install_dir",
)
