[guest][integration] Add Linux virtio-rng tests

TEST=guest_integration_tests

Change-Id: If99905db2d598299c6602f3774012a9fe1d63180
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