diff --git a/TEST_MAPPING b/TEST_MAPPING
index 69d4568..d8b294b 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -2,7 +2,11 @@
   "presubmit": [
     {
       "name": "MicrodroidHostTestCases"
+    },
+    {
+      "name": "ComposHostTestCases"
     }
+
   ],
   "postsubmit": [
     // TODO(jiyong): promote this to presubmit. That currently doesn't work because
diff --git a/compos/tests/java/android/compos/test/ComposKeyTestCase.java b/compos/tests/java/android/compos/test/ComposKeyTestCase.java
new file mode 100644
index 0000000..654dc0b
--- /dev/null
+++ b/compos/tests/java/android/compos/test/ComposKeyTestCase.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2021 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.
+ */
+
+package android.compos.test;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.platform.test.annotations.RootPermissionTest;
+import android.virt.test.CommandRunner;
+import android.virt.test.VirtualizationTestCaseBase;
+
+import com.android.compatibility.common.util.PollingCheck;
+import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
+import com.android.tradefed.util.CommandResult;
+import com.android.tradefed.util.CommandStatus;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RootPermissionTest
+@RunWith(DeviceJUnit4ClassRunner.class)
+public final class ComposKeyTestCase extends VirtualizationTestCaseBase {
+
+    /** Wait time for service to be ready on boot */
+    private static final int READY_LATENCY_MS = 10 * 1000; // 10 seconds
+
+    // Path to compos_key_cmd tool
+    private static final String COMPOS_KEY_CMD_BIN = "/apex/com.android.compos/bin/compos_key_cmd";
+
+    private String mCid;
+
+    @Before
+    public void setUp() throws Exception {
+        testIfDeviceIsCapable(getDevice());
+
+        prepareVirtualizationTestSetup(getDevice());
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (mCid != null) {
+            shutdownMicrodroid(getDevice(), mCid);
+            mCid = null;
+        }
+
+        cleanUpVirtualizationTestSetup(getDevice());
+    }
+
+    @Test
+    public void testKeyService() throws Exception {
+        startVm();
+        waitForServiceRunning();
+
+        CommandRunner android = new CommandRunner(getDevice());
+        CommandResult result;
+
+        // Generate keys - should succeed
+        android.run(
+                COMPOS_KEY_CMD_BIN,
+                "--cid " + mCid,
+                "generate",
+                TEST_ROOT + "test_key.blob",
+                TEST_ROOT + "test_key.pubkey");
+
+        // Verify them - should also succeed, since we just generated them
+        android.run(
+                COMPOS_KEY_CMD_BIN,
+                "--cid " + mCid,
+                "verify",
+                TEST_ROOT + "test_key.blob",
+                TEST_ROOT + "test_key.pubkey");
+
+        // Swap public key & blob - should fail to verify
+        result =
+                android.runForResult(
+                        COMPOS_KEY_CMD_BIN,
+                        "--cid " + mCid,
+                        "verify",
+                        TEST_ROOT + "test_key.pubkey",
+                        TEST_ROOT + "test_key.blob");
+        assertThat(result.getStatus()).isEqualTo(CommandStatus.FAILED);
+
+        // Generate another set of keys - should succeed
+        android.run(
+                COMPOS_KEY_CMD_BIN,
+                "--cid " + mCid,
+                "generate",
+                TEST_ROOT + "test_key2.blob",
+                TEST_ROOT + "test_key2.pubkey");
+
+        // They should also verify ok
+        android.run(
+                COMPOS_KEY_CMD_BIN,
+                "--cid " + mCid,
+                "verify",
+                TEST_ROOT + "test_key2.blob",
+                TEST_ROOT + "test_key2.pubkey");
+
+        // Mismatched key blob & public key should fail to verify
+        result =
+                android.runForResult(
+                        COMPOS_KEY_CMD_BIN,
+                        "--cid " + mCid,
+                        "verify",
+                        TEST_ROOT + "test_key.pubkey",
+                        TEST_ROOT + "test_key2.blob");
+        assertThat(result.getStatus()).isEqualTo(CommandStatus.FAILED);
+    }
+
+    private void startVm() throws Exception {
+        final String apkName = "CompOSPayloadApp.apk";
+        final String packageName = "com.android.compos.payload";
+        mCid =
+                startMicrodroid(
+                        getDevice(),
+                        getBuild(),
+                        apkName,
+                        packageName,
+                        "assets/key_service_vm_config.json",
+                        /* debug */ true);
+        adbConnectToMicrodroid(getDevice(), mCid);
+    }
+
+    private void waitForServiceRunning() {
+        try {
+            PollingCheck.waitFor(READY_LATENCY_MS, this::isServiceRunning);
+        } catch (Exception e) {
+            throw new RuntimeException("Service unavailable", e);
+        }
+    }
+
+    private boolean isServiceRunning() {
+        return tryRunOnMicrodroid("pidof compos_key_main") != null;
+    }
+}
diff --git a/compos/tests/java/android/compos/test/ComposTestCase.java b/compos/tests/java/android/compos/test/ComposTestCase.java
index 503e0f9..72eeb2b 100644
--- a/compos/tests/java/android/compos/test/ComposTestCase.java
+++ b/compos/tests/java/android/compos/test/ComposTestCase.java
@@ -16,20 +16,19 @@
 
 package android.compos.test;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
+import static com.google.common.truth.Truth.assertThat;
 
 import android.platform.test.annotations.RootPermissionTest;
 import android.virt.test.CommandRunner;
 import android.virt.test.VirtualizationTestCaseBase;
 
 import com.android.compatibility.common.util.PollingCheck;
-import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
 import com.android.tradefed.util.CommandResult;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -53,27 +52,16 @@
     private String mCid;
 
     @Before
-    public void setUp() throws DeviceNotAvailableException {
+    public void setUp() throws Exception {
         testIfDeviceIsCapable(getDevice());
 
         prepareVirtualizationTestSetup(getDevice());
 
-        final String apkName = "CompOSPayloadApp.apk";
-        final String packageName = "com.android.compos.payload";
-        final String configPath = "assets/vm_config.json"; // path inside the APK
-        mCid =
-                startMicrodroid(
-                        getDevice(),
-                        getBuild(),
-                        apkName,
-                        packageName,
-                        configPath,
-                        /* debug */ true);
-        adbConnectToMicrodroid(getDevice(), mCid);
+        startComposVm();
     }
 
     @After
-    public void tearDown() throws DeviceNotAvailableException {
+    public void tearDown() throws Exception {
         if (mCid != null) {
             shutdownMicrodroid(getDevice(), mCid);
             mCid = null;
@@ -83,7 +71,8 @@
     }
 
     @Test
-    public void testOdrefresh() throws DeviceNotAvailableException, InterruptedException {
+    @Ignore("b/192294431")
+    public void testOdrefresh() throws Exception {
         waitForServiceRunning();
 
         CommandRunner android = new CommandRunner(getDevice());
@@ -95,16 +84,30 @@
                         ODREFRESH_BIN,
                         "--use-compilation-os=" + mCid,
                         "--force-compile");
-        assertThat(result.getExitCode(), is(COMPILATION_SUCCESS));
+        assertThat(result.getExitCode()).isEqualTo(COMPILATION_SUCCESS);
 
         // Expect the output to be valid.
         result = android.runForResultWithTimeout(ODREFRESH_TIMEOUT_MS, ODREFRESH_BIN, "--check");
-        assertThat(result.getExitCode(), is(OKAY));
+        assertThat(result.getExitCode()).isEqualTo(OKAY);
+    }
+
+    private void startComposVm() throws Exception {
+        final String apkName = "CompOSPayloadApp.apk";
+        final String packageName = "com.android.compos.payload";
+        mCid =
+                startMicrodroid(
+                        getDevice(),
+                        getBuild(),
+                        apkName,
+                        packageName,
+                        "assets/vm_config.json",
+                        /* debug */ true);
+        adbConnectToMicrodroid(getDevice(), mCid);
     }
 
     private void waitForServiceRunning() {
         try {
-            PollingCheck.waitFor(COMPSVC_READY_LATENCY_MS, () -> isServiceRunning());
+            PollingCheck.waitFor(COMPSVC_READY_LATENCY_MS, this::isServiceRunning);
         } catch (Exception e) {
             throw new RuntimeException("Service unavailable", e);
         }
diff --git a/tests/hostside/helper/java/android/virt/test/VirtualizationTestCaseBase.java b/tests/hostside/helper/java/android/virt/test/VirtualizationTestCaseBase.java
index fef8864..4cb9dc0 100644
--- a/tests/hostside/helper/java/android/virt/test/VirtualizationTestCaseBase.java
+++ b/tests/hostside/helper/java/android/virt/test/VirtualizationTestCaseBase.java
@@ -40,7 +40,7 @@
 import java.util.regex.Pattern;
 
 public abstract class VirtualizationTestCaseBase extends BaseHostJUnit4Test {
-    private static final String TEST_ROOT = "/data/local/tmp/virt/";
+    protected static final String TEST_ROOT = "/data/local/tmp/virt/";
     private static final String VIRT_APEX = "/apex/com.android.virt/";
     private static final int TEST_VM_ADB_PORT = 8000;
     private static final String MICRODROID_SERIAL = "localhost:" + TEST_VM_ADB_PORT;
