<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<configuration description="Runs ApexTestCases">
    <option name="test-suite-tag" value="apct" />
    <option name="test-suite-tag" value="apct-native" />
    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
        <option name="cleanup" value="true" />
        <!-- Note: despite how this line reads, it will push the complete testcase directory, thus
                   all apexes that are required by the blueprint's data[] tag. -->
        <option name="push" value="ApexTestCases->/data/local/tmp/ApexTestCases" />
    </target_preparer>

    <!-- The test runs as root to prepare the temporary directory, make selinux adjustments
         and so on to provide files that apexd can consume. This is done to avoid dependencies
         on higher levels (e.g., PackageInstaller). -->
    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer" />

    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
      <option name="cleanup" value="true" />
      <option name="remount-system" value="true" />
      <option name="push" value="apex.apexd_test.apex->/system_ext/apex/apex.apexd_test.apex" />
      <option name="push" value="apex.apexd_test_different_app.apex->/system_ext/apex/apex.apexd_test_different_app.apex" />
      <option name="push" value="apex.apexd_test_postinstall.apex->/system_ext/apex/apex.apexd_test_postinstall.apex" />
      <option name="push" value="apex.apexd_test_preinstall.apex->/system_ext/apex/apex.apexd_test_preinstall.apex" />
    </target_preparer>

    <!-- system_server might still hold a reference to apexservice. This means that apexd is still
         running, and test apexes pushed in the PushFilePreparer above are not yet scanned.
         One way to solve this is to reboot a device, but that would significantly increase
         execution of this test module. Instead, force a GC in system_server by sending kill -10. -->
    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
      <option name="run-command" value="shell kill -10 $(pidof system_server)" />
      <option name="teardown-command" value="shell kill -10 $(pidof system_server)" />
    </target_preparer>

    <test class="com.android.tradefed.testtype.GTest" >
        <!-- Note: despite how these lines read, the test will run nicely separated out
                   of a subfolder. -->
        <option name="native-test-device-path" value="/data/local/tmp" />
        <option name="module-name" value="ApexTestCases" />
    </test>
</configuration>
