Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e82b9fb5 authored by Victor Hsieh's avatar Victor Hsieh
Browse files

New integration test for fs-verity install and on-access verification

There are two categories of tests:

1. Package installation with .fsv_sig
  * .apk, .dm, including the split ones should all or none be installed
     with their corresponding .fsv_sig files

2. End-to-end fs-verity test of on-access verification
  * When fs-verity is enabled to a file, if the on-disk content is
    changed, the read should fail.

See class comment in ApkVerityTest.java for the test details.

Brief directory layout overview:
* src/
  - Actual test
* ApkVerityTestApp/
  - Dummy app for testing, including a split
* testdata/
  - Some artifacts, signing key and fs-verity signatures
* block_device_writer/
  - Helper binary for write a file directly on disk

Test: atest
Bug: 112039386
Change-Id: I3b8229037db682f36fda9d5cafd14caf6b39501d
parent a620de30
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
// Copyright (C) 2019 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.

java_test_host {
    name: "ApkVerityTests",
    srcs: ["src/**/*.java"],
    libs: ["tradefed", "compatibility-tradefed", "compatibility-host-util"],
    test_suites: ["general-tests"],
    target_required: [
        "block_device_writer_module",
        "ApkVerityTestApp",
        "ApkVerityTestAppSplit",
    ],
    data: [
        ":ApkVerityTestCertDer",
        ":ApkVerityTestAppFsvSig",
        ":ApkVerityTestAppDm",
        ":ApkVerityTestAppDmFsvSig",
        ":ApkVerityTestAppSplitFsvSig",
        ":ApkVerityTestAppSplitDm",
        ":ApkVerityTestAppSplitDmFsvSig",
    ],
}
+41 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2019 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="APK fs-verity integration/regression test">
    <option name="test-suite-tag" value="apct" />

    <!-- This test requires root to write against block device. -->
    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer" />

    <target_preparer class="com.android.tradefed.targetprep.DeviceSetup">
        <!-- Disable package verifier prevents it holding the target APK's fd that prevents cache
             eviction. -->
        <option name="set-global-setting" key="package_verifier_enable" value="0" />
        <option name="restore-settings" value="true" />

        <!-- Skip in order to prevent reboot that confuses the test flow. -->
        <option name="force-skip-system-props" value="true" />
    </target_preparer>

    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
        <option name="cleanup" value="true" />
        <option name="push" value="block_device_writer->/data/local/tmp/block_device_writer" />
        <option name="push" value="ApkVerityTestCert.der->/data/local/tmp/ApkVerityTestCert.der" />
    </target_preparer>

    <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" >
        <option name="jar" value="ApkVerityTests.jar" />
    </test>
</configuration>
+29 −0
Original line number Diff line number Diff line
// Copyright (C) 2019 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.

android_test_helper_app {
  name: "ApkVerityTestApp",
  manifest: "AndroidManifest.xml",
  srcs: ["src/**/*.java"],
}

android_test_helper_app {
  name: "ApkVerityTestAppSplit",
  manifest: "feature_split/AndroidManifest.xml",
  srcs: ["src/**/*.java"],
  aaptflags: [
      "--custom-package com.android.apkverity.feature_x",
      "--package-id 0x80",
  ],
}
+23 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  * Copyright (C) 2019 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.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.apkverity">
    <application>
        <activity android:name=".DummyActivity"/>
    </application>
</manifest>
+25 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  * Copyright (C) 2019 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.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.apkverity"
    android:isFeatureSplit="true"
    split="feature_x">
    <application>
        <activity android:name=".feature_x.DummyActivity"/>
    </application>
</manifest>
Loading