[ulib][zbi] Convert tests to use zxtest instead of unittest

This was mostly automated, with some manual changes:
 * remove reference to unittest-static
 * drop comments around RUN_TEST uses

Also update the clone of zbi/test/ in src/firmware (which is currently
not compiled by the build) by doing this:

  cp zircon/system/ulib/zbi/test/zbi.cc src/firmware/lib/zbi/test/zbi.cc
  cp zircon/system/ulib/zbi/test/BUILD.gn src/firmware/lib/zbi/test/BUILD.gn

(Those files were identical before this change too.)

Bug: 51652
Test: runs on CQ, but tested locally with:
  fx set bringup.x64 --with-base //garnet/packages/tests:zircon --with-base //bundles/bringup:tests
  fx build
  fx qemu -k -c zircon.autorun.boot=/boot/test/libzbi-test
Change-Id: Ib01692ed4179c601119afb82d31ae216b995f7aa
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/405493
Reviewed-by: David Pursell <dpursell@google.com>
Testability-Review: David Pursell <dpursell@google.com>
Commit-Queue: Mark Seaborn <mseaborn@google.com>
diff --git a/src/firmware/lib/zbi/test/BUILD.gn b/src/firmware/lib/zbi/test/BUILD.gn
index 6ade6c2..4c04210 100644
--- a/src/firmware/lib/zbi/test/BUILD.gn
+++ b/src/firmware/lib/zbi/test/BUILD.gn
@@ -34,15 +34,14 @@
     "//zircon/public/lib/fbl",
     "//zircon/public/lib/pretty",
     "//zircon/public/lib/zbi",
+    "//zircon/public/lib/zxtest",
   ]
   if (is_fuchsia) {
     deps += [
       "//sdk/lib/fdio",
       "//zircon/public/lib/zx",
-      "//zircon/system/ulib/unittest",
     ]
   } else {
-    deps += [ "//zircon/system/ulib/unittest:unittest-static" ]
     output_dir = "$root_out_dir/zircon-migrated"
   }
 }
diff --git a/src/firmware/lib/zbi/test/zbi.cc b/src/firmware/lib/zbi/test/zbi.cc
index 604abf5..97be556 100644
--- a/src/firmware/lib/zbi/test/zbi.cc
+++ b/src/firmware/lib/zbi/test/zbi.cc
@@ -14,7 +14,7 @@
 
 #include <fbl/auto_call.h>
 #include <pretty/hexdump.h>
-#include <unittest/unittest.h>
+#include <zxtest/zxtest.h>
 
 #ifdef __Fuchsia__
 #include <lib/zbi/zbi-zx.h>
@@ -161,156 +161,102 @@
   }
 }
 
-static bool ZbiTestInit() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInit) {
   alignas(ZBI_ALIGNMENT) uint8_t buffer[sizeof(zbi_header_t)];
 
   ASSERT_EQ(zbi_init(buffer, sizeof(buffer)), ZBI_RESULT_OK);
 
   auto* zbi = reinterpret_cast<zbi_header_t*>(buffer);
   ASSERT_EQ(zbi->type, ZBI_TYPE_CONTAINER);
-
-  END_TEST;
 }
 
-static bool ZbiTestInitTooSmall() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInitTooSmall) {
   alignas(ZBI_ALIGNMENT) uint8_t buffer[sizeof(zbi_header_t) - 1];
 
   ASSERT_EQ(zbi_init(buffer, sizeof(buffer)), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestInitNotAligned() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInitNotAligned) {
   alignas(ZBI_ALIGNMENT) uint8_t buffer[sizeof(zbi_header_t) + 1];
   void* misaligned_buffer = &buffer[1];
 
   ASSERT_EQ(zbi_init(misaligned_buffer, sizeof(zbi_header_t)), ZBI_RESULT_BAD_ALIGNMENT);
-
-  END_TEST;
 }
 
-static bool ZbiTestInitNullBuffer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInitNullBuffer) {
   ASSERT_EQ(zbi_init(nullptr, sizeof(zbi_header_t)), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
 // TODO(fxb/52665): Consider pulling out the check logic into a common helper.
-static bool ZbiTestCheckEmptyContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckEmptyContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_OK);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckEmptyContainerWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckEmptyContainerWithErr) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   zbi_header_t* err = nullptr;
 
   EXPECT_EQ(zbi_check(&container, &err), ZBI_RESULT_OK);
   ASSERT_EQ(err, nullptr);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadType() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadType) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadTypeWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadTypeWithErr) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
   zbi_header_t* err = nullptr;
 
   EXPECT_EQ(zbi_check(&container, &err), ZBI_RESULT_BAD_TYPE);
   ASSERT_EQ(err, &container);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadExtra() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadExtra) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.extra = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_MAGIC);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadMagic() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadMagic) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.magic = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_MAGIC);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadVersion() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadVersion) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.flags &= ~ZBI_FLAG_VERSION;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_VERSION);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadCrc32() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadCrc32) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   // Entries with no checksum must have the crc32 field set to ZBI_ITEM_NO_CRC32.
   container.flags &= ~ZBI_FLAG_CRC32;
   container.crc32 = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_CRC);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbi) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
 
   ASSERT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_OK);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi_header_t* err = nullptr;
 
@@ -318,21 +264,13 @@
   ASSERT_EQ(err, nullptr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiNull) {
   ASSERT_EQ(zbi_check(nullptr, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckFirstBadEntryIsMarked() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckFirstBadEntryIsMarked) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.magic = 0;
   zbi->ramdisk_hdr.magic = 0;
@@ -343,26 +281,18 @@
   ASSERT_EQ(err, &zbi->cmdline_hdr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadMagic() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadMagic) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.magic = 0;
 
   EXPECT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_BAD_MAGIC);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadMagicWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadMagicWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.magic = 0;
   zbi_header_t* err = nullptr;
@@ -372,26 +302,18 @@
   ASSERT_EQ(err, &zbi->cmdline_hdr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadVersion() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadVersion) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.flags &= ~ZBI_FLAG_VERSION;
 
   EXPECT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_BAD_VERSION);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadCrc32() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadCrc32) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.flags &= ~ZBI_FLAG_CRC32;
   zbi->cmdline_hdr.crc32 = 0;
@@ -399,38 +321,26 @@
   ASSERT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_BAD_CRC);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiTruncated() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiTruncated) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->header.length = 1;
 
   ASSERT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_ERR_TRUNCATED);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbi) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
 
   ASSERT_EQ(zbi_check_complete(zbi, nullptr), ZBI_RESULT_OK);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi_header_t* err = nullptr;
 
@@ -439,45 +349,29 @@
   ASSERT_EQ(err, nullptr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiNull) {
   ASSERT_EQ(zbi_check_complete(nullptr, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiTruncated() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiTruncated) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.length = 0;
 
   ASSERT_EQ(zbi_check_complete(&container, nullptr), ZBI_RESULT_ERR_TRUNCATED);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiWrongArch() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiWrongArch) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->kernel_hdr.type = 0;
 
   ASSERT_EQ(zbi_check_complete(zbi, nullptr), ZBI_RESULT_INCOMPLETE_KERNEL);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiWrongArchWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiWrongArchWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->kernel_hdr.type = 0;
   zbi_header_t* err = nullptr;
@@ -487,21 +381,15 @@
   ASSERT_EQ(err, &zbi->kernel_hdr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiMissingBootfs() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiMissingBootfs) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->bootfs_hdr.type = ZBI_TYPE_CMDLINE;
 
   ASSERT_EQ(zbi_check_complete(zbi, nullptr), ZBI_RESULT_INCOMPLETE_BOOTFS);
 
   free(zbi);
-
-  END_TEST;
 }
 
 static zbi_result_t count_items_callback(zbi_header_t* header, void* payload, void* cookie) {
@@ -510,40 +398,26 @@
   return ZBI_RESULT_OK;
 }
 
-static bool ZbiTestForEachTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiNull) {
   ASSERT_EQ(zbi_for_each(nullptr, count_items_callback, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiNullCallback() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiNullCallback) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_for_each(&container, nullptr, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   uint32_t count = 0;
 
   // The callback should be invoked with ZBI items and not the container.
   EXPECT_EQ(zbi_for_each(&container, count_items_callback, &count), ZBI_RESULT_OK);
   ASSERT_EQ(count, 0);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiTruncated() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiTruncated) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   // Container length does not include the size of the container header
   zbi->header.length = offsetof(test_zbi_t, cmdline_payload) - sizeof(zbi_header_t);
@@ -554,13 +428,9 @@
   ASSERT_EQ(count, 2);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiItems() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiItems) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   uint32_t count = 0;
 
@@ -568,8 +438,6 @@
   ASSERT_EQ(count, 4);
 
   free(zbi);
-
-  END_TEST;
 }
 
 static zbi_result_t modify_payload_callback(zbi_header_t* header, void* payload, void* cookie) {
@@ -581,9 +449,7 @@
   return ZBI_RESULT_OK;
 }
 
-static bool ZbiTestForEachTestZbiItemsNoCookie() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiItemsNoCookie) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   std::memset(zbi->kernel_payload, 'A', 1);
   std::memset(zbi->cmdline_payload, 'A', 1);
@@ -598,8 +464,6 @@
   EXPECT_EQ(zbi->bootfs_payload[0], 'B');
 
   free(zbi);
-
-  END_TEST;
 }
 
 static zbi_result_t modify_payload_then_error_callback(zbi_header_t* header, void* payload,
@@ -615,9 +479,7 @@
   return ZBI_RESULT_OK;
 }
 
-static bool ZbiTestForEachTestZbiItemsCallbackError() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiItemsCallbackError) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   std::memset(zbi->kernel_payload, 'A', 1);
   std::memset(zbi->cmdline_payload, 'A', 1);
@@ -635,13 +497,9 @@
   EXPECT_EQ(zbi->bootfs_payload[0], 'A');
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbi) {
   // The ZBI has space for the container and an entry with an 8-byte payload.
   single_entry_test_zbi_t zbi;
   void* payload = nullptr;
@@ -655,82 +513,54 @@
 
   // Verify the pointer points to the newly created entry payload.
   EXPECT_EQ(payload, zbi.entry_payload);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiNull) {
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(nullptr, 0, 0, 0, 0, 0, &payload), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiNullPayload() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiNullPayload) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_create_entry(&container, 0, 0, 0, 0, 0, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiCrc32NotSupported() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiCrc32NotSupported) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, 0, 0, 0, ZBI_FLAG_CRC32, 0, &payload), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiNotContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, 0, 0, 0, 0, 0, &payload), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
 // create entry tests
-static bool ZbiTestCreateEntryTestZbiCapacitySmallerThanCurrentSize() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiCapacitySmallerThanCurrentSize) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.length = 2;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, /*capacity=*/1, 0, 0, 0, 0, &payload), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiFull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiFull) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, /*capacity=*/sizeof(container), 0, 0, 0,
                              /*payload_length=*/1, &payload),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiPayloadTooLarge() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiPayloadTooLarge) {
   single_entry_test_zbi_t zbi;
   uint32_t capacity = sizeof(zbi);
   void* payload = nullptr;
@@ -739,13 +569,9 @@
   ASSERT_EQ(zbi_create_entry(&zbi, capacity, 0, 0, 0,
                              /*payload_length=*/capacity, &payload),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbi) {
   // The ZBI will have space for the container and an entry with a small payload.
   single_entry_test_zbi_t zbi;
   uint32_t payload = 0xABCDABCD;
@@ -757,84 +583,56 @@
   // Verify the contents of the payload.
   ASSERT_BYTES_EQ(reinterpret_cast<uint8_t*>(zbi.entry_payload),
                   reinterpret_cast<uint8_t*>(&payload), sizeof(payload), "Mismatched payloads.");
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiNull) {
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(nullptr, 0, 0, 0, 0, &payload, 0), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiNullPayload() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiNullPayload) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, 0, 0, 0, 0, nullptr, 0), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiCrc32NotSupported() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiCrc32NotSupported) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, 0, 0, 0, ZBI_FLAG_CRC32, &payload, 0),
             ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiNotContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, 0, 0, 0, 0, &payload, 0),
             ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiCapacitySmallerThanCurrentSize() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiCapacitySmallerThanCurrentSize) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.length = 2;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, /*capacity=*/1, 0, 0, 0, &payload, 0),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiSectionTooLarge() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiSectionTooLarge) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, /*capacity=*/1, 0, 0, 0, &payload,
                                           /*payload_length=*/2),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbi) {
   single_entry_test_zbi_t dst_zbi;
   single_entry_test_zbi_t src_zbi;
 
@@ -847,94 +645,63 @@
   ASSERT_EQ(zbi_extend(&dst_zbi, sizeof(dst_zbi), &src_zbi), ZBI_RESULT_OK);
   ASSERT_BYTES_EQ(reinterpret_cast<uint8_t*>(dst_zbi.entry_payload),
                   reinterpret_cast<uint8_t*>(&payload), sizeof(payload), "Mismatched payload.");
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiDstNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiDstNull) {
   zbi_header_t zbi = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_extend(nullptr, 0, &zbi), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiSrcNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiSrcNull) {
   zbi_header_t zbi = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_extend(&zbi, 0, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiDstNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiDstNotContainer) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(0);
   dst.type = 0;
 
   ASSERT_EQ(zbi_extend(&dst, 0, &src), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiSrcNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiSrcNotContainer) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   src.type = 0;
   zbi_header_t dst = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_extend(&dst, 0, &src), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiCapacitySmallerThanDstLength() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiCapacitySmallerThanDstLength) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(1);
 
   ASSERT_EQ(zbi_extend(&dst, 0, &src), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiCapacitySmallerThanDstAlignedLength() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiCapacitySmallerThanDstAlignedLength) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(6);
 
   ASSERT_EQ(zbi_extend(&dst, /*capacity=*/7, &src), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiSrcTooLarge() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiSrcTooLarge) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(ZBI_ALIGNMENT + 1);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(ZBI_ALIGNMENT);
 
   ASSERT_EQ(zbi_extend(&dst, /*capacity=*/ZBI_ALIGNMENT, &src), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestBasic(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestBasic) {
   uint8_t* test_zbi = get_test_zbi();
 
   auto cleanup = fbl::MakeAutoCall([test_zbi]() { free(test_zbi); });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   zbi::Zbi image(test_zbi);
 
@@ -951,18 +718,14 @@
   ASSERT_EQ(result, ZBI_RESULT_OK, "content check failed");
 
   ASSERT_EQ(count, 4, "bad bootdata item count");
-
-  END_TEST;
 }
 
-static bool ZbiTestBadContainer(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestBadContainer) {
   uint8_t* test_zbi = get_test_zbi();
 
   auto cleanup = fbl::MakeAutoCall([test_zbi]() { free(test_zbi); });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   zbi_header_t* bootdata_header = reinterpret_cast<zbi_header_t*>(test_zbi);
   // Set to something arbitrary
@@ -976,17 +739,14 @@
   // Make sure that the diagnostic information tells us that the container is
   // bad.
   ASSERT_EQ(problem_header, bootdata_header);
-
-  END_TEST;
 }
 
-static bool ZbiTestTruncated(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestTruncated) {
   uint8_t* test_zbi = get_test_zbi();
 
   auto cleanup = fbl::MakeAutoCall([test_zbi]() { free(test_zbi); });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   zbi::Zbi image(test_zbi);
 
@@ -998,7 +758,7 @@
 
   // zbi.Check should only give us diagnostics about the error if there was
   // an error in the first place.
-  ASSERT_NONNULL(trace, "Bad image with no trace diagnostics?");
+  ASSERT_NOT_NULL(trace, "Bad image with no trace diagnostics?");
 
   int count = 0;
   zbi_result_t result = image.ForEach(check_contents, &count);
@@ -1006,12 +766,9 @@
   ASSERT_NE(result, ZBI_RESULT_OK, "Truncated image not reported as truncated");
 
   ASSERT_EQ(count, 4, "bad bootdata item count");
-
-  END_TEST;
 }
 
-static bool ZbiTestAppend(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestAppend) {
   // Allocate an additional kExtraBytes at the end of the ZBI to test
   // appending.
   const size_t kExtraBytes = sizeof(zbi_header_t) + sizeof(kAppendRD);
@@ -1026,7 +783,7 @@
     free(reference_zbi);
   });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   const size_t kBufferSize = sizeof(test_zbi_t) + kExtraBytes;
   zbi::Zbi image(test_zbi, kBufferSize);
@@ -1047,14 +804,10 @@
   // Verify the integrity of the data.
   reference_image->header.length = test_image->header.length;
   ASSERT_EQ(memcmp(test_zbi, reference_zbi, sizeof(test_zbi_t)), 0, "Append corrupted image");
-
-  END_TEST;
 }
 
 // Make sure we never overflow the ZBI's buffer by appending.
-static bool ZbiTestAppendFull(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestAppendFull) {
   // Enough space for a small payload
   const size_t kMaxAppendPayloadSize = ZBI_ALIGN(5);
   const size_t kExtraBytes = sizeof(zbi_header_t) + kMaxAppendPayloadSize;
@@ -1063,7 +816,7 @@
 
   uint8_t* test_zbi = get_test_zbi_extra(kExtraBytes + kExtraSentinelLength);
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   auto cleanup = fbl::MakeAutoCall([test_zbi] { free(test_zbi); });
 
@@ -1101,15 +854,12 @@
     ASSERT_EQ(test_zbi[kZbiSize + i], kSentinelByte,
               "corrupt sentinel bytes, append section overflowed.");
   }
-
-  END_TEST;
 }
 
 // Test that appending multiple sections to a ZBI works
-static bool ZbiTestAppendMulti(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestAppendMulti) {
   uint8_t* reference_zbi = get_test_zbi();
-  ASSERT_NONNULL(reference_zbi);
+  ASSERT_NOT_NULL(reference_zbi);
   auto cleanup = fbl::MakeAutoCall([reference_zbi]() { free(reference_zbi); });
 
   alignas(ZBI_ALIGNMENT) uint8_t test_zbi[sizeof(test_zbi_t)];
@@ -1147,15 +897,11 @@
   ASSERT_EQ(result, ZBI_RESULT_OK);
 
   ASSERT_EQ(memcmp(reference_zbi, test_zbi, image.Length()), 0);
-
-  END_TEST;
 }
 
 constexpr size_t kTestBufferSize = 1024;
 // Test that we can initialize empty buffers as ZBI containers.
-static bool ZbiTestCppInit(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCppInit) {
   std::unique_ptr<uint8_t[]> buffer;
   buffer.reset(new uint8_t[kTestBufferSize]);
 
@@ -1168,14 +914,10 @@
 
   result = image.CreateEntryWithPayload(ZBI_TYPE_CMDLINE, 0, 0, kTestCmdline, sizeof(kTestCmdline));
   ASSERT_EQ(result, ZBI_RESULT_OK);
-
-  END_TEST;
 }
 
 // Test that we don't try to create a ZBI in a container that's not big enough.
-static bool ZbiTestCppInitTooSmall(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCppInitTooSmall) {
   constexpr uint8_t kSentinel = 0xab;
 
   // If all goes well, we should never write to this buffer.
@@ -1197,16 +939,12 @@
   for (size_t i = 0; i < kTestBufferSize; i++) {
     EXPECT_EQ(buffer.get()[i], kSentinel);
   }
-
-  END_TEST;
 }
 
 // Test the happy case.
 // Make two zbi containers, extend the first by tacking the second to the back
 // of it. Observe that everything went okay.
-static bool ZbiTestExtendOkay(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendOkay) {
   // Create a dst zbi that has enough space to contain the src zbi.
   uint8_t* src_buf = get_test_zbi();
 
@@ -1232,12 +970,9 @@
 
   ASSERT_EQ(zbi_for_each(dst_buf, check_contents, &combined_sections), ZBI_RESULT_OK);
   ASSERT_EQ(src_sections + dst_sections, combined_sections);
-
-  END_TEST;
 }
 
-static bool ZbiTestNoOverflow(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestNoOverflow) {
   constexpr size_t kBufferSize = 1024;
   constexpr size_t kUsableBufferSize = kBufferSize / 2;
   constexpr uint8_t kSentinel = 0xab;
@@ -1294,14 +1029,10 @@
             ZBI_RESULT_OK);
 
   ASSERT_NE(zbi_extend(dst_buffer, kUsableBufferSize, src_buffer), ZBI_RESULT_OK);
-
-  END_TEST;
 }
 
 #ifdef __Fuchsia__
-static bool ZbiZxTestOverflowAtPageBoundary() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiZxTestOverflowAtPageBoundary) {
   // Make a VMO, and fill it with a zbi that's "kernel + data".
   constexpr size_t kInitialAlloc = 16384;
   zx_handle_t bootdata;
@@ -1351,95 +1082,5 @@
             ZBI_RESULT_OK);
   EXPECT_EQ(data.AppendSection(sizeof(append_data), ZBI_TYPE_CMDLINE, 0, 0, append_data),
             ZBI_RESULT_OK);
-
-  END_TEST;
 }
 #endif
-
-BEGIN_TEST_CASE(zbi_tests)
-RUN_TEST(ZbiTestInit)
-RUN_TEST(ZbiTestInitTooSmall)
-RUN_TEST(ZbiTestInitNotAligned)
-RUN_TEST(ZbiTestInitNullBuffer)
-
-RUN_TEST(ZbiTestCheckEmptyContainer)
-RUN_TEST(ZbiTestCheckEmptyContainerWithErr)
-RUN_TEST(ZbiTestCheckContainerBadType)
-RUN_TEST(ZbiTestCheckContainerBadTypeWithErr)
-RUN_TEST(ZbiTestCheckContainerBadExtra)
-RUN_TEST(ZbiTestCheckContainerBadMagic)
-RUN_TEST(ZbiTestCheckContainerBadVersion)
-RUN_TEST(ZbiTestCheckContainerBadCrc32)
-
-RUN_TEST(ZbiTestCheckTestZbi)
-RUN_TEST(ZbiTestCheckTestZbiWithErr)
-RUN_TEST(ZbiTestCheckTestZbiNull)
-RUN_TEST(ZbiTestCheckFirstBadEntryIsMarked)
-RUN_TEST(ZbiTestCheckTestZbiBadMagic)
-RUN_TEST(ZbiTestCheckTestZbiBadMagicWithErr)
-RUN_TEST(ZbiTestCheckTestZbiBadVersion)
-RUN_TEST(ZbiTestCheckTestZbiBadCrc32)
-RUN_TEST(ZbiTestCheckTestZbiTruncated)
-
-RUN_TEST(ZbiTestCheckCompleteTestZbi)
-RUN_TEST(ZbiTestCheckCompleteTestZbiWithErr)
-RUN_TEST(ZbiTestCheckCompleteTestZbiNull)
-RUN_TEST(ZbiTestCheckCompleteTestZbiTruncated)
-RUN_TEST(ZbiTestCheckCompleteTestZbiWrongArch)
-RUN_TEST(ZbiTestCheckCompleteTestZbiWrongArchWithErr)
-RUN_TEST(ZbiTestCheckCompleteTestZbiMissingBootfs)
-
-RUN_TEST(ZbiTestForEachTestZbiNull)
-RUN_TEST(ZbiTestForEachTestZbiNullCallback)
-RUN_TEST(ZbiTestForEachTestZbiContainer)
-RUN_TEST(ZbiTestForEachTestZbiTruncated)
-RUN_TEST(ZbiTestForEachTestZbiItems)
-RUN_TEST(ZbiTestForEachTestZbiItemsNoCookie)
-RUN_TEST(ZbiTestForEachTestZbiItemsCallbackError)
-
-RUN_TEST(ZbiTestCreateEntryTestZbi)
-RUN_TEST(ZbiTestCreateEntryTestZbiNull)
-RUN_TEST(ZbiTestCreateEntryTestZbiNullPayload)
-RUN_TEST(ZbiTestCreateEntryTestZbiCrc32NotSupported)
-RUN_TEST(ZbiTestCreateEntryTestZbiNotContainer)
-RUN_TEST(ZbiTestCreateEntryTestZbiCapacitySmallerThanCurrentSize)
-RUN_TEST(ZbiTestCreateEntryTestZbiFull)
-RUN_TEST(ZbiTestCreateEntryTestZbiPayloadTooLarge)
-
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbi)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiNull)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiNullPayload)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiCrc32NotSupported)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiNotContainer)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiCapacitySmallerThanCurrentSize)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiSectionTooLarge)
-
-RUN_TEST(ZbiTestExtendTestZbi)
-RUN_TEST(ZbiTestExtendTestZbiDstNull)
-RUN_TEST(ZbiTestExtendTestZbiSrcNull)
-RUN_TEST(ZbiTestExtendTestZbiDstNotContainer)
-RUN_TEST(ZbiTestExtendTestZbiSrcNotContainer)
-RUN_TEST(ZbiTestExtendTestZbiCapacitySmallerThanDstLength)
-RUN_TEST(ZbiTestExtendTestZbiCapacitySmallerThanDstAlignedLength)
-RUN_TEST(ZbiTestExtendTestZbiSrcTooLarge)
-
-// Basic tests.
-RUN_TEST(ZbiTestBasic)
-RUN_TEST(ZbiTestBadContainer)
-RUN_TEST(ZbiTestTruncated)
-
-RUN_TEST(ZbiTestCppInit)
-RUN_TEST(ZbiTestCppInitTooSmall)
-
-// Append tests.
-RUN_TEST(ZbiTestAppend)
-RUN_TEST(ZbiTestAppendFull)
-RUN_TEST(ZbiTestAppendMulti)
-
-// Extend tests.
-RUN_TEST(ZbiTestExtendOkay)
-RUN_TEST(ZbiTestNoOverflow)
-#ifdef __Fuchsia__
-RUN_TEST(ZbiZxTestOverflowAtPageBoundary)
-#endif
-END_TEST_CASE(zbi_tests)
diff --git a/zircon/system/ulib/zbi/test/BUILD.gn b/zircon/system/ulib/zbi/test/BUILD.gn
index 6ade6c2..4c04210 100644
--- a/zircon/system/ulib/zbi/test/BUILD.gn
+++ b/zircon/system/ulib/zbi/test/BUILD.gn
@@ -34,15 +34,14 @@
     "//zircon/public/lib/fbl",
     "//zircon/public/lib/pretty",
     "//zircon/public/lib/zbi",
+    "//zircon/public/lib/zxtest",
   ]
   if (is_fuchsia) {
     deps += [
       "//sdk/lib/fdio",
       "//zircon/public/lib/zx",
-      "//zircon/system/ulib/unittest",
     ]
   } else {
-    deps += [ "//zircon/system/ulib/unittest:unittest-static" ]
     output_dir = "$root_out_dir/zircon-migrated"
   }
 }
diff --git a/zircon/system/ulib/zbi/test/zbi.cc b/zircon/system/ulib/zbi/test/zbi.cc
index 604abf5..97be556 100644
--- a/zircon/system/ulib/zbi/test/zbi.cc
+++ b/zircon/system/ulib/zbi/test/zbi.cc
@@ -14,7 +14,7 @@
 
 #include <fbl/auto_call.h>
 #include <pretty/hexdump.h>
-#include <unittest/unittest.h>
+#include <zxtest/zxtest.h>
 
 #ifdef __Fuchsia__
 #include <lib/zbi/zbi-zx.h>
@@ -161,156 +161,102 @@
   }
 }
 
-static bool ZbiTestInit() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInit) {
   alignas(ZBI_ALIGNMENT) uint8_t buffer[sizeof(zbi_header_t)];
 
   ASSERT_EQ(zbi_init(buffer, sizeof(buffer)), ZBI_RESULT_OK);
 
   auto* zbi = reinterpret_cast<zbi_header_t*>(buffer);
   ASSERT_EQ(zbi->type, ZBI_TYPE_CONTAINER);
-
-  END_TEST;
 }
 
-static bool ZbiTestInitTooSmall() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInitTooSmall) {
   alignas(ZBI_ALIGNMENT) uint8_t buffer[sizeof(zbi_header_t) - 1];
 
   ASSERT_EQ(zbi_init(buffer, sizeof(buffer)), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestInitNotAligned() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInitNotAligned) {
   alignas(ZBI_ALIGNMENT) uint8_t buffer[sizeof(zbi_header_t) + 1];
   void* misaligned_buffer = &buffer[1];
 
   ASSERT_EQ(zbi_init(misaligned_buffer, sizeof(zbi_header_t)), ZBI_RESULT_BAD_ALIGNMENT);
-
-  END_TEST;
 }
 
-static bool ZbiTestInitNullBuffer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestInitNullBuffer) {
   ASSERT_EQ(zbi_init(nullptr, sizeof(zbi_header_t)), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
 // TODO(fxb/52665): Consider pulling out the check logic into a common helper.
-static bool ZbiTestCheckEmptyContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckEmptyContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_OK);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckEmptyContainerWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckEmptyContainerWithErr) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   zbi_header_t* err = nullptr;
 
   EXPECT_EQ(zbi_check(&container, &err), ZBI_RESULT_OK);
   ASSERT_EQ(err, nullptr);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadType() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadType) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadTypeWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadTypeWithErr) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
   zbi_header_t* err = nullptr;
 
   EXPECT_EQ(zbi_check(&container, &err), ZBI_RESULT_BAD_TYPE);
   ASSERT_EQ(err, &container);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadExtra() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadExtra) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.extra = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_MAGIC);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadMagic() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadMagic) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.magic = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_MAGIC);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadVersion() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadVersion) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.flags &= ~ZBI_FLAG_VERSION;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_VERSION);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckContainerBadCrc32() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckContainerBadCrc32) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   // Entries with no checksum must have the crc32 field set to ZBI_ITEM_NO_CRC32.
   container.flags &= ~ZBI_FLAG_CRC32;
   container.crc32 = 0;
 
   ASSERT_EQ(zbi_check(&container, nullptr), ZBI_RESULT_BAD_CRC);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbi) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
 
   ASSERT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_OK);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi_header_t* err = nullptr;
 
@@ -318,21 +264,13 @@
   ASSERT_EQ(err, nullptr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiNull) {
   ASSERT_EQ(zbi_check(nullptr, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckFirstBadEntryIsMarked() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckFirstBadEntryIsMarked) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.magic = 0;
   zbi->ramdisk_hdr.magic = 0;
@@ -343,26 +281,18 @@
   ASSERT_EQ(err, &zbi->cmdline_hdr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadMagic() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadMagic) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.magic = 0;
 
   EXPECT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_BAD_MAGIC);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadMagicWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadMagicWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.magic = 0;
   zbi_header_t* err = nullptr;
@@ -372,26 +302,18 @@
   ASSERT_EQ(err, &zbi->cmdline_hdr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadVersion() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadVersion) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.flags &= ~ZBI_FLAG_VERSION;
 
   EXPECT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_BAD_VERSION);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiBadCrc32() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiBadCrc32) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->cmdline_hdr.flags &= ~ZBI_FLAG_CRC32;
   zbi->cmdline_hdr.crc32 = 0;
@@ -399,38 +321,26 @@
   ASSERT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_BAD_CRC);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckTestZbiTruncated() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckTestZbiTruncated) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->header.length = 1;
 
   ASSERT_EQ(zbi_check(zbi, nullptr), ZBI_RESULT_ERR_TRUNCATED);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbi) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
 
   ASSERT_EQ(zbi_check_complete(zbi, nullptr), ZBI_RESULT_OK);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi_header_t* err = nullptr;
 
@@ -439,45 +349,29 @@
   ASSERT_EQ(err, nullptr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiNull) {
   ASSERT_EQ(zbi_check_complete(nullptr, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiTruncated() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiTruncated) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.length = 0;
 
   ASSERT_EQ(zbi_check_complete(&container, nullptr), ZBI_RESULT_ERR_TRUNCATED);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiWrongArch() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiWrongArch) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->kernel_hdr.type = 0;
 
   ASSERT_EQ(zbi_check_complete(zbi, nullptr), ZBI_RESULT_INCOMPLETE_KERNEL);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiWrongArchWithErr() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiWrongArchWithErr) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->kernel_hdr.type = 0;
   zbi_header_t* err = nullptr;
@@ -487,21 +381,15 @@
   ASSERT_EQ(err, &zbi->kernel_hdr);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCheckCompleteTestZbiMissingBootfs() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCheckCompleteTestZbiMissingBootfs) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   zbi->bootfs_hdr.type = ZBI_TYPE_CMDLINE;
 
   ASSERT_EQ(zbi_check_complete(zbi, nullptr), ZBI_RESULT_INCOMPLETE_BOOTFS);
 
   free(zbi);
-
-  END_TEST;
 }
 
 static zbi_result_t count_items_callback(zbi_header_t* header, void* payload, void* cookie) {
@@ -510,40 +398,26 @@
   return ZBI_RESULT_OK;
 }
 
-static bool ZbiTestForEachTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiNull) {
   ASSERT_EQ(zbi_for_each(nullptr, count_items_callback, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiNullCallback() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiNullCallback) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_for_each(&container, nullptr, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   uint32_t count = 0;
 
   // The callback should be invoked with ZBI items and not the container.
   EXPECT_EQ(zbi_for_each(&container, count_items_callback, &count), ZBI_RESULT_OK);
   ASSERT_EQ(count, 0);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiTruncated() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiTruncated) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   // Container length does not include the size of the container header
   zbi->header.length = offsetof(test_zbi_t, cmdline_payload) - sizeof(zbi_header_t);
@@ -554,13 +428,9 @@
   ASSERT_EQ(count, 2);
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestForEachTestZbiItems() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiItems) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   uint32_t count = 0;
 
@@ -568,8 +438,6 @@
   ASSERT_EQ(count, 4);
 
   free(zbi);
-
-  END_TEST;
 }
 
 static zbi_result_t modify_payload_callback(zbi_header_t* header, void* payload, void* cookie) {
@@ -581,9 +449,7 @@
   return ZBI_RESULT_OK;
 }
 
-static bool ZbiTestForEachTestZbiItemsNoCookie() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiItemsNoCookie) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   std::memset(zbi->kernel_payload, 'A', 1);
   std::memset(zbi->cmdline_payload, 'A', 1);
@@ -598,8 +464,6 @@
   EXPECT_EQ(zbi->bootfs_payload[0], 'B');
 
   free(zbi);
-
-  END_TEST;
 }
 
 static zbi_result_t modify_payload_then_error_callback(zbi_header_t* header, void* payload,
@@ -615,9 +479,7 @@
   return ZBI_RESULT_OK;
 }
 
-static bool ZbiTestForEachTestZbiItemsCallbackError() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestForEachTestZbiItemsCallbackError) {
   test_zbi_t* zbi = reinterpret_cast<test_zbi_t*>(get_test_zbi());
   std::memset(zbi->kernel_payload, 'A', 1);
   std::memset(zbi->cmdline_payload, 'A', 1);
@@ -635,13 +497,9 @@
   EXPECT_EQ(zbi->bootfs_payload[0], 'A');
 
   free(zbi);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbi) {
   // The ZBI has space for the container and an entry with an 8-byte payload.
   single_entry_test_zbi_t zbi;
   void* payload = nullptr;
@@ -655,82 +513,54 @@
 
   // Verify the pointer points to the newly created entry payload.
   EXPECT_EQ(payload, zbi.entry_payload);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiNull) {
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(nullptr, 0, 0, 0, 0, 0, &payload), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiNullPayload() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiNullPayload) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_create_entry(&container, 0, 0, 0, 0, 0, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiCrc32NotSupported() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiCrc32NotSupported) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, 0, 0, 0, ZBI_FLAG_CRC32, 0, &payload), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiNotContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, 0, 0, 0, 0, 0, &payload), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
 // create entry tests
-static bool ZbiTestCreateEntryTestZbiCapacitySmallerThanCurrentSize() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiCapacitySmallerThanCurrentSize) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.length = 2;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, /*capacity=*/1, 0, 0, 0, 0, &payload), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiFull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiFull) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry(&container, /*capacity=*/sizeof(container), 0, 0, 0,
                              /*payload_length=*/1, &payload),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryTestZbiPayloadTooLarge() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryTestZbiPayloadTooLarge) {
   single_entry_test_zbi_t zbi;
   uint32_t capacity = sizeof(zbi);
   void* payload = nullptr;
@@ -739,13 +569,9 @@
   ASSERT_EQ(zbi_create_entry(&zbi, capacity, 0, 0, 0,
                              /*payload_length=*/capacity, &payload),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbi) {
   // The ZBI will have space for the container and an entry with a small payload.
   single_entry_test_zbi_t zbi;
   uint32_t payload = 0xABCDABCD;
@@ -757,84 +583,56 @@
   // Verify the contents of the payload.
   ASSERT_BYTES_EQ(reinterpret_cast<uint8_t*>(zbi.entry_payload),
                   reinterpret_cast<uint8_t*>(&payload), sizeof(payload), "Mismatched payloads.");
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiNull) {
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(nullptr, 0, 0, 0, 0, &payload, 0), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiNullPayload() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiNullPayload) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, 0, 0, 0, 0, nullptr, 0), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiCrc32NotSupported() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiCrc32NotSupported) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, 0, 0, 0, ZBI_FLAG_CRC32, &payload, 0),
             ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiNotContainer) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.type = 0;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, 0, 0, 0, 0, &payload, 0),
             ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiCapacitySmallerThanCurrentSize() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiCapacitySmallerThanCurrentSize) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   container.length = 2;
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, /*capacity=*/1, 0, 0, 0, &payload, 0),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestCreateEntryWithPayloadTestZbiSectionTooLarge() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCreateEntryWithPayloadTestZbiSectionTooLarge) {
   zbi_header_t container = ZBI_CONTAINER_HEADER(0);
   void* payload = nullptr;
 
   ASSERT_EQ(zbi_create_entry_with_payload(&container, /*capacity=*/1, 0, 0, 0, &payload,
                                           /*payload_length=*/2),
             ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbi() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbi) {
   single_entry_test_zbi_t dst_zbi;
   single_entry_test_zbi_t src_zbi;
 
@@ -847,94 +645,63 @@
   ASSERT_EQ(zbi_extend(&dst_zbi, sizeof(dst_zbi), &src_zbi), ZBI_RESULT_OK);
   ASSERT_BYTES_EQ(reinterpret_cast<uint8_t*>(dst_zbi.entry_payload),
                   reinterpret_cast<uint8_t*>(&payload), sizeof(payload), "Mismatched payload.");
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiDstNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiDstNull) {
   zbi_header_t zbi = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_extend(nullptr, 0, &zbi), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiSrcNull() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiSrcNull) {
   zbi_header_t zbi = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_extend(&zbi, 0, nullptr), ZBI_RESULT_ERROR);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiDstNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiDstNotContainer) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(0);
   dst.type = 0;
 
   ASSERT_EQ(zbi_extend(&dst, 0, &src), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiSrcNotContainer() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiSrcNotContainer) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   src.type = 0;
   zbi_header_t dst = ZBI_CONTAINER_HEADER(0);
 
   ASSERT_EQ(zbi_extend(&dst, 0, &src), ZBI_RESULT_BAD_TYPE);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiCapacitySmallerThanDstLength() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiCapacitySmallerThanDstLength) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(1);
 
   ASSERT_EQ(zbi_extend(&dst, 0, &src), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiCapacitySmallerThanDstAlignedLength() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiCapacitySmallerThanDstAlignedLength) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(0);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(6);
 
   ASSERT_EQ(zbi_extend(&dst, /*capacity=*/7, &src), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestExtendTestZbiSrcTooLarge() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendTestZbiSrcTooLarge) {
   zbi_header_t src = ZBI_CONTAINER_HEADER(ZBI_ALIGNMENT + 1);
   zbi_header_t dst = ZBI_CONTAINER_HEADER(ZBI_ALIGNMENT);
 
   ASSERT_EQ(zbi_extend(&dst, /*capacity=*/ZBI_ALIGNMENT, &src), ZBI_RESULT_TOO_BIG);
-
-  END_TEST;
 }
 
-static bool ZbiTestBasic(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestBasic) {
   uint8_t* test_zbi = get_test_zbi();
 
   auto cleanup = fbl::MakeAutoCall([test_zbi]() { free(test_zbi); });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   zbi::Zbi image(test_zbi);
 
@@ -951,18 +718,14 @@
   ASSERT_EQ(result, ZBI_RESULT_OK, "content check failed");
 
   ASSERT_EQ(count, 4, "bad bootdata item count");
-
-  END_TEST;
 }
 
-static bool ZbiTestBadContainer(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestBadContainer) {
   uint8_t* test_zbi = get_test_zbi();
 
   auto cleanup = fbl::MakeAutoCall([test_zbi]() { free(test_zbi); });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   zbi_header_t* bootdata_header = reinterpret_cast<zbi_header_t*>(test_zbi);
   // Set to something arbitrary
@@ -976,17 +739,14 @@
   // Make sure that the diagnostic information tells us that the container is
   // bad.
   ASSERT_EQ(problem_header, bootdata_header);
-
-  END_TEST;
 }
 
-static bool ZbiTestTruncated(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestTruncated) {
   uint8_t* test_zbi = get_test_zbi();
 
   auto cleanup = fbl::MakeAutoCall([test_zbi]() { free(test_zbi); });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   zbi::Zbi image(test_zbi);
 
@@ -998,7 +758,7 @@
 
   // zbi.Check should only give us diagnostics about the error if there was
   // an error in the first place.
-  ASSERT_NONNULL(trace, "Bad image with no trace diagnostics?");
+  ASSERT_NOT_NULL(trace, "Bad image with no trace diagnostics?");
 
   int count = 0;
   zbi_result_t result = image.ForEach(check_contents, &count);
@@ -1006,12 +766,9 @@
   ASSERT_NE(result, ZBI_RESULT_OK, "Truncated image not reported as truncated");
 
   ASSERT_EQ(count, 4, "bad bootdata item count");
-
-  END_TEST;
 }
 
-static bool ZbiTestAppend(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestAppend) {
   // Allocate an additional kExtraBytes at the end of the ZBI to test
   // appending.
   const size_t kExtraBytes = sizeof(zbi_header_t) + sizeof(kAppendRD);
@@ -1026,7 +783,7 @@
     free(reference_zbi);
   });
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   const size_t kBufferSize = sizeof(test_zbi_t) + kExtraBytes;
   zbi::Zbi image(test_zbi, kBufferSize);
@@ -1047,14 +804,10 @@
   // Verify the integrity of the data.
   reference_image->header.length = test_image->header.length;
   ASSERT_EQ(memcmp(test_zbi, reference_zbi, sizeof(test_zbi_t)), 0, "Append corrupted image");
-
-  END_TEST;
 }
 
 // Make sure we never overflow the ZBI's buffer by appending.
-static bool ZbiTestAppendFull(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestAppendFull) {
   // Enough space for a small payload
   const size_t kMaxAppendPayloadSize = ZBI_ALIGN(5);
   const size_t kExtraBytes = sizeof(zbi_header_t) + kMaxAppendPayloadSize;
@@ -1063,7 +816,7 @@
 
   uint8_t* test_zbi = get_test_zbi_extra(kExtraBytes + kExtraSentinelLength);
 
-  ASSERT_NONNULL(test_zbi, "failed to alloc test image");
+  ASSERT_NOT_NULL(test_zbi, "failed to alloc test image");
 
   auto cleanup = fbl::MakeAutoCall([test_zbi] { free(test_zbi); });
 
@@ -1101,15 +854,12 @@
     ASSERT_EQ(test_zbi[kZbiSize + i], kSentinelByte,
               "corrupt sentinel bytes, append section overflowed.");
   }
-
-  END_TEST;
 }
 
 // Test that appending multiple sections to a ZBI works
-static bool ZbiTestAppendMulti(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestAppendMulti) {
   uint8_t* reference_zbi = get_test_zbi();
-  ASSERT_NONNULL(reference_zbi);
+  ASSERT_NOT_NULL(reference_zbi);
   auto cleanup = fbl::MakeAutoCall([reference_zbi]() { free(reference_zbi); });
 
   alignas(ZBI_ALIGNMENT) uint8_t test_zbi[sizeof(test_zbi_t)];
@@ -1147,15 +897,11 @@
   ASSERT_EQ(result, ZBI_RESULT_OK);
 
   ASSERT_EQ(memcmp(reference_zbi, test_zbi, image.Length()), 0);
-
-  END_TEST;
 }
 
 constexpr size_t kTestBufferSize = 1024;
 // Test that we can initialize empty buffers as ZBI containers.
-static bool ZbiTestCppInit(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCppInit) {
   std::unique_ptr<uint8_t[]> buffer;
   buffer.reset(new uint8_t[kTestBufferSize]);
 
@@ -1168,14 +914,10 @@
 
   result = image.CreateEntryWithPayload(ZBI_TYPE_CMDLINE, 0, 0, kTestCmdline, sizeof(kTestCmdline));
   ASSERT_EQ(result, ZBI_RESULT_OK);
-
-  END_TEST;
 }
 
 // Test that we don't try to create a ZBI in a container that's not big enough.
-static bool ZbiTestCppInitTooSmall(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestCppInitTooSmall) {
   constexpr uint8_t kSentinel = 0xab;
 
   // If all goes well, we should never write to this buffer.
@@ -1197,16 +939,12 @@
   for (size_t i = 0; i < kTestBufferSize; i++) {
     EXPECT_EQ(buffer.get()[i], kSentinel);
   }
-
-  END_TEST;
 }
 
 // Test the happy case.
 // Make two zbi containers, extend the first by tacking the second to the back
 // of it. Observe that everything went okay.
-static bool ZbiTestExtendOkay(void) {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiTestExtendOkay) {
   // Create a dst zbi that has enough space to contain the src zbi.
   uint8_t* src_buf = get_test_zbi();
 
@@ -1232,12 +970,9 @@
 
   ASSERT_EQ(zbi_for_each(dst_buf, check_contents, &combined_sections), ZBI_RESULT_OK);
   ASSERT_EQ(src_sections + dst_sections, combined_sections);
-
-  END_TEST;
 }
 
-static bool ZbiTestNoOverflow(void) {
-  BEGIN_TEST;
+TEST(ZbiTests, ZbiTestNoOverflow) {
   constexpr size_t kBufferSize = 1024;
   constexpr size_t kUsableBufferSize = kBufferSize / 2;
   constexpr uint8_t kSentinel = 0xab;
@@ -1294,14 +1029,10 @@
             ZBI_RESULT_OK);
 
   ASSERT_NE(zbi_extend(dst_buffer, kUsableBufferSize, src_buffer), ZBI_RESULT_OK);
-
-  END_TEST;
 }
 
 #ifdef __Fuchsia__
-static bool ZbiZxTestOverflowAtPageBoundary() {
-  BEGIN_TEST;
-
+TEST(ZbiTests, ZbiZxTestOverflowAtPageBoundary) {
   // Make a VMO, and fill it with a zbi that's "kernel + data".
   constexpr size_t kInitialAlloc = 16384;
   zx_handle_t bootdata;
@@ -1351,95 +1082,5 @@
             ZBI_RESULT_OK);
   EXPECT_EQ(data.AppendSection(sizeof(append_data), ZBI_TYPE_CMDLINE, 0, 0, append_data),
             ZBI_RESULT_OK);
-
-  END_TEST;
 }
 #endif
-
-BEGIN_TEST_CASE(zbi_tests)
-RUN_TEST(ZbiTestInit)
-RUN_TEST(ZbiTestInitTooSmall)
-RUN_TEST(ZbiTestInitNotAligned)
-RUN_TEST(ZbiTestInitNullBuffer)
-
-RUN_TEST(ZbiTestCheckEmptyContainer)
-RUN_TEST(ZbiTestCheckEmptyContainerWithErr)
-RUN_TEST(ZbiTestCheckContainerBadType)
-RUN_TEST(ZbiTestCheckContainerBadTypeWithErr)
-RUN_TEST(ZbiTestCheckContainerBadExtra)
-RUN_TEST(ZbiTestCheckContainerBadMagic)
-RUN_TEST(ZbiTestCheckContainerBadVersion)
-RUN_TEST(ZbiTestCheckContainerBadCrc32)
-
-RUN_TEST(ZbiTestCheckTestZbi)
-RUN_TEST(ZbiTestCheckTestZbiWithErr)
-RUN_TEST(ZbiTestCheckTestZbiNull)
-RUN_TEST(ZbiTestCheckFirstBadEntryIsMarked)
-RUN_TEST(ZbiTestCheckTestZbiBadMagic)
-RUN_TEST(ZbiTestCheckTestZbiBadMagicWithErr)
-RUN_TEST(ZbiTestCheckTestZbiBadVersion)
-RUN_TEST(ZbiTestCheckTestZbiBadCrc32)
-RUN_TEST(ZbiTestCheckTestZbiTruncated)
-
-RUN_TEST(ZbiTestCheckCompleteTestZbi)
-RUN_TEST(ZbiTestCheckCompleteTestZbiWithErr)
-RUN_TEST(ZbiTestCheckCompleteTestZbiNull)
-RUN_TEST(ZbiTestCheckCompleteTestZbiTruncated)
-RUN_TEST(ZbiTestCheckCompleteTestZbiWrongArch)
-RUN_TEST(ZbiTestCheckCompleteTestZbiWrongArchWithErr)
-RUN_TEST(ZbiTestCheckCompleteTestZbiMissingBootfs)
-
-RUN_TEST(ZbiTestForEachTestZbiNull)
-RUN_TEST(ZbiTestForEachTestZbiNullCallback)
-RUN_TEST(ZbiTestForEachTestZbiContainer)
-RUN_TEST(ZbiTestForEachTestZbiTruncated)
-RUN_TEST(ZbiTestForEachTestZbiItems)
-RUN_TEST(ZbiTestForEachTestZbiItemsNoCookie)
-RUN_TEST(ZbiTestForEachTestZbiItemsCallbackError)
-
-RUN_TEST(ZbiTestCreateEntryTestZbi)
-RUN_TEST(ZbiTestCreateEntryTestZbiNull)
-RUN_TEST(ZbiTestCreateEntryTestZbiNullPayload)
-RUN_TEST(ZbiTestCreateEntryTestZbiCrc32NotSupported)
-RUN_TEST(ZbiTestCreateEntryTestZbiNotContainer)
-RUN_TEST(ZbiTestCreateEntryTestZbiCapacitySmallerThanCurrentSize)
-RUN_TEST(ZbiTestCreateEntryTestZbiFull)
-RUN_TEST(ZbiTestCreateEntryTestZbiPayloadTooLarge)
-
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbi)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiNull)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiNullPayload)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiCrc32NotSupported)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiNotContainer)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiCapacitySmallerThanCurrentSize)
-RUN_TEST(ZbiTestCreateEntryWithPayloadTestZbiSectionTooLarge)
-
-RUN_TEST(ZbiTestExtendTestZbi)
-RUN_TEST(ZbiTestExtendTestZbiDstNull)
-RUN_TEST(ZbiTestExtendTestZbiSrcNull)
-RUN_TEST(ZbiTestExtendTestZbiDstNotContainer)
-RUN_TEST(ZbiTestExtendTestZbiSrcNotContainer)
-RUN_TEST(ZbiTestExtendTestZbiCapacitySmallerThanDstLength)
-RUN_TEST(ZbiTestExtendTestZbiCapacitySmallerThanDstAlignedLength)
-RUN_TEST(ZbiTestExtendTestZbiSrcTooLarge)
-
-// Basic tests.
-RUN_TEST(ZbiTestBasic)
-RUN_TEST(ZbiTestBadContainer)
-RUN_TEST(ZbiTestTruncated)
-
-RUN_TEST(ZbiTestCppInit)
-RUN_TEST(ZbiTestCppInitTooSmall)
-
-// Append tests.
-RUN_TEST(ZbiTestAppend)
-RUN_TEST(ZbiTestAppendFull)
-RUN_TEST(ZbiTestAppendMulti)
-
-// Extend tests.
-RUN_TEST(ZbiTestExtendOkay)
-RUN_TEST(ZbiTestNoOverflow)
-#ifdef __Fuchsia__
-RUN_TEST(ZbiZxTestOverflowAtPageBoundary)
-#endif
-END_TEST_CASE(zbi_tests)