# Copyright (C) 2020 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 tests for Storage TA
[
    # Host Tests
    hosttest("mock_storage_test"),
    hosttest("storage_block_test"),
    hosttest("storage_host_test"),
    hosttest("storage_host_test_no_staging"),

    # userspace tests using storage available at early boot
    needs(
        [
            porttest("com.android.trusty.rust.storage_unittest_aidl.test", timeout=(60 * 30))
                .needs(storage_full=False),

            # init->check->clean is a side-effectful test chain
            # so we use a composite test to preserve order
            compositetest(
                name="com.android.storage-unittest.tp-init-check-clean",
                sequence=[
                    porttest("com.android.storage-unittest.tp.init"),
                    reboot(),
                    porttest("com.android.storage-unittest.tp.check"),
                    porttest("com.android.storage-unittest.tp.clean"),

                ]
            ),
            porttest("com.android.storage-unittest.tp", timeout=(60 * 30)),
        ],
        storage_boot=True,
        storage_tp=True,
    ),
    needs(
        [
            compositetest(
                name="com.android.storage-unittest.tdea-init-check-clean",
                sequence=[
                    porttest("com.android.storage-unittest.tdea.init"),
                    reboot(),
                    porttest("com.android.storage-unittest.tdea.check"),
                    porttest("com.android.storage-unittest.tdea.clean"),
                ]
            ),
            porttest("com.android.storage-unittest.tdea", timeout=(60 * 30)),
        ],
        storage_boot=True,
    ),

    # Storage tests which require a nonsecure file
    # These need Android or a similar resource to run, simple RPMB
    # in testrunner is insufficient.
    needs(
        [
            porttest("com.android.trusty.rust.storage_unittest_aidl_ns.test", timeout=(60 * 30)),
            porttest("com.android.storage-unittest.nsp", timeout=(60 * 30)),

            compositetest(
                name="com.android.storage-unittest.td-init-check-clean",
                sequence=[
                    porttest("com.android.storage-unittest.td.init"),
                    reboot(mode=RebootMode.REGULAR),
                    porttest("com.android.storage-unittest.td.check"),
                    reboot(mode=RebootMode.FACTORY_RESET),
                    porttest("com.android.storage-unittest.td.isclean"),
                    # Reboot again to test that the previous factory reset is
                    # still detected. This assumes nothing else writes to td
                    # during this test though.
                    reboot(mode=RebootMode.REGULAR),
                    porttest("com.android.storage-unittest.td.isclean"),
                    porttest("com.android.storage-unittest.td.clean"),
                ]
            ),
            porttest("com.android.storage-unittest.td"),

            compositetest(
                name="com.android.storage-unittest.tdp-init-check-clean",
                sequence=[
                    porttest("com.android.storage-unittest.tdp.init"),
                    reboot(),
                    porttest("com.android.storage-unittest.tdp.check"),
                    porttest("com.android.storage-unittest.tdp.clean"),
                ]
            ),
            porttest("com.android.storage-unittest.tdp", timeout=(60 * 30)),
        ],
        storage_full=True,
    ),
    porttest("com.android.trusty.storage.bench").type(BENCHMARK).needs(storage_full=True),

    # Test that storage behaves correctly for AB updates
    needs(
        [
        compositetest(
            name="android-test:com.android.storage-data-checkpoint-test.td.update",
            sequence=[
                reboot(mode=RebootMode.FACTORY_RESET, androidbootproperties=[AndroidBootProperty.MockBootCtrl.UpdateToSlot(1)]),
                porttest("com.android.storage-data-checkpoint-test.td.abandon"),
                porttest("com.android.storage-data-checkpoint-test.td.write"),
                porttest("com.android.storage-data-checkpoint-test.td.readstaged"),
                androidtest(
                    name="com.android.storage-data-checkpoint-test.td.update.commit",
                    command= "vdc checkpoint commitChanges"
                ),
                porttest("com.android.storage-data-checkpoint-test.td.readstaged"),
                porttest("com.android.storage-data-checkpoint-test.td.commit"),
                porttest("com.android.storage-data-checkpoint-test.td.readstaged"),
                reboot(mode=RebootMode.REGULAR),
                porttest("com.android.storage-data-checkpoint-test.td.readstaged"),
                porttest("com.android.storage-data-checkpoint-test.td.clean"),
            ]),
        compositetest(
            name="android-test:com.android.storage-data-checkpoint-test.td.rollback",
            sequence=[
                reboot(mode=RebootMode.FACTORY_RESET, androidbootproperties=[AndroidBootProperty.MockBootCtrl.UpdateToSlot(1)]),
                porttest("com.android.storage-data-checkpoint-test.td.abandon"),
                porttest("com.android.storage-data-checkpoint-test.td.write"),
                porttest("com.android.storage-data-checkpoint-test.td.readstaged"),
                reboot(mode=RebootMode.REGULAR),
                porttest("com.android.storage-data-checkpoint-test.td.commit"),
                porttest("com.android.storage-data-checkpoint-test.td.readnothing"),
                porttest("com.android.storage-data-checkpoint-test.td.clean"),
            ]),
        needs([
            compositetest(
                name="android-test:com.android.storage-data-checkpoint-test.tp.update",
                sequence=[
                    reboot(mode=RebootMode.FULL_WIPE, androidbootproperties=[AndroidBootProperty.MockBootCtrl.UpdateToSlot(1)]),
                    porttest("com.android.storage-data-checkpoint-test.tp.abandon"),
                    porttest("com.android.storage-data-checkpoint-test.tp.write"),
                    porttest("com.android.storage-data-checkpoint-test.tp.readstaged"),
                    androidtest(
                        name="com.android.storage-data-checkpoint-test.tp.update.commit",
                        command= "vdc checkpoint commitChanges"
                    ),
                    porttest("com.android.storage-data-checkpoint-test.tp.readstaged"),
                    porttest("com.android.storage-data-checkpoint-test.tp.commit"),
                    porttest("com.android.storage-data-checkpoint-test.tp.readstaged"),
                    reboot(mode=RebootMode.REGULAR),
                    porttest("com.android.storage-data-checkpoint-test.tp.readstaged"),
                    porttest("com.android.storage-data-checkpoint-test.tp.clean"),
                ]),
            compositetest(
                name="android-test:com.android.storage-data-checkpoint-test.tp.rollback",
                sequence=[
                    reboot(mode=RebootMode.FULL_WIPE, androidbootproperties=[AndroidBootProperty.MockBootCtrl.UpdateToSlot(1)]),
                    porttest("com.android.storage-data-checkpoint-test.tp.abandon"),
                    porttest("com.android.storage-data-checkpoint-test.tp.write"),
                    porttest("com.android.storage-data-checkpoint-test.tp.readstaged"),
                    reboot(mode=RebootMode.REGULAR),
                    porttest("com.android.storage-data-checkpoint-test.tp.commit"),
                    porttest("com.android.storage-data-checkpoint-test.tp.readnothing"),
                    porttest("com.android.storage-data-checkpoint-test.tp.clean"),
                ]),
            ],
            storage_tp=True),
        ],
        storage_full=True,
        storage_staging=True,
        android=True,
    )
]
