This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new cd48ce7  [tests] harmonize assertions on the expected status
cd48ce7 is described below

commit cd48ce74025dd2d8287eb66b9d615a492b2267bb
Author: Alexey Serbin <[email protected]>
AuthorDate: Tue Nov 23 16:37:46 2021 -0800

    [tests] harmonize assertions on the expected status
    
    I was trying to understand why a test scenario from security-itest
    failed in one of gerrit pre-commit runs and found that it would be
    great to know the actual vs the expected type of the status when an
    assertion of type ASSERT_{FALSE,TRUE}(s.IsXxx()) triggers.
    
    This patch updates the corresponding call sites of ASSERT_{FALSE,TRUE}
    in the code of that and other tests to provide such information for
    easier troubleshooting and debugging in future.
    
    Change-Id: I09cba638a5328fc57cc1ca70196bab42f09569b4
    Reviewed-on: http://gerrit.cloudera.org:8080/18269
    Reviewed-by: Andrew Wong <[email protected]>
    Tested-by: Kudu Jenkins
---
 src/kudu/cfile/cfile-test.cc                       |  2 +-
 src/kudu/client/client-test.cc                     | 52 +++++++++++-----------
 src/kudu/client/client-unittest.cc                 |  2 +-
 src/kudu/client/predicate-test.cc                  |  2 +-
 src/kudu/common/schema-test.cc                     |  6 +--
 src/kudu/consensus/consensus_meta-test.cc          |  2 +-
 src/kudu/consensus/consensus_queue-test.cc         |  2 +-
 src/kudu/consensus/leader_election-test.cc         |  6 +--
 src/kudu/consensus/log-test.cc                     |  6 +--
 src/kudu/fs/data_dirs-test.cc                      | 10 ++---
 src/kudu/fs/fs_manager-test.cc                     | 14 +++---
 src/kudu/fs/log_block_manager-test.cc              |  6 +--
 src/kudu/integration-tests/alter_table-test.cc     | 18 ++++----
 src/kudu/integration-tests/delete_table-itest.cc   |  3 +-
 src/kudu/integration-tests/delete_tablet-itest.cc  |  2 +-
 src/kudu/integration-tests/master_authz-itest.cc   | 10 ++---
 .../integration-tests/master_replication-itest.cc  |  2 +-
 src/kudu/integration-tests/raft_consensus-itest.cc |  4 +-
 src/kudu/integration-tests/security-itest.cc       | 12 ++---
 .../integration-tests/tablet_replacement-itest.cc  |  2 +-
 .../timestamp_advancement-itest.cc                 |  2 +-
 .../tombstoned_voting-imc-itest.cc                 |  6 +--
 src/kudu/integration-tests/txn_write_ops-itest.cc  |  2 +-
 src/kudu/master/dynamic_multi_master-test.cc       |  2 +-
 src/kudu/master/master-test.cc                     |  2 +-
 src/kudu/rpc/exactly_once_rpc-test.cc              |  2 +-
 src/kudu/rpc/rpc-test.cc                           | 10 ++---
 src/kudu/rpc/rpc_stub-test.cc                      |  2 +-
 src/kudu/security/ca/cert_management-test.cc       |  2 +-
 src/kudu/server/webserver-test.cc                  |  2 +-
 src/kudu/tablet/deltafile-test.cc                  |  4 +-
 src/kudu/tablet/diskrowset-test.cc                 |  4 +-
 src/kudu/tablet/mvcc-test.cc                       |  4 +-
 src/kudu/tablet/ops/op_tracker-test.cc             |  2 +-
 src/kudu/tablet/tablet-schema-test.cc              |  2 +-
 src/kudu/tablet/tablet_bootstrap-test.cc           |  4 +-
 src/kudu/tablet/txn_participant-test.cc            |  8 ++--
 src/kudu/tserver/tablet_copy_client-test.cc        | 10 ++---
 src/kudu/util/net/socket-test.cc                   |  2 +-
 src/kudu/util/oid_generator-test.cc                |  2 +-
 src/kudu/util/threadpool-test.cc                   |  2 +-
 src/kudu/util/yamlreader-test.cc                   |  2 +-
 42 files changed, 121 insertions(+), 120 deletions(-)

diff --git a/src/kudu/cfile/cfile-test.cc b/src/kudu/cfile/cfile-test.cc
index 4294eee..bd79ba8 100644
--- a/src/kudu/cfile/cfile-test.cc
+++ b/src/kudu/cfile/cfile-test.cc
@@ -917,7 +917,7 @@ TEST_P(TestCFileBothCacheMemoryTypes, TestDataCorruption) {
   for (size_t i = 0; i < file_size; i++) {
     for (uint8_t flip = 0; flip < 8; flip++) {
       Status s = CorruptAndReadBlock(id, i, flip);
-      ASSERT_TRUE(s.IsCorruption());
+      ASSERT_TRUE(s.IsCorruption()) << s.ToString();
       ASSERT_STR_MATCHES(s.ToString(), "block [0-9]+");
     }
   }
diff --git a/src/kudu/client/client-test.cc b/src/kudu/client/client-test.cc
index fc9c768..94ec37d 100644
--- a/src/kudu/client/client-test.cc
+++ b/src/kudu/client/client-test.cc
@@ -937,7 +937,7 @@ TEST_F(ClientTest, TestGetTableStatistics) {
 TEST_F(ClientTest, TestBadTable) {
   shared_ptr<KuduTable> t;
   Status s = client_->OpenTable("xxx-does-not-exist", &t);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Not found: the table does not exist");
 }
 
@@ -1008,7 +1008,7 @@ TEST_F(ClientTest, TestConfiguringScannerLimits) {
   KuduScanner scanner(client_table_.get());
   Status s = scanner.SetLimit(-1);
   ASSERT_STR_CONTAINS(s.ToString(), "must be non-negative");
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
 
   // Now actually set the limit and open the scanner.
   ASSERT_OK(scanner.SetLimit(kLimit));
@@ -1017,7 +1017,7 @@ TEST_F(ClientTest, TestConfiguringScannerLimits) {
   // Ensure we can't set the limit once we've opened the scanner.
   s = scanner.SetLimit(kLimit);
   ASSERT_STR_CONTAINS(s.ToString(), "must be set before Open()");
-  ASSERT_TRUE(s.IsIllegalState());
+  ASSERT_TRUE(s.IsIllegalState()) << s.ToString();
   int64_t count = 0;
   KuduScanBatch batch;
   while (scanner.HasMoreRows()) {
@@ -2136,7 +2136,7 @@ TEST_F(ClientTest, TestSwappedRangeBounds) {
                 .set_range_partition_columns({ "key" })
                 .Create();
 
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(),
                       "Error creating table TestSwappedRangeBounds on the 
master: "
                           "range partition lower bound must be less than the 
upper bound");
@@ -2165,7 +2165,7 @@ TEST_F(ClientTest, TestEqualRangeBounds) {
       .set_range_partition_columns({ "key" })
       .Create();
 
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(),
                       "Error creating table TestEqualRangeBounds on the 
master: "
                           "range partition lower bound must be less than the 
upper bound");
@@ -2260,7 +2260,7 @@ TEST_F(ClientTest, TestBasicIdBasedLookup) {
   }
   const auto& kDummyId = "dummy-tablet-id";
   Status s = MetaCacheLookupById(kDummyId, &rt);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_EQ(nullptr, rt);
 
   auto& meta_cache = client_->data_->meta_cache_;
@@ -2508,7 +2508,7 @@ TEST_F(ClientTest, TestGetTabletServerBlacklist) {
     Status s = client_->data_->GetTabletServer(client_.get(), rt,
                                                KuduClient::LEADER_ONLY,
                                                blacklist, &candidates, &rts);
-    ASSERT_TRUE(s.IsServiceUnavailable());
+    ASSERT_TRUE(s.IsServiceUnavailable()) << s.ToString();
   }
   // Keep blacklisting replicas until we run out.
   ASSERT_OK(client_->data_->GetTabletServer(client_.get(), rt,
@@ -2530,7 +2530,7 @@ TEST_F(ClientTest, TestGetTabletServerBlacklist) {
   for (KuduClient::ReplicaSelection selection : selections) {
     Status s = client_->data_->GetTabletServer(client_.get(), rt, selection,
                                                blacklist, &candidates, &rts);
-    ASSERT_TRUE(s.IsServiceUnavailable());
+    ASSERT_TRUE(s.IsServiceUnavailable()) << s.ToString();
   }
 
   // Make sure none of the modes work when all nodes are dead.
@@ -2542,7 +2542,7 @@ TEST_F(ClientTest, TestGetTabletServerBlacklist) {
     Status s = client_->data_->GetTabletServer(client_.get(), rt,
                                                selection,
                                                blacklist, &candidates, &rts);
-    ASSERT_TRUE(s.IsServiceUnavailable());
+    ASSERT_TRUE(s.IsServiceUnavailable()) << s.ToString();
   }
 }
 
@@ -3684,7 +3684,7 @@ TEST_F(ClientTest, 
TestCheckMutationBufferSpaceLimitInEffect) {
     ASSERT_OK(session->SetMutationBufferSpace(kBufferSizeBytes));
     s = ApplyInsertToSession(
           session.get(), client_table_, 0, 1, kLongString.c_str());
-    ASSERT_TRUE(s.IsIncomplete()) << "Got unexpected status: " << s.ToString();
+    ASSERT_TRUE(s.IsIncomplete()) << s.ToString();
     EXPECT_FALSE(session->HasPendingOperations());
     vector<KuduError*> errors;
     ElementDeleter deleter(&errors);
@@ -3798,7 +3798,7 @@ TEST_F(ClientTest, TestSetSessionMutationBufferMaxNum) {
   ASSERT_EQ(0, session->CountPendingErrors());
   ASSERT_TRUE(session->HasPendingOperations());
   Status s = session->SetMutationBufferMaxNum(3);
-  ASSERT_TRUE(s.IsIllegalState());
+  ASSERT_TRUE(s.IsIllegalState()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(),
                       "Cannot change the limit on maximum number of batchers");
   ASSERT_OK(session->Flush());
@@ -4505,7 +4505,7 @@ TEST_F(ClientTest, TestWriteWithBadColumn) {
   unique_ptr<KuduInsert> insert(table->NewInsert());
   ASSERT_OK(insert->mutable_row()->SetInt32("key", 12345));
   Status s = insert->mutable_row()->SetInt32("bad_col", 12345);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "No such column: bad_col");
 }
 
@@ -4559,7 +4559,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     table_alterer->RenameTo(bad_name);
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "invalid table name");
   }
 
@@ -4581,7 +4581,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
   {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "No alter steps provided");
   }
 
@@ -4600,7 +4600,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     Status s = table_alterer
       ->DropColumn("key")
       ->Alter();
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "cannot remove a key column: key");
   }
 
@@ -4609,7 +4609,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     table_alterer->AlterColumn("int_val")->RenameTo("string_val");
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsAlreadyPresent());
+    ASSERT_TRUE(s.IsAlreadyPresent()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "The column already exists: string_val");
   }
 
@@ -4618,7 +4618,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     table_alterer->AlterColumn("string_val");
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "no alter operation specified: 
string_val");
   }
 
@@ -4627,7 +4627,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     table_alterer->AlterColumn("string_val")->Type(KuduColumnSchema::STRING);
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsNotSupported());
+    ASSERT_TRUE(s.IsNotSupported()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "unsupported alter operation: 
string_val");
   }
 
@@ -4636,7 +4636,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     table_alterer->AlterColumn("string_val")->Nullable();
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsNotSupported());
+    ASSERT_TRUE(s.IsNotSupported()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "unsupported alter operation: 
string_val");
   }
 
@@ -4645,7 +4645,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     unique_ptr<KuduTableAlterer> 
table_alterer(client_->NewTableAlterer(kTableName));
     table_alterer->AlterColumn("string_val")->NotNull();
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsNotSupported());
+    ASSERT_TRUE(s.IsNotSupported()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "unsupported alter operation: 
string_val");
   }
 
@@ -4669,7 +4669,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     table_alterer->AddColumn("new_string_val")->Type(KuduColumnSchema::STRING)
       ->Encoding(KuduColumnStorageAttributes::GROUP_VARINT);
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsNotSupported());
+    ASSERT_TRUE(s.IsNotSupported()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "encoding GROUP_VARINT not supported for 
type BINARY");
     ASSERT_EQ(1, tablet_replica->tablet()->metadata()->schema_version());
   }
@@ -4765,7 +4765,7 @@ TEST_F(ClientTest, TestBasicAlterOperations) {
     table_alterer->AlterColumn("non_null_with_default")
         ->Default(KuduValue::CopyString("aaa"));
     Status s = table_alterer->Alter();
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "wrong size for default value");
     ASSERT_EQ(7, tablet_replica->tablet()->metadata()->schema_version());
   }
@@ -4900,7 +4900,7 @@ TEST_F(ClientTest, TestDeleteTable) {
 
   // Try to open the deleted table
   Status s = client_->OpenTable(kTableName, &client_table_);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "the table does not exist");
 
   // Create a new table with the same name. This is to ensure that the client
@@ -5401,7 +5401,7 @@ TEST_F(ClientTest, TestCreateTableWithTooManyTablets) {
       .num_replicas(3)
       .Create();
 #pragma GCC diagnostic pop
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(),
                       "the requested number of tablet replicas is over the "
                       "maximum permitted at creation time (3)");
@@ -6368,7 +6368,7 @@ TEST_F(ClientTest, TestNoDefaultPartitioning) {
     unique_ptr<KuduTableCreator> table_creator(client_->NewTableCreator());
     Status s = 
table_creator->table_name("TestNoDefaultPartitioning").schema(&schema_).Create();
 
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "Table partitioning must be specified");
 }
 
@@ -6972,7 +6972,7 @@ TEST_F(ClientTest, TestBlockScannerHijackingAttempts) {
     bad_guy_scanner.data_->last_response_.set_has_more_results(true);
     KuduScanBatch batch;
     Status s = bad_guy_scanner.NextBatch(&batch);
-    ASSERT_TRUE(s.IsRemoteError());
+    ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "Not authorized");
     ASSERT_EQ(0, batch.NumRows());
   }
diff --git a/src/kudu/client/client-unittest.cc 
b/src/kudu/client/client-unittest.cc
index c452d7f..27f5d66 100644
--- a/src/kudu/client/client-unittest.cc
+++ b/src/kudu/client/client-unittest.cc
@@ -200,7 +200,7 @@ TEST(ClientUnitTest, TestRetryFunc) {
                        [&](const MonoTime& deadline, bool* retry) {
                          return TestFunc(deadline, retry, &counter);
                        });
-  ASSERT_TRUE(s.IsTimedOut());
+  ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
   ASSERT_GT(counter, 5);
   ASSERT_LT(counter, 20);
 }
diff --git a/src/kudu/client/predicate-test.cc 
b/src/kudu/client/predicate-test.cc
index b300d3a..59304f4 100644
--- a/src/kudu/client/predicate-test.cc
+++ b/src/kudu/client/predicate-test.cc
@@ -773,7 +773,7 @@ TEST_F(PredicateTest, TestBoolPredicates) {
     ASSERT_TRUE(no_bloom_filters.empty());
     KuduScanner scanner(table.get());
     Status s = scanner.AddConjunctPredicate(bf_predicate);
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "No Bloom filters supplied");
   }
 
diff --git a/src/kudu/common/schema-test.cc b/src/kudu/common/schema-test.cc
index ae79cf8..14817a0 100644
--- a/src/kudu/common/schema-test.cc
+++ b/src/kudu/common/schema-test.cc
@@ -410,7 +410,7 @@ TEST_F(TestSchema, TestProjectTypeMismatch) {
 
   RowProjector row_projector(&schema1, &schema2);
   Status s = row_projector.Init();
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.message().ToString(), "must have type");
 }
 
@@ -427,7 +427,7 @@ TEST_F(TestSchema, TestProjectMissingColumn) {
 
   RowProjector row_projector(&schema1, &schema2);
   Status s = row_projector.Init();
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.message().ToString(),
     "does not exist in the projection, and it does not have a default value or 
a nullable type");
 
@@ -709,7 +709,7 @@ TEST_F(TestSchema, TestFindColumn) {
   ASSERT_OK(schema.FindColumn("col2", &col_idx));
   ASSERT_EQ(1, col_idx);
   Status s = schema.FindColumn("col3", &col_idx);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_EQ(s.ToString(), "Not found: No such column: col3");
 }
 
diff --git a/src/kudu/consensus/consensus_meta-test.cc 
b/src/kudu/consensus/consensus_meta-test.cc
index 61d6f4f..0150d2c 100644
--- a/src/kudu/consensus/consensus_meta-test.cc
+++ b/src/kudu/consensus/consensus_meta-test.cc
@@ -156,7 +156,7 @@ TEST_P(ConsensusMetadataTest, TestCreateNoOverwrite) {
 TEST_P(ConsensusMetadataTest, TestFailedLoad) {
   EnableEncryption(GetParam());
   Status s = ConsensusMetadata::Load(&fs_manager_, kTabletId, 
fs_manager_.uuid());
-  ASSERT_TRUE(s.IsNotFound()) << "Unexpected status: " << s.ToString();
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   LOG(INFO) << "Expected failure: " << s.ToString();
 }
 
diff --git a/src/kudu/consensus/consensus_queue-test.cc 
b/src/kudu/consensus/consensus_queue-test.cc
index 139a2f2..4e78258 100644
--- a/src/kudu/consensus/consensus_queue-test.cc
+++ b/src/kudu/consensus/consensus_queue-test.cc
@@ -399,7 +399,7 @@ TEST_F(ConsensusQueueTest, 
TestStatusMessagesToFailedUnrecoverablePeer) {
   // Inject failure to read log messages. This will put the peer in 
FAILED_UNRECOVERABLE state.
   FLAGS_consensus_fail_log_read_ops = 1.0;
   Status s = queue_->RequestForPeer(kPeerUuid, &request, &refs, 
&needs_tablet_copy);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_EQ("INJECTED FAILURE", s.message().ToString());
   auto health_map = queue_->ReportHealthOfPeers();
   ASSERT_NE(health_map.count(kPeerUuid), 0);
diff --git a/src/kudu/consensus/leader_election-test.cc 
b/src/kudu/consensus/leader_election-test.cc
index 657da21..1fc8f17 100644
--- a/src/kudu/consensus/leader_election-test.cc
+++ b/src/kudu/consensus/leader_election-test.cc
@@ -474,7 +474,7 @@ void VoteCounterTest::AssertUndecided(const VoteCounter& 
counter) {
   ASSERT_FALSE(counter.IsDecided());
   ElectionVote decision;
   Status s = counter.GetDecision(&decision);
-  ASSERT_TRUE(s.IsIllegalState());
+  ASSERT_TRUE(s.IsIllegalState()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Vote not yet decided");
 }
 
@@ -574,7 +574,7 @@ TEST_F(VoteCounterTest, TestVoteCounter_LateDecision) {
 
   // Attempt to change vote.
   Status s = counter.RegisterVote(voter_uuids[0], VOTE_DENIED, &duplicate);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "voted a different way twice");
   LOG(INFO) << "Expected vote-changed error: " << s.ToString();
   NO_FATALS(AssertUndecided(counter));
@@ -612,7 +612,7 @@ TEST_F(VoteCounterTest, TestVoteCounter_LateDecision) {
 
   // Attempt to vote with > the whole configuration.
   s = counter.RegisterVote("some-random-node", VOTE_GRANTED, &duplicate);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "cause the number of votes to exceed the 
expected number");
   LOG(INFO) << "Expected voters-exceeded error: " << s.ToString();
   ASSERT_TRUE(counter.IsDecided());
diff --git a/src/kudu/consensus/log-test.cc b/src/kudu/consensus/log-test.cc
index c3191cd..46977fb 100644
--- a/src/kudu/consensus/log-test.cc
+++ b/src/kudu/consensus/log-test.cc
@@ -227,7 +227,7 @@ TEST_P(LogTestOptionalCompression, 
TestMultipleEntriesInABatch) {
     ASSERT_OK(log_->reader()->LookupOpId(2, &loaded_op));
     ASSERT_EQ("1.2", OpIdToString(loaded_op));
     Status s = log_->reader()->LookupOpId(3, &loaded_op);
-    ASSERT_TRUE(s.IsNotFound()) << "unexpected status: " << s.ToString();
+    ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   }
 
   ASSERT_OK(log_->Close());
@@ -645,7 +645,7 @@ TEST_P(LogTestOptionalCompression, TestGCOfIndexChunks) {
   ASSERT_EQ(1, num_gced_segments);
 
   Status s = log_->reader()->LookupOpId(999995, &loaded_op);
-  ASSERT_TRUE(s.IsNotFound()) << "unexpected status: " << s.ToString();
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
 }
 
 // Tests that we can append FLUSH_MARKER messages to the log queue to make sure
@@ -1128,7 +1128,7 @@ TEST_F(LogTest, TestDiskSpaceCheck) {
   FLAGS_disk_reserved_bytes_free_for_testing = 0;
   options_.segment_size_mb = 1;
   Status s = BuildLog();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_EQ(ENOSPC, s.posix_code());
   ASSERT_STR_CONTAINS(s.ToString(), "Insufficient disk space");
 
diff --git a/src/kudu/fs/data_dirs-test.cc b/src/kudu/fs/data_dirs-test.cc
index 67672bd..3584b71 100644
--- a/src/kudu/fs/data_dirs-test.cc
+++ b/src/kudu/fs/data_dirs-test.cc
@@ -243,7 +243,7 @@ TEST_F(DataDirsTest, TestFullDiskGrowsGroup) {
   FLAGS_env_inject_full_globs = "*";
   Status s = dd_manager_->GetDirAddIfNecessary(test_block_opts_, &new_dir);
   ASSERT_STR_CONTAINS(s.ToString(), "No directories available");
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
 }
 
 // Test that concurrently adding dirs to a data dir group yields the expected
@@ -314,7 +314,7 @@ TEST_F(DataDirsTest, TestFailedDirNotReturned) {
   ASSERT_EQ(2, down_cast<AtomicGauge<uint64_t>*>(
         entity_->FindOrNull(METRIC_data_dirs_failed).get())->value());
   Status s = dd_manager_->GetDirAddIfNecessary(test_block_opts_, &failed_dd);
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "No healthy directories exist in tablet's 
directory group");
 }
 
@@ -344,11 +344,11 @@ TEST_F(DataDirsTest, TestFailedDirNotAddedToGroup) {
   }
   Status s = dd_manager_->MarkDirFailed(kNumDirs - 1);
   ASSERT_STR_CONTAINS(s.ToString(), "All dirs have failed");
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
 
   s = dd_manager_->CreateDataDirGroup(test_tablet_name_);
   ASSERT_STR_CONTAINS(s.ToString(), "No healthy data directories available");
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
 }
 
 TEST_F(DataDirsTest, TestLoadBalancingDistribution) {
@@ -510,7 +510,7 @@ TEST_F(DataDirManagerTest, TestOpenWithFailedDirs) {
   Status s = DataDirManager::OpenExistingForTests(env_, test_roots_,
       {}, &dd_manager_);
   ASSERT_STR_CONTAINS(s.ToString(), "could not open directory manager");
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
 }
 
 class TooManyDataDirManagerTest : public DataDirManagerTest {
diff --git a/src/kudu/fs/fs_manager-test.cc b/src/kudu/fs/fs_manager-test.cc
index a6f43a8..b0766db 100644
--- a/src/kudu/fs/fs_manager-test.cc
+++ b/src/kudu/fs/fs_manager-test.cc
@@ -227,7 +227,7 @@ TEST_P(FsManagerTestBase, TestCannotUseNonEmptyFsRoot) {
 TEST_P(FsManagerTestBase, TestEmptyWALPath) {
   ReinitFsManagerWithPaths("", {});
   Status s = fs_manager()->CreateInitialFileSystemLayout();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "directory (fs_wal_dir) not provided");
 }
 
@@ -252,7 +252,7 @@ TEST_P(FsManagerTestBase, TestFormatWithSpecificUUID) {
   // Use an invalid uuid at first.
   string uuid = "not_a_valid_uuid";
   Status s = fs_manager()->CreateInitialFileSystemLayout(uuid);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), Substitute("invalid uuid $0", uuid));
 
   // Now use a valid one.
@@ -328,7 +328,7 @@ TEST_P(FsManagerTestBase, TestMetadataDirInDataRoot) {
   ReinitFsManagerWithOpts(opts);
   Status s = fs_manager()->Open();
   ASSERT_STR_CONTAINS(s.ToString(), "could not verify required directory");
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_FALSE(env_->FileExists(opts.data_roots[0]));
   ASSERT_TRUE(env_->FileExists(opts.data_roots[1]));
 
@@ -484,7 +484,7 @@ TEST_P(FsManagerTestBase, 
TestOpenWithNoBlockManagerInstances) {
     ReinitFsManagerWithOpts(new_opts);
     Status s = fs_manager()->Open();
     ASSERT_STR_CONTAINS(s.ToString(), "no healthy directories found");
-    ASSERT_TRUE(s.IsNotFound());
+    ASSERT_TRUE(s.IsNotFound()) << s.ToString();
 
     // Once we supply the WAL directory as a data directory, we can open 
successfully.
     new_opts.data_roots.emplace_back(wal_path);
@@ -740,13 +740,13 @@ TEST_P(FsManagerTestBase, 
TestOpenFailsWhenMissingImportantDir) {
   ASSERT_OK(env_->DeleteDir(kWalRoot));
   ReinitFsManager();
   Status s = fs_manager()->Open();
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "could not verify required directory");
 
   unique_ptr<WritableFile> f;
   ASSERT_OK(env_->NewWritableFile(kWalRoot, &f));
   s = fs_manager()->Open();
-  ASSERT_TRUE(s.IsCorruption());
+  ASSERT_TRUE(s.IsCorruption()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "exists but is not a directory");
 }
 
@@ -988,7 +988,7 @@ TEST_P(FsManagerTestBase, 
TestCannotRemoveDataDirServingAsMetadataDir) {
   opts.data_roots = { opts.data_roots[1] };
   ReinitFsManagerWithOpts(opts);
   Status s = fs_manager()->Open();
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "could not verify required directory");
 }
 
diff --git a/src/kudu/fs/log_block_manager-test.cc 
b/src/kudu/fs/log_block_manager-test.cc
index e01dda3..9ad958d 100644
--- a/src/kudu/fs/log_block_manager-test.cc
+++ b/src/kudu/fs/log_block_manager-test.cc
@@ -843,7 +843,7 @@ TEST_P(LogBlockManagerTest, TestMetadataTruncation) {
   // Now try to reopen the container.
   // This should look like a bad checksum, and it's not recoverable.
   s = ReopenBlockManager();
-  ASSERT_TRUE(s.IsCorruption());
+  ASSERT_TRUE(s.IsCorruption()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Incorrect checksum");
 
   // Now truncate both the data and metadata files.
@@ -1151,7 +1151,7 @@ TEST_P(LogBlockManagerTest, 
TestFailMultipleTransactionsPerContainer) {
     FLAGS_crash_on_eio = false;
     FLAGS_env_inject_eio = 1.0;
     Status s = block_transactions[0]->CommitCreatedBlocks();
-    ASSERT_TRUE(s.IsIOError());
+    ASSERT_TRUE(s.IsIOError()) << s.ToString();
   }
 
   // Now try to add some more blocks.
@@ -1164,7 +1164,7 @@ TEST_P(LogBlockManagerTest, 
TestFailMultipleTransactionsPerContainer) {
     // new container.
     Status s = block->Append("x");
     if (i == 0) {
-      ASSERT_TRUE(s.IsIOError());
+      ASSERT_TRUE(s.IsIOError()) << s.ToString();
     } else {
       ASSERT_OK_FAST(s);
       ASSERT_OK_FAST(block->Finalize());
diff --git a/src/kudu/integration-tests/alter_table-test.cc 
b/src/kudu/integration-tests/alter_table-test.cc
index c356bda..4010f8c 100644
--- a/src/kudu/integration-tests/alter_table-test.cc
+++ b/src/kudu/integration-tests/alter_table-test.cc
@@ -427,7 +427,7 @@ TEST_F(AlterTableTest, TestAddExistingColumn) {
 
   {
     Status s = AddNewI32Column(kTableName, "c1", 0);
-    ASSERT_TRUE(s.IsAlreadyPresent());
+    ASSERT_TRUE(s.IsAlreadyPresent()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "The column already exists: c1");
   }
 
@@ -457,7 +457,7 @@ TEST_F(AlterTableTest, 
TestAddNotNullableColumnWithoutDefaults) {
     master::CatalogManager::ScopedLeaderSharedLock l(catalog);
     ASSERT_OK(l.first_failed_status());
     Status s = catalog->AlterTableRpc(req, &resp, /*rpc=*/nullptr);
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "column `c2`: NOT NULL columns must have 
a default");
   }
 
@@ -643,7 +643,7 @@ TEST_F(AlterTableTest, TestAlterOnTSRestart) {
   {
     Status s = AddNewI32Column(kTableName, "new-32", 10,
                                MonoDelta::FromMilliseconds(500));
-    ASSERT_TRUE(s.IsTimedOut());
+    ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
   }
 
   // Verify that the Schema is the old one
@@ -670,7 +670,7 @@ TEST_F(AlterTableTest, TestShutdownWithPendingTasks) {
   {
     Status s = AddNewI32Column(kTableName, "new-i32", 10,
                                MonoDelta::FromMilliseconds(500));
-    ASSERT_TRUE(s.IsTimedOut());
+    ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
   }
 }
 
@@ -686,7 +686,7 @@ TEST_F(AlterTableTest, TestRestartTSDuringAlter) {
 
   Status s = AddNewI32Column(kTableName, "new-i32", 10,
                              MonoDelta::FromMilliseconds(1));
-  ASSERT_TRUE(s.IsTimedOut());
+  ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
 
   // Restart the TS while alter is running
   for (int i = 0; i < 3; i++) {
@@ -2263,7 +2263,7 @@ TEST_F(ReplicatedAlterTableTest, AlterReplicationFactor) {
 
   // 5. Set replication factor to 5, while there are only 4 tservers in the 
cluster.
   auto s = SetReplicationFactor(kTableName, 5);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "not enough live tablet servers to alter a 
table with the"
                                     " requested replication factor 5; 4 tablet 
servers are alive");
   NO_FATALS(VerifyTabletReplicaCount(3, VerifyRowCount::kEnable));
@@ -2271,7 +2271,7 @@ TEST_F(ReplicatedAlterTableTest, AlterReplicationFactor) {
 
   // 6. Set replication factor to -1, it will fail.
   s = SetReplicationFactor(kTableName, -1);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "illegal replication factor -1: minimum 
allowed replication"
                                     " factor is 1 (controlled by 
--min_num_replicas)");
   NO_FATALS(VerifyTabletReplicaCount(3, VerifyRowCount::kEnable));
@@ -2279,14 +2279,14 @@ TEST_F(ReplicatedAlterTableTest, 
AlterReplicationFactor) {
 
   // 7. Set replication factor to 2, it will fail.
   s = SetReplicationFactor(kTableName, 2);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "illegal replication factor 2: replication 
factor must be odd");
   NO_FATALS(VerifyTabletReplicaCount(3, VerifyRowCount::kEnable));
   ASSERT_EQ(2, tablet_replica_->tablet()->metadata()->schema_version());
 
   // 8. Set replication factor to 9, it will fail.
   s = SetReplicationFactor(kTableName, 9);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "illegal replication factor 9: maximum 
allowed replication "
                                     "factor is 7 (controlled by 
--max_num_replicas)");
   NO_FATALS(VerifyTabletReplicaCount(3, VerifyRowCount::kEnable));
diff --git a/src/kudu/integration-tests/delete_table-itest.cc 
b/src/kudu/integration-tests/delete_table-itest.cc
index e53defc..e38215b 100644
--- a/src/kudu/integration-tests/delete_table-itest.cc
+++ b/src/kudu/integration-tests/delete_table-itest.cc
@@ -41,6 +41,7 @@
 #include "kudu/client/schema.h"
 #include "kudu/client/shared_ptr.h" // IWYU pragma: keep
 #include "kudu/common/partial_row.h"
+#include "kudu/common/row_operations.pb.h"
 #include "kudu/common/schema.h"
 #include "kudu/common/wire_protocol-test-util.h"
 #include "kudu/common/wire_protocol.h"
@@ -908,7 +909,7 @@ TEST_F(DeleteTableITest, 
TestDeleteFollowerWithReplicatingOps) {
   LOG(INFO) << "Writing a row";
   Status s = WriteSimpleTestRow(leader, tablet_id, RowOperationsPB::INSERT,
                                 1, 1, "hola, world", 
MonoDelta::FromSeconds(5));
-  ASSERT_TRUE(s.IsTimedOut());
+  ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "timed out");
 
   LOG(INFO) << "Killing the leader...";
diff --git a/src/kudu/integration-tests/delete_tablet-itest.cc 
b/src/kudu/integration-tests/delete_tablet-itest.cc
index d8af790..9b58c4e 100644
--- a/src/kudu/integration-tests/delete_tablet-itest.cc
+++ b/src/kudu/integration-tests/delete_tablet-itest.cc
@@ -120,7 +120,7 @@ TEST_F(DeleteTabletITest, TestDeleteFailedReplica) {
   FLAGS_fs_wal_dir_reserved_bytes = INT64_MAX;
   ASSERT_OK(mts->Restart());
   Status s = mts->server()->tablet_manager()->WaitForAllBootstrapsToFinish();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Insufficient disk space");
 
   // Tablet bootstrap failure should result in tablet status == FAILED.
diff --git a/src/kudu/integration-tests/master_authz-itest.cc 
b/src/kudu/integration-tests/master_authz-itest.cc
index 3c174de..0f6a043 100644
--- a/src/kudu/integration-tests/master_authz-itest.cc
+++ b/src/kudu/integration-tests/master_authz-itest.cc
@@ -935,7 +935,7 @@ TEST_P(MasterAuthzITest, TestAuthzGiveAwayOwnership) {
     unique_ptr<KuduTableAlterer> alterer(
         this->client_->NewTableAlterer(table_name));
     Status s = alterer->DropColumn("int8_val")->Alter();
-    ASSERT_TRUE(s.IsNotAuthorized());
+    ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
   }
 
   // Login as the new owner, create a new client, and alter the table.
@@ -954,7 +954,7 @@ TEST_P(MasterAuthzITest, 
TestChangeOwnerWithoutDelegateAdmin) {
 
   unique_ptr<KuduTableAlterer> 
alterer(this->client_->NewTableAlterer(table_name));
   Status s = alterer->SetOwner(kSecondUser)->Alter();
-  ASSERT_TRUE(s.IsNotAuthorized());
+  ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
 }
 
 TEST_P(MasterAuthzITest, TestChangeOwnerWithoutAll) {
@@ -963,7 +963,7 @@ TEST_P(MasterAuthzITest, TestChangeOwnerWithoutAll) {
 
   unique_ptr<KuduTableAlterer> 
alterer(this->client_->NewTableAlterer(table_name));
   Status s = alterer->SetOwner(kSecondUser)->Alter();
-  ASSERT_TRUE(s.IsNotAuthorized());
+  ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
 }
 
 TEST_P(MasterAuthzITest, TestAlterAndChangeOwner) {
@@ -973,7 +973,7 @@ TEST_P(MasterAuthzITest, TestAlterAndChangeOwner) {
   unique_ptr<KuduTableAlterer> 
alterer(this->client_->NewTableAlterer(table_name));
   alterer->SetOwner(kSecondUser)->DropColumn("int8_val");
   Status s = alterer->Alter();
-  ASSERT_TRUE(s.IsNotAuthorized());
+  ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
 
   this->GrantAllWithGrantTablePrivilege({kDatabaseName, kTableName});
   ASSERT_OK(alterer->Alter());
@@ -1020,7 +1020,7 @@ TEST_P(MasterAuthzOwnerITest, TestMismatchedTable) {
   ASSERT_OK(this->cluster_->kdc()->Kinit(kTestUser));
 
   Status s = this->GetTableLocationsWithTableId(table_name_b, table_id_a);
-  ASSERT_TRUE(s.IsNotAuthorized());
+  ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
   ASSERT_STR_MATCHES(s.ToString(), "[Uu]nauthorized action");
 
   ASSERT_OK(this->GrantGetMetadataTablePrivilege({ kDatabaseName, kTableName, 
kUsername }));
diff --git a/src/kudu/integration-tests/master_replication-itest.cc 
b/src/kudu/integration-tests/master_replication-itest.cc
index 5995fa8..8498a65 100644
--- a/src/kudu/integration-tests/master_replication-itest.cc
+++ b/src/kudu/integration-tests/master_replication-itest.cc
@@ -317,7 +317,7 @@ TEST_F(MasterReplicationTest, TestMasterPeerSetsDontMatch) {
   ASSERT_OK(cluster_->mini_master(0)->Start());
   Status s = cluster_->mini_master(0)->WaitForCatalogManagerInit();
   SCOPED_TRACE(s.ToString());
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "55555");
   ASSERT_STR_CONTAINS(s.ToString(), "55556");
 }
diff --git a/src/kudu/integration-tests/raft_consensus-itest.cc 
b/src/kudu/integration-tests/raft_consensus-itest.cc
index 038c05c..34bcaf1 100644
--- a/src/kudu/integration-tests/raft_consensus-itest.cc
+++ b/src/kudu/integration-tests/raft_consensus-itest.cc
@@ -1934,7 +1934,7 @@ TEST_F(RaftConsensusITest, 
TestEarlyCommitDespiteMemoryPressure) {
   Status s = replica_ts->consensus_proxy->UpdateConsensus(req, &resp, &rpc);
 
   // Our memory limit was truly tiny, so we should be over it by now...
-  ASSERT_TRUE(s.IsRemoteError());
+  ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Soft memory limit exceeded");
 
   // ...but despite rejecting the request, we should have committed the
@@ -2592,7 +2592,7 @@ TEST_P(RaftConsensusParamReplicationModesITest, 
Test_KUDU_1735) {
     auto* ts = cluster_->tablet_server_by_uuid(server_uuid);
     auto s = ts->WaitForInjectedCrash(MonoDelta::FromSeconds(5));
     if (server_uuid == evicted_tserver->uuid() && is_3_4_3 && !s.ok()) {
-      ASSERT_TRUE(s.IsTimedOut());
+      ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
       continue;
     }
     ASSERT_TRUE(s.ok()) << s.ToString();
diff --git a/src/kudu/integration-tests/security-itest.cc 
b/src/kudu/integration-tests/security-itest.cc
index 8b87b90..2fa920f 100644
--- a/src/kudu/integration-tests/security-itest.cc
+++ b/src/kudu/integration-tests/security-itest.cc
@@ -603,7 +603,7 @@ TEST_F(SecurityITest, TestNonDefaultPrincipal) {
       
builder.add_master_server_addr(cluster_->master(i)->bound_rpc_addr().ToString());
     }
     const auto s = builder.Build(&client);
-    ASSERT_TRUE(s.IsNotAuthorized());
+    ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "not found in Kerberos database");
 
     // Create a client with the matching SASL proto name and verify it's able 
to
@@ -622,8 +622,8 @@ TEST_F(SecurityITest, TestNonDefaultPrincipal) {
 TEST_F(SecurityITest, TestNonExistentPrincipal) {
   cluster_opts_.extra_master_flags.emplace_back("--principal=oryx");
   cluster_opts_.extra_tserver_flags.emplace_back("--principal=oryx");
-  Status s = StartCluster();
-  ASSERT_TRUE(s.IsRuntimeError());
+  auto s = StartCluster();
+  ASSERT_TRUE(s.IsRuntimeError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "failed to start masters");
 }
 
@@ -640,7 +640,7 @@ TEST_F(SecurityITest, TestMismatchingPrincipals) {
   }
   cluster_->Shutdown();
   Status s = cluster_->Restart();
-  ASSERT_TRUE(s.IsTimedOut());
+  ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
 }
 
 TEST_F(SecurityITest, TestRequireAuthenticationInsecureCluster) {
@@ -651,7 +651,7 @@ TEST_F(SecurityITest, 
TestRequireAuthenticationInsecureCluster) {
   KuduClientBuilder b;
   b.require_authentication(true);
   Status s = cluster_->CreateClient(&b, &client);
-  ASSERT_TRUE(s.IsNotAuthorized());
+  ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(),
                       "client requires authentication, but server does not 
have Kerberos enabled");
 }
@@ -668,7 +668,7 @@ TEST_F(SecurityITest, TestRequireEncryptionInsecureCluster) 
{
   KuduClientBuilder b;
   b.encryption_policy(client::KuduClientBuilder::REQUIRED);
   Status s = cluster_->CreateClient(&b, &client);
-  ASSERT_TRUE(s.IsNotAuthorized());
+  ASSERT_TRUE(s.IsNotAuthorized()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "server does not support required TLS 
encryption");
 }
 
diff --git a/src/kudu/integration-tests/tablet_replacement-itest.cc 
b/src/kudu/integration-tests/tablet_replacement-itest.cc
index bc9b367..658ed82 100644
--- a/src/kudu/integration-tests/tablet_replacement-itest.cc
+++ b/src/kudu/integration-tests/tablet_replacement-itest.cc
@@ -332,7 +332,7 @@ TEST_F(TabletReplacementITest, 
TestMasterTombstoneEvictedReplica) {
   // This will time out, but should take effect.
   Status s = AddServer(leader_ts, tablet_id, follower_ts, RaftPeerPB::VOTER,
                        MonoDelta::FromSeconds(5));
-  ASSERT_TRUE(s.IsTimedOut());
+  ASSERT_TRUE(s.IsTimedOut()) << s.ToString();
   ASSERT_OK(inspect_->WaitForTabletDataStateOnTS(kFollowerIndex, tablet_id, { 
TABLET_DATA_READY },
                                                  timeout));
   ASSERT_OK(WaitForServersToAgree(timeout, active_ts_map, tablet_id, 3));
diff --git a/src/kudu/integration-tests/timestamp_advancement-itest.cc 
b/src/kudu/integration-tests/timestamp_advancement-itest.cc
index 3e782d9..98542f2 100644
--- a/src/kudu/integration-tests/timestamp_advancement-itest.cc
+++ b/src/kudu/integration-tests/timestamp_advancement-itest.cc
@@ -353,7 +353,7 @@ TEST_F(TimestampAdvancementITest, 
TestUpgradeFromOlderCorruptedData) {
 
   replica = tablet_replica_on_ts(kTserver);
   Status s = replica->tablet()->Compact(tablet::Tablet::COMPACT_NO_FLAGS);
-  ASSERT_TRUE(s.IsCorruption());
+  ASSERT_TRUE(s.IsCorruption()) << s.ToString();
   ASSERT_EVENTUALLY([&] {
     ASSERT_EQ(tablet::TabletStatePB::FAILED, replica->state());
   });
diff --git a/src/kudu/integration-tests/tombstoned_voting-imc-itest.cc 
b/src/kudu/integration-tests/tombstoned_voting-imc-itest.cc
index 485dbfc..509cc5d 100644
--- a/src/kudu/integration-tests/tombstoned_voting-imc-itest.cc
+++ b/src/kudu/integration-tests/tombstoned_voting-imc-itest.cc
@@ -222,13 +222,13 @@ TEST_F(TombstonedVotingIMCITest, TestVotingLogic) {
     Status s = RequestVote(ts1_ets, tablet_id, "B", current_term, 
last_logged_opid,
                            /*ignore_live_leader=*/ true, /*is_pre_election=*/ 
false,
                            kTimeout);
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "Already voted for candidate A in this 
term");
 
     // Ask TS1 for a vote that should be denied (old term).
     s = RequestVote(ts1_ets, tablet_id, "B", current_term - 1, 
last_logged_opid,
                     /*ignore_live_leader=*/ true, /*is_pre_election=*/ false, 
kTimeout);
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_MATCHES(s.ToString(), "Denying vote to candidate B for earlier 
term");
 
     // Increment term.
@@ -238,7 +238,7 @@ TEST_F(TombstonedVotingIMCITest, TestVotingLogic) {
     // Ask TS1 for a vote that should be denied (old last-logged opid).
     s = RequestVote(ts1_ets, tablet_id, "B", current_term, old_opid,
                     /*ignore_live_leader=*/ true, /*is_pre_election=*/ false, 
kTimeout);
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_MATCHES(s.ToString(),
                       "Denying vote to candidate B.*greater than that of the 
candidate");
 
diff --git a/src/kudu/integration-tests/txn_write_ops-itest.cc 
b/src/kudu/integration-tests/txn_write_ops-itest.cc
index f460f4e..a69e45c 100644
--- a/src/kudu/integration-tests/txn_write_ops-itest.cc
+++ b/src/kudu/integration-tests/txn_write_ops-itest.cc
@@ -1359,7 +1359,7 @@ TEST_F(TxnOpDispatcherITest, BeginTxnLockAbort) {
     // The second transaction should have been automatically aborted in its
     // attempt to write to avoid deadlock.
     Status s = InsertRows(second_txn.get(), 1, &key);
-    ASSERT_TRUE(s.IsIOError());
+    ASSERT_TRUE(s.IsIOError()) << s.ToString();
     ASSERT_EQ(0, GetTxnOpDispatchersTotalCount());
     ASSERT_EVENTUALLY([&] {
       bool is_complete;
diff --git a/src/kudu/master/dynamic_multi_master-test.cc 
b/src/kudu/master/dynamic_multi_master-test.cc
index 147707c..29d89ca 100644
--- a/src/kudu/master/dynamic_multi_master-test.cc
+++ b/src/kudu/master/dynamic_multi_master-test.cc
@@ -1014,7 +1014,7 @@ TEST_P(ParameterizedRemoveMasterTest, TestRemoveMaster) {
   // Attempt transferring leadership to the removed master
   LOG(INFO) << "Transferring leadership to master: " << master_to_remove_uuid;
   s = TransferMasterLeadershipAsync(cluster_.get(), master_to_remove_uuid);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(),
                       Substitute("tablet server $0 is not a voter in the 
active config",
                                  master_to_remove_uuid));
diff --git a/src/kudu/master/master-test.cc b/src/kudu/master/master-test.cc
index cf971c8..ddf6adc 100644
--- a/src/kudu/master/master-test.cc
+++ b/src/kudu/master/master-test.cc
@@ -671,7 +671,7 @@ TEST_F(MasterTest, TestRegisterAndHeartbeat) {
     req.mutable_replica_management_info()->CopyFrom(rmi);
     req.mutable_registration()->mutable_rpc_addresses(0)->set_port(1001);
     Status s = proxy_->TSHeartbeat(req, &resp, &rpc);
-    ASSERT_TRUE(s.IsRemoteError());
+    ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(),
                         "Tablet server my-ts-uuid is attempting to re-register 
"
                         "with a different host/port.");
diff --git a/src/kudu/rpc/exactly_once_rpc-test.cc 
b/src/kudu/rpc/exactly_once_rpc-test.cc
index b2841af..31f4744 100644
--- a/src/kudu/rpc/exactly_once_rpc-test.cc
+++ b/src/kudu/rpc/exactly_once_rpc-test.cc
@@ -550,7 +550,7 @@ TEST_F(ExactlyOnceRpcTest, 
TestExactlyOnceSemanticsGarbageCollection) {
 
   resp.Clear();
   Status s = MakeAddCall(sequence_number, 1, &resp);
-  ASSERT_TRUE(s.IsRemoteError());
+  ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "is stale");
 
   // Sleep again, this time for 'remember_clients_ttl_ms' and run GC again.
diff --git a/src/kudu/rpc/rpc-test.cc b/src/kudu/rpc/rpc-test.cc
index 4a3aedd..78403f1 100644
--- a/src/kudu/rpc/rpc-test.cc
+++ b/src/kudu/rpc/rpc-test.cc
@@ -353,7 +353,7 @@ TEST_P(TestRpc, TestCallWithBadPasswordProtectedKey) {
   Sockaddr server_addr = bind_addr();
   Status s = StartTestServer(&server_addr, enable_ssl(), rpc_certificate_file, 
rpc_private_key_file,
       rpc_ca_certificate_file, rpc_private_key_password_cmd);
-  ASSERT_TRUE(s.IsRuntimeError());
+  ASSERT_TRUE(s.IsRuntimeError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "failed to load private key file");
 }
 
@@ -1277,7 +1277,7 @@ TEST_P(TestRpc, TestRpcContextClientDeadline) {
   SleepResponsePB resp;
   RpcController controller;
   Status s = p.SyncRequest("Sleep", req, &resp, &controller);
-  ASSERT_TRUE(s.IsRemoteError());
+  ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Missing required timeout");
 
   controller.Reset();
@@ -1321,7 +1321,7 @@ TEST_P(TestRpc, TestApplicationFeatureFlag) {
     controller.RequireServerFeature(99);
     Status s = p.SyncRequest("Add", req, &resp, &controller);
     SCOPED_TRACE(strings::Substitute("unsupported response: $0", 
s.ToString()));
-    ASSERT_TRUE(s.IsRemoteError());
+    ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
   }
 }
 
@@ -1349,7 +1349,7 @@ TEST_P(TestRpc, 
TestApplicationFeatureFlagUnsupportedServer) {
     controller.RequireServerFeature(FeatureFlags::FOO);
     Status s = p.SyncRequest("Add", req, &resp, &controller);
     SCOPED_TRACE(strings::Substitute("supported response: $0", s.ToString()));
-    ASSERT_TRUE(s.IsNotSupported());
+    ASSERT_TRUE(s.IsNotSupported()) << s.ToString();
   }
 
   { // No required flag
@@ -1405,7 +1405,7 @@ TEST_P(TestRpc, TestCancellation) {
         controller.RequireServerFeature(FeatureFlags::FOO);
         controller.RequireServerFeature(99);
         Status s = p.SyncRequest("Add", req, &resp, &controller);
-        ASSERT_TRUE(s.IsRemoteError());
+        ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
         break;
       }
       case OutboundCall::FINISHED_SUCCESS:
diff --git a/src/kudu/rpc/rpc_stub-test.cc b/src/kudu/rpc/rpc_stub-test.cc
index d446227..abf21ee 100644
--- a/src/kudu/rpc/rpc_stub-test.cc
+++ b/src/kudu/rpc/rpc_stub-test.cc
@@ -371,7 +371,7 @@ TEST_F(RpcStubTest, TestApplicationError) {
   req.set_sleep_micros(1);
   req.set_return_app_error(true);
   Status s = p.Sleep(req, &resp, &controller);
-  ASSERT_TRUE(s.IsRemoteError());
+  ASSERT_TRUE(s.IsRemoteError()) << s.ToString();
   EXPECT_EQ("Remote error: Got some error", s.ToString());
   EXPECT_EQ("message: \"Got some error\"\n"
             "[kudu.rpc_test.CalculatorError.app_error_ext] {\n"
diff --git a/src/kudu/security/ca/cert_management-test.cc 
b/src/kudu/security/ca/cert_management-test.cc
index 19c6aa6..d6a3ef0 100644
--- a/src/kudu/security/ca/cert_management-test.cc
+++ b/src/kudu/security/ca/cert_management-test.cc
@@ -113,7 +113,7 @@ TEST_F(CertManagementTest, RequestGeneratorBasics) {
   ASSERT_OK(key.ToString(&key_str, DataFormat::PEM));
   // Check for non-supported number of bits for the key.
   Status s = GeneratePrivateKey(7, &key);
-  ASSERT_TRUE(s.IsRuntimeError());
+  ASSERT_TRUE(s.IsRuntimeError()) << s.ToString();
 }
 
 // Check that CertSigner behaves in a predictable way if given non-matching
diff --git a/src/kudu/server/webserver-test.cc 
b/src/kudu/server/webserver-test.cc
index d52bd12..6fa2a02 100644
--- a/src/kudu/server/webserver-test.cc
+++ b/src/kudu/server/webserver-test.cc
@@ -177,7 +177,7 @@ TEST_F(PasswdWebserverTest, TestCrashInFIPSMode) {
   }
 
   Status s = server_->Start();
-  ASSERT_TRUE(s.IsIllegalState());
+  ASSERT_TRUE(s.IsIllegalState()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Digest authentication in FIPS approved 
mode");
 }
 
diff --git a/src/kudu/tablet/deltafile-test.cc 
b/src/kudu/tablet/deltafile-test.cc
index ee118d9..1fc2620 100644
--- a/src/kudu/tablet/deltafile-test.cc
+++ b/src/kudu/tablet/deltafile-test.cc
@@ -350,7 +350,7 @@ TEST_F(TestDeltaFile, TestSkipsDeltasOutOfRange) {
   ASSERT_FALSE(opts.snap_to_include.MayHaveAppliedOpsAtOrAfter(Timestamp(10)));
   unique_ptr<DeltaIterator> iter;
   Status s = reader->NewDeltaIterator(opts, &iter);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_EQ(nullptr, iter);
 
   // should include
@@ -409,7 +409,7 @@ TEST_F(TestDeltaFile, TestEmptyFileIsAborted) {
 
     // The block is only deleted when the DeltaFileWriter goes out of scope.
     Status s = dfw.Finish();
-    ASSERT_TRUE(s.IsAborted());
+    ASSERT_TRUE(s.IsAborted()) << s.ToString();
   }
 
   // The block should have been deleted as well.
diff --git a/src/kudu/tablet/diskrowset-test.cc 
b/src/kudu/tablet/diskrowset-test.cc
index cce3d47..39e2d3e 100644
--- a/src/kudu/tablet/diskrowset-test.cc
+++ b/src/kudu/tablet/diskrowset-test.cc
@@ -212,7 +212,7 @@ TEST_F(TestRowSet, TestRowSetUpdate) {
   OperationResultPB result;
   ProbeStats stats;
   Status s = rs->MutateRow(timestamp, probe, enc.as_changelist(), op_id_, 
nullptr, &stats, &result);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_EQ(0, result.mutated_stores_size());
 
   // Now read back the value column, and verify that the updates
@@ -247,7 +247,7 @@ TEST_F(TestRowSet, TestErrorDuringUpdate) {
   ProbeStats stats;
   Status s = rs->MutateRow(timestamp, probe, enc.as_changelist(), op_id_, 
nullptr, &stats, &result);
   LOG(INFO) << s.ToString();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
 }
 
 TEST_F(TestRowSet, TestRandomRead) {
diff --git a/src/kudu/tablet/mvcc-test.cc b/src/kudu/tablet/mvcc-test.cc
index 75b7b6e..31d922c 100644
--- a/src/kudu/tablet/mvcc-test.cc
+++ b/src/kudu/tablet/mvcc-test.cc
@@ -600,12 +600,12 @@ TEST_F(MvccTest, TestDontWaitAfterClose) {
   mgr.Close();
   waiting_thread.join();
   ASSERT_STR_CONTAINS(s.ToString(), "closed");
-  ASSERT_TRUE(s.IsAborted());
+  ASSERT_TRUE(s.IsAborted()) << s.ToString();
 
   // New waiters should abort immediately.
   s = mgr.WaitForApplyingOpsToApply();
   ASSERT_STR_CONTAINS(s.ToString(), "closed");
-  ASSERT_TRUE(s.IsAborted());
+  ASSERT_TRUE(s.IsAborted()) << s.ToString();
 }
 
 // Test that if we abort an op we don't advance the new op lower bound and
diff --git a/src/kudu/tablet/ops/op_tracker-test.cc 
b/src/kudu/tablet/ops/op_tracker-test.cc
index 2699a0c..c948041 100644
--- a/src/kudu/tablet/ops/op_tracker-test.cc
+++ b/src/kudu/tablet/ops/op_tracker-test.cc
@@ -263,7 +263,7 @@ TEST_P(OpTrackerTest, TestTooManyOps) {
   LOG(INFO) << "Added " << drivers.size() << " drivers";
   int current_memory_limit_rejections_count = (limit.second <= limit.first) ? 
1 : 0;
   int min_memory_limit = limit.first < limit.second ? limit.first : 
limit.second;
-  ASSERT_TRUE(s.IsServiceUnavailable());
+  ASSERT_TRUE(s.IsServiceUnavailable()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "exceeds the op memory limit");
   NO_FATALS(CheckMetrics(entity_, drivers.size(), 0, 1, 
current_memory_limit_rejections_count));
   NO_FATALS(CheckMemTracker(t, min_memory_limit));
diff --git a/src/kudu/tablet/tablet-schema-test.cc 
b/src/kudu/tablet/tablet-schema-test.cc
index 94dfa36..de26638 100644
--- a/src/kudu/tablet/tablet-schema-test.cc
+++ b/src/kudu/tablet/tablet-schema-test.cc
@@ -129,7 +129,7 @@ TEST_F(TestTabletSchema, TestRead) {
   ASSERT_OK(tablet()->NewRowIterator(projection, &iter));
 
   Status s = iter->Init(nullptr);
-  ASSERT_TRUE(s.IsInvalidArgument());
+  ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
   ASSERT_STR_CONTAINS(s.message().ToString(),
                       "Some columns are not present in the current schema: c2, 
c3");
 }
diff --git a/src/kudu/tablet/tablet_bootstrap-test.cc 
b/src/kudu/tablet/tablet_bootstrap-test.cc
index c800bcd..d06306c 100644
--- a/src/kudu/tablet/tablet_bootstrap-test.cc
+++ b/src/kudu/tablet/tablet_bootstrap-test.cc
@@ -35,11 +35,11 @@
 #include "kudu/common/partial_row.h"
 #include "kudu/common/partition.h"
 #include "kudu/common/row_operations.h"
+#include "kudu/common/row_operations.pb.h"
 #include "kudu/common/schema.h"
 #include "kudu/common/timestamp.h"
 #include "kudu/common/wire_protocol-test-util.h"
 #include "kudu/common/wire_protocol.h"
-#include "kudu/common/wire_protocol.pb.h"
 #include "kudu/consensus/consensus-test-util.h"
 #include "kudu/consensus/consensus.pb.h"
 #include "kudu/consensus/consensus_meta.h"
@@ -456,7 +456,7 @@ TEST_F(BootstrapTest, TestMissingConsensusMetadata) {
   ConsensusBootstrapInfo boot_info;
   Status s = RunBootstrapOnTestTablet(meta, &tablet, &boot_info);
 
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Unable to load consensus metadata");
 }
 
diff --git a/src/kudu/tablet/txn_participant-test.cc 
b/src/kudu/tablet/txn_participant-test.cc
index e1451ab..33c6aa3 100644
--- a/src/kudu/tablet/txn_participant-test.cc
+++ b/src/kudu/tablet/txn_participant-test.cc
@@ -1210,7 +1210,7 @@ TEST_F(TxnParticipantTest, 
TestUpdateCommittedTransactionMRS) {
   ASSERT_OK(IterateToStrings(&rows));
   ASSERT_EQ(0, rows.size());
   s = Delete(0);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
 
   ASSERT_OK(CallParticipantOpCheckResp(kTxnId, 
ParticipantOpPB::FINALIZE_COMMIT,
                                        clock()->Now().value()));
@@ -1303,7 +1303,7 @@ TEST_F(TxnParticipantTest, 
TestInsertIgnoreInTransactionMRS) {
   ASSERT_TRUE(rows.empty());
 
   Status s = Write(0, kTxnId);
-  ASSERT_TRUE(s.IsAlreadyPresent());
+  ASSERT_TRUE(s.IsAlreadyPresent()) << s.ToString();
   ASSERT_EQ(0, 
tablet_replica_->tablet()->metrics()->insert_ignore_errors->value());
 
   ASSERT_OK(Write(0, kTxnId, RowOperationsPB::INSERT_IGNORE));
@@ -1329,7 +1329,7 @@ TEST_F(TxnParticipantTest, TestInsertIgnoreInMainMRS) {
   ASSERT_EQ(1, rows.size());
 
   Status s = Write(0, kTxnId);
-  ASSERT_TRUE(s.IsAlreadyPresent());
+  ASSERT_TRUE(s.IsAlreadyPresent()) << s.ToString();
   ASSERT_EQ(0, 
tablet_replica_->tablet()->metrics()->insert_ignore_errors->value());
 
   ASSERT_OK(Write(0, kTxnId, RowOperationsPB::INSERT_IGNORE));
@@ -1514,7 +1514,7 @@ TEST_F(TxnParticipantTest, TestMRSLookupsMetric) {
   // Trying to delete a row that doesn't exist will consult just the committed
   // transactional MRS before attempting to delete from the main MRS.
   Status s = Delete(10);
-  ASSERT_TRUE(s.IsNotFound());
+  ASSERT_TRUE(s.IsNotFound()) << s.ToString();
   ASSERT_EQ(6, tablet_replica_->tablet()->metrics()->mrs_lookups->value());
 
   // Deleting a row that exists in a MRS, the committed transactional MRS is
diff --git a/src/kudu/tserver/tablet_copy_client-test.cc 
b/src/kudu/tserver/tablet_copy_client-test.cc
index fbe0228..670ee08 100644
--- a/src/kudu/tserver/tablet_copy_client-test.cc
+++ b/src/kudu/tserver/tablet_copy_client-test.cc
@@ -252,13 +252,13 @@ TEST_F(TabletCopyClientTest, TestLifeCycle) {
   ASSERT_OK(StartCopy());
   FLAGS_env_inject_eio = 1.0;
   s = client_->Finish();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_EQ(TabletCopyClient::State::kStarted, client_->state_);
 
   // Closing out the copy should leave the copy client in its terminal state,
   // even upon failure.
   s = client_->Abort();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_EQ(TabletCopyClient::State::kFinished, client_->state_);
   ASSERT_EQ(tablet::TABLET_DATA_TOMBSTONED, meta_->tablet_data_state());
 }
@@ -307,7 +307,7 @@ TEST_F(TabletCopyClientTest, TestDownloadBlockMayFail) {
   ASSERT_OK(ResetTabletCopyClient());
   ASSERT_OK(StartCopy());
   Status s = client_->DownloadBlocks();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Injected failure on downloading block");
 }
 
@@ -320,7 +320,7 @@ TEST_F(TabletCopyClientTest, TestDownloadWalMayFail) {
   ASSERT_OK(ResetTabletCopyClient());
   ASSERT_OK(StartCopy());
   Status s = client_->DownloadWALs();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
   ASSERT_STR_CONTAINS(s.ToString(), "Injected failure on downloading wal");
 }
 
@@ -442,7 +442,7 @@ TEST_F(TabletCopyClientTest, TestFailedDiskStopsClient) {
 
   // The copy thread should stop and the copy client should return an error.
   copy_thread.join();
-  ASSERT_TRUE(s.IsIOError());
+  ASSERT_TRUE(s.IsIOError()) << s.ToString();
 }
 
 TEST_F(TabletCopyClientTest, TestSupportsLiveRowCount) {
diff --git a/src/kudu/util/net/socket-test.cc b/src/kudu/util/net/socket-test.cc
index 9ff1dad..882a695 100644
--- a/src/kudu/util/net/socket-test.cc
+++ b/src/kudu/util/net/socket-test.cc
@@ -140,7 +140,7 @@ class SocketTest : public KuduTest {
     Status s = client.Recv(buf.get(), kEchoChunkSize, &n);
 
     ASSERT_TRUE(!s.ok());
-    ASSERT_TRUE(s.IsNetworkError());
+    ASSERT_TRUE(s.IsNetworkError()) << s.ToString();
     ASSERT_STR_MATCHES(s.message().ToString(), message);
 
     t.join();
diff --git a/src/kudu/util/oid_generator-test.cc 
b/src/kudu/util/oid_generator-test.cc
index be88061..174b2b8 100644
--- a/src/kudu/util/oid_generator-test.cc
+++ b/src/kudu/util/oid_generator-test.cc
@@ -35,7 +35,7 @@ TEST(ObjectIdGeneratorTest, TestCanoicalizeUuid) {
   Status s = gen.Canonicalize("not_a_uuid", &canonicalized);
   {
     SCOPED_TRACE(s.ToString());
-    ASSERT_TRUE(s.IsInvalidArgument());
+    ASSERT_TRUE(s.IsInvalidArgument()) << s.ToString();
     ASSERT_STR_CONTAINS(s.ToString(), "invalid uuid");
   }
   ASSERT_OK(gen.Canonicalize(
diff --git a/src/kudu/util/threadpool-test.cc b/src/kudu/util/threadpool-test.cc
index 528701c..1505a49 100644
--- a/src/kudu/util/threadpool-test.cc
+++ b/src/kudu/util/threadpool-test.cc
@@ -1095,7 +1095,7 @@ TEST_P(ThreadPoolTestTokenTypes, 
TestTokenSubmissionsAdhereToMaxQueueSize) {
   ASSERT_OK(t->Submit([&latch]() { latch.Wait(); }));
   ASSERT_OK(t->Submit([&latch]() { latch.Wait(); }));
   Status s = t->Submit([&latch]() { latch.Wait(); });
-  ASSERT_TRUE(s.IsServiceUnavailable());
+  ASSERT_TRUE(s.IsServiceUnavailable()) << s.ToString();
 }
 
 TEST_F(ThreadPoolTest, TestTokenConcurrency) {
diff --git a/src/kudu/util/yamlreader-test.cc b/src/kudu/util/yamlreader-test.cc
index 9a302ff..34d38f6 100644
--- a/src/kudu/util/yamlreader-test.cc
+++ b/src/kudu/util/yamlreader-test.cc
@@ -52,7 +52,7 @@ public:
 TEST_F(YamlReaderTest, FileNotExist) {
   YamlReader r("YamlReaderTest.NotExist");
   Status s = r.Init();
-  ASSERT_TRUE(s.IsCorruption());
+  ASSERT_TRUE(s.IsCorruption()) << s.ToString();
   ASSERT_STR_CONTAINS(
       s.ToString(), "YAML::LoadFile error");
 }

Reply via email to