diff --git a/bin/guest/integration_tests/main.cc b/bin/guest/integration_tests/main.cc
index 98f0c8b..da0211c 100644
--- a/bin/guest/integration_tests/main.cc
+++ b/bin/guest/integration_tests/main.cc
@@ -13,13 +13,38 @@
 using ::testing::HasSubstr;
 
 static constexpr char kVirtioRngUtilCmx[] = "meta/virtio_rng_test_util.cmx";
+static constexpr char kLinuxTestUtilDir[] = "/testutils";
+
+class ZirconSingleCpuGuestTest : public GuestTest<ZirconSingleCpuGuestTest> {
+ public:
+  static bool LaunchInfo(fuchsia::guest::LaunchInfo* launch_info) {
+    launch_info->url = kZirconGuestUrl;
+    launch_info->args.push_back("--virtio-gpu=false");
+    launch_info->args.push_back("--cpus=1");
+    launch_info->args.push_back("--cmdline-add=kernel.serial=none");
+    return true;
+  }
+
+  static bool SetUpGuest() {
+    if (WaitForAppmgrReady() != ZX_OK) {
+      ADD_FAILURE() << "Failed to wait for appmgr";
+      return false;
+    }
+    return true;
+  }
+};
+
+TEST_F(ZirconSingleCpuGuestTest, LaunchGuest) {
+  std::string result;
+  EXPECT_EQ(Execute("echo \"test\"", &result), ZX_OK);
+  EXPECT_EQ(result, "test\n");
+}
 
 class ZirconGuestTest : public GuestTest<ZirconGuestTest> {
  public:
   static bool LaunchInfo(fuchsia::guest::LaunchInfo* launch_info) {
     launch_info->url = kZirconGuestUrl;
     launch_info->args.push_back("--virtio-gpu=false");
-    launch_info->args.push_back("--cpus=1");
     launch_info->args.push_back("--cmdline-add=kernel.serial=none");
     return true;
   }
@@ -45,18 +70,27 @@
   EXPECT_THAT(result, HasSubstr("PASS"));
 }
 
-class ZirconMultiprocessorGuestTest
-    : public GuestTest<ZirconMultiprocessorGuestTest> {
+class LinuxSingleCpuGuestTest : public GuestTest<LinuxSingleCpuGuestTest> {
  public:
   static bool LaunchInfo(fuchsia::guest::LaunchInfo* launch_info) {
-    launch_info->url = kZirconGuestUrl;
+    launch_info->url = kLinuxGuestUrl;
     launch_info->args.push_back("--virtio-gpu=false");
-    launch_info->args.push_back("--cmdline-add=kernel.serial=none");
+    launch_info->args.push_back("--cpus=1");
+    launch_info->args.push_back(
+        "--cmdline=loglevel=0 console=hvc0 root=/dev/vda rw");
+    return true;
+  }
+
+  static bool SetUpGuest() {
+    if (WaitForShellReady() != ZX_OK) {
+      ADD_FAILURE() << "Failed to wait for shell";
+      return false;
+    }
     return true;
   }
 };
 
-TEST_F(ZirconMultiprocessorGuestTest, LaunchGuest) {
+TEST_F(LinuxSingleCpuGuestTest, LaunchGuest) {
   std::string result;
   EXPECT_EQ(Execute("echo \"test\"", &result), ZX_OK);
   EXPECT_EQ(result, "test\n");
@@ -67,7 +101,6 @@
   static bool LaunchInfo(fuchsia::guest::LaunchInfo* launch_info) {
     launch_info->url = kLinuxGuestUrl;
     launch_info->args.push_back("--virtio-gpu=false");
-    launch_info->args.push_back("--cpus=1");
     launch_info->args.push_back(
         "--cmdline=loglevel=0 console=hvc0 root=/dev/vda rw");
     return true;
@@ -88,28 +121,10 @@
   EXPECT_EQ(result, "test\n");
 }
 
-class LinuxMultiprocessorGuestTest
-    : public GuestTest<LinuxMultiprocessorGuestTest> {
- public:
-  static bool LaunchInfo(fuchsia::guest::LaunchInfo* launch_info) {
-    launch_info->url = kLinuxGuestUrl;
-    launch_info->args.push_back("--virtio-gpu=false");
-    launch_info->args.push_back(
-        "--cmdline=loglevel=0 console=hvc0 root=/dev/vda rw");
-    return true;
-  }
-
-  static bool SetUpGuest() {
-    if (WaitForShellReady() != ZX_OK) {
-      ADD_FAILURE() << "Failed to wait for shell";
-      return false;
-    }
-    return true;
-  }
-};
-
-TEST_F(LinuxMultiprocessorGuestTest, LaunchGuest) {
+TEST_F(LinuxGuestTest, VirtioRng) {
+  std::string cmd =
+      fxl::StringPrintf("%s/%s", kLinuxTestUtilDir, "virtio_rng_test_util");
   std::string result;
-  EXPECT_EQ(Execute("echo \"test\"", &result), ZX_OK);
-  EXPECT_EQ(result, "test\n");
-}
+  EXPECT_EQ(Execute(cmd, &result), ZX_OK);
+  EXPECT_THAT(result, HasSubstr("PASS"));
+}
\ No newline at end of file
