# Copyright (C) 2018 The Android Open Source Project
#
# 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.

# This file lists projects with optional hosttests and unittests to run for
# those projects in the following format:
# [
#     # Add projects to, or remove projects from, list of projects to build.
#     # Does not affect builds where the project list is passed on the command
#     # line.
#     build(
#         # List of projects that this build entry applies to. Required.
#         projects=[
#             "<project>",
#             ...
#         ]
#         # If enabled is set to True or ommitted, add projects to list of
#         # projects to build. If enabled is set to False, remove projects from
#         # list of projects to build.
#         enabled=<True|False>
#     ),
#     ...
#     # Specify tests to run for specific projects.
#     testmap(
#         # List of projects that this testmap entry applies to. Required.
#         projects=[
#             "<project>",
#             ...
#         ]
#         # List of host-tests to run. Optional
#         tests=[
#             # Run a program on the host
#             hosttest("some_host_binary"),
#             # Use test-runner to activate a Trusty IPC port
#             boottest("port.under.test"),
#             # Use Android to activate a Trusty IPC port
#             androidport("port.under.test"),
#             # Run a shell command inside Android
#             androidtest(name="test_name", command="command to run"),
#             ...
#         ],
#     ),
#     ...
#     # Include another configuration file. If optional is True, and the file
#     # does not exist, the include statement is ignored.
#     include(<file>, optional=<True|False>),
# ]

[
    testmap(
        projects=[
            "generic-arm64-test-debug",
        ],
        tests=[
            hosttest("avb_test"),
            hosttest("keymaster_test"),
            hosttest("mock_storage_test"),
            hosttest("storage_test"),
            hosttests([
                include("trusty/kernel/build-config-kerneltests"),
                include("trusty/user/base/build-config-usertests"),
            ]),
        ],
    ),
    include("../../proprietary/scripts/build-config", optional=True),
    testmap(
        projects=[
            "qemu-generic-arm32-gicv3-test-debug",
            "qemu-generic-arm32-test-debug",
            "qemu-generic-arm64-fuzz-test-debug",
            "qemu-generic-arm64-gicv3-test-debug",
            "qemu-generic-arm64-test-debug",
            "qemu-generic-arm64u32-test-debug",
        ],
        tests=[
            # Boot tests (test-runner + kernel only)
            boottests([
                include("trusty/kernel/build-config-kerneltests"),
                include("trusty/user/base/build-config-usertests"),
            ]),
            # Android shell port tests - same as above, but triggered with
            # Linux + android userspace present
            androidporttests([
                include("trusty/kernel/build-config-kerneltests"),
                include("trusty/user/base/build-config-usertests"),
            ]),

            # Trusty linux driver tests. Unbind and bind to trigger remove and
            # probe function.
            androidtest(name="irq-driver",
                        command="echo 'trusty:irq' >"
                                "/sys/bus/platform/drivers/trusty-irq/unbind"
                                "&&"
                                "echo 'trusty:irq' >"
                                "/sys/bus/platform/drivers/trusty-irq/bind"),

            androidtest(name="log-driver",
                        command="echo 'trusty:log' >"
                                "/sys/bus/platform/drivers/trusty-log/unbind"
                                "&&"
                                "echo 'trusty:log' >"
                                "/sys/bus/platform/drivers/trusty-log/bind"),

            androidtest(name="virtio-driver",
                        # virtio remove currently hangs (bug: 142275662).
                        # Disable test until fixed
                        enabled=False,
                        command="echo 'trusty:virtio' >"
                                "/sys/bus/platform/drivers/trusty-virtio/unbind"
                                "&&"
                                "echo 'trusty:virtio' >"
                                "/sys/bus/platform/drivers/trusty-virtio/bind"),

            androidtest(name="trusty-driver",
                        # virtio remove currently hangs (bug: 142275662).
                        # Disable affected test until fixed
                        enabled=False,
                        command="echo trusty >"
                                "/sys/bus/platform/drivers/trusty/unbind"
                                "&&"
                                "echo trusty >"
                                "/sys/bus/platform/drivers/trusty/bind"),

            # test that trusty driver started and got a version string
            androidtest(name="trusty-driver-version",
                        command="TRUSTY_VERSION=$(cat /sys/bus/platform/"
                                "devices/trusty/trusty_version)"
                                "&&"
                                "echo Trusty version: ${TRUSTY_VERSION}"
                                "&&"
                                "if [[ \"${TRUSTY_VERSION}\" != \"Build:\"* ]];"
                                "then "
                                "echo Unexpected trusty version string;"
                                "exit 1;"
                                "fi"),

            # stdcall test with shared memory buffers.
            # Each test run takes up to 4 arguments:
            # <obj_size>,<obj_count=1>,<repeat_share=1>,<repeat_access=3>
            #
            # Test single 4K shared memory object.
            # Test 10 8MB objects, shared twice, each accessed twice. (8MB non-
            # contiguous object is large enough to need several 4KB messages to
            # describe)
            # Test sharing 2 8MB objects 100 times without accessing it.
            # Test 10 4K shared memory objects, shared 10 times, each accessed
            # 10 times.
            androidtest(name="stdcalltest",
                        command="echo '0x1000 "
                                "0x800000,10,2,2 "
                                "0x800000,2,100,0 "
                                "0x1000,10,10,10' >"
                                "'/sys/devices/platform/trusty/"
                                "trusty:test/trusty_test_run'"),

            # TIPC tests
            androidtest(name="tipc:ta2ta",
                        command="/data/nativetest64/vendor/tipc-test/tipc-test "
                                "-t ta2ta-ipc"),

            # TIPC linux to trusty echo test
            androidtest(name="tipc:echo",
                        command="/data/nativetest64/vendor/tipc-test/tipc-test "
                                "-t echo -r 100"),

            # NS shares NS memory with S
            androidtest(name="tipc:send-fd",
                        command="/data/nativetest64/vendor/tipc-test/tipc-test "
                                "-t send-fd"),

            # Storage proxy restart test. The keymaster storage wrapper keeps a
            # persistent connection to the storage server. Test that this
            # connection gets re-established when the storage proxy restarts.
            androidtest(name="storage-proxy-restart",
                        command="/data/nativetest64/vendor/trusty-ut-ctrl/"
                                "trusty-ut-ctrl "
                                "com.android.keymaster-unittest"
                                "&&"
                                "stop storageproxyd"
                                "&&"
                                "killall storageproxyd"
                                "&&"
                                "("
                                "sleep 5"
                                "&&"
                                "start storageproxyd"
                                "&"
                                "/data/nativetest64/vendor/trusty-ut-ctrl/"
                                "trusty-ut-ctrl "
                                "com.android.keymaster-unittest"
                                "&&"
                                "wait"
                                ")"
                                "&&"
                                "/data/nativetest64/vendor/trusty-ut-ctrl/"
                                "trusty-ut-ctrl "
                                "com.android.keymaster-unittest"),

            # Test keymaster attestation key provisioning
            androidtest(name="keymaster-set-attestation-keys",
                        command="/vendor/bin/"
                                "trusty_keymaster_set_attestation_key "
                                "/vendor/etc/"
                                "keymaster_soft_attestation_keys.xml"),

            # Test keymaster attestation
            androidtest(name="vts:keymaster-attestation@4.0",
                        command="setprop ro.boot.verifiedbootstate fake"
                                "&&"
                                "/data/nativetest64/"
                                "VtsHalKeymasterV4_0TargetTest/"
                                "VtsHalKeymasterV4_0TargetTest"
                                " --gtest_filter=\""
                                "*/AttestationTest.RsaAttestation/*:"
                                "*/AttestationTest.EcAttestation/*:"
                                "*/AttestationTest.AttestationApplication"
                                "IDLengthProperlyEncoded/*"
                                "\""),
            # VTS
            androidtest(name="vts:gatekeeper@1.0",
                        command="/data/nativetest64/"
                                "VtsHalGatekeeperV1_0TargetTest/"
                                "VtsHalGatekeeperV1_0TargetTest"),
            # VerificationTokenTest.TestCreation and
            # VerificationTokenTest.MacChangesOnChangingTimestamp *should* pass,
            # but do timing measurements such that the emulator won't always
            # pass.
            #
            # These tests should pass *most* of the time on the emulator, but
            # are too flaky to have on in presubmit.
            #
            # If we test on real devices, these tests should be *on*.
            #
            # ClearOperationsTest.TooManyOperations is excluded from testing
            # because KM4 VTS leaks operation slots on Trusty (b/146083990).
            #
            # AttestationTest.RsaAttestation, AttestationTest.EcAttestation, and
            # AttestationTest.AttestationApplicationIDLengthProperlyEncoded are
            # excluded from testing, since attestation is not set on the
            # emulator.
            androidtest(name="vts:keymaster@4.0",
                        command="/data/nativetest64/"
                                "VtsHalKeymasterV4_0TargetTest/"
                                "VtsHalKeymasterV4_0TargetTest"
                                " --gtest_filter="
                                "\"-*/VerificationTokenTest.TestCreation/*:"
                                "*/VerificationTokenTest."
                                "MacChangesOnChangingTimestamp/*:"
                                "*/ClearOperationsTest.TooManyOperations/*:"
                                "*/AttestationTest.RsaAttestation/*:"
                                "*/AttestationTest.EcAttestation/*:"
                                "*/AttestationTest.AttestationApplication"
                                "IDLengthProperlyEncoded/*\"",
                        timeout=(60 * 20)),
        ],
    ),
]
