diff --git a/test/message/append.cpp b/test/message/append.cpp
index 1cc56ff..836c8ae 100644
--- a/test/message/append.cpp
+++ b/test/message/append.cpp
@@ -6,6 +6,9 @@
 // Global to share the dbus type string between client and server.
 static std::string verifyTypeString;
 
+using verifyCallback_t = void(*)(sd_bus_message*);
+verifyCallback_t verifyCallback = nullptr;
+
 static constexpr auto SERVICE = "sdbusplus.test";
 static constexpr auto INTERFACE = SERVICE;
 static constexpr auto TEST_METHOD = "test";
@@ -39,8 +42,17 @@
         if (sd_bus_message_is_method_call(m, INTERFACE, TEST_METHOD))
         {
             // Verify the message type matches what the test expects.
-            // TODO: It would be nice to verify content here as well.
             assert(verifyTypeString == sd_bus_message_get_signature(m, true));
+            if (verifyCallback)
+            {
+                verifyCallback(m);
+                verifyCallback = nullptr;
+            }
+            else
+            {
+                std::cout << "Warning: No verification for "
+                          << verifyTypeString << std::endl;
+            }
             // Reply to client.
             sd_bus_reply_method_return(m, nullptr);
         }
@@ -70,6 +82,18 @@
         auto m = newMethodCall__test(b);
         m.append(1);
         verifyTypeString = "i";
+
+        struct verify
+        {
+            static void op(sd_bus_message* m)
+            {
+                int32_t i = 0;
+                sd_bus_message_read_basic(m, 'i', &i);
+                assert(i == 1);
+            }
+        };
+        verifyCallback = &verify::op;
+
         b.call_noreply(m);
     }
     // Test l-value int.
@@ -78,6 +102,19 @@
         int a = 1;
         m.append(a, a);
         verifyTypeString = "ii";
+
+        struct verify
+        {
+            static void op(sd_bus_message* m)
+            {
+                int32_t a = 0, b = 0;
+                sd_bus_message_read(m, "ii", &a, &b);
+                assert(a == 1);
+                assert(b == 1);
+            }
+        };
+        verifyCallback = &verify::op;
+
         b.call_noreply(m);
     }
 
@@ -86,6 +123,22 @@
         auto m = newMethodCall__test(b);
         m.append(1, 2, 3, 4, 5);
         verifyTypeString = "iiiii";
+
+        struct verify
+        {
+            static void op(sd_bus_message* m)
+            {
+                int32_t a = 0, b = 0, c = 0, d = 0, e = 0;
+                sd_bus_message_read(m, "iiiii", &a, &b, &c, &d, &e);
+                assert(a == 1);
+                assert(b == 2);
+                assert(c == 3);
+                assert(d == 4);
+                assert(e == 5);
+            }
+        };
+        verifyCallback = &verify::op;
+
         b.call_noreply(m);
     }
 
@@ -94,6 +147,18 @@
         auto m = newMethodCall__test(b);
         m.append("asdf"s);
         verifyTypeString = "s";
+
+        struct verify
+        {
+            static void op(sd_bus_message* m)
+            {
+                const char* s = nullptr;
+                sd_bus_message_read_basic(m, 's', &s);
+                assert(0 == strcmp("asdf", s));
+            }
+        };
+        verifyCallback = &verify::op;
+
         b.call_noreply(m);
     }
 
@@ -105,6 +170,25 @@
         m.append(1, "asdf", "ASDF"s, str,
                  std::move(str2), 5);
         verifyTypeString = "issssi";
+
+        struct verify
+        {
+            static void op(sd_bus_message* m)
+            {
+                int32_t a = 0, b = 0;
+                const char *s0 = nullptr, *s1 = nullptr, *s2 = nullptr,
+                           *s3 = nullptr;
+                sd_bus_message_read(m, "issssi", &a, &s0, &s1, &s2, &s3, &b);
+                assert(a == 1);
+                assert(b == 5);
+                assert(0 == strcmp("asdf", s0));
+                assert(0 == strcmp("ASDF", s1));
+                assert(0 == strcmp("jkl;", s2));
+                assert(0 == strcmp("JKL:", s3));
+            }
+        };
+        verifyCallback = &verify::op;
+
         b.call_noreply(m);
     }
 
@@ -117,6 +201,7 @@
 
 int main()
 {
+
     // Initialize and start server thread.
     pthread_t t;
     {
