pw_transfer: Fix disabled tests

- Fix tests tests were allocating the transfer handler in a lambda
  function that went out of scope.
- Move the test method context to the fixture to reduce duplication.

Change-Id: If58df6d0bf6b5c0e65f50969104120ef256977db
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/83586
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Keir Mierle <keir@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
diff --git a/pw_transfer/transfer_thread_test.cc b/pw_transfer/transfer_thread_test.cc
index 6f6deee..fa7b5e1 100644
--- a/pw_transfer/transfer_thread_test.cc
+++ b/pw_transfer/transfer_thread_test.cc
@@ -41,9 +41,10 @@
 class TransferThreadTest : public ::testing::Test {
  public:
   TransferThreadTest()
-      : transfer_thread_(chunk_buffer_, encode_buffer_),
-        system_thread_(TransferThreadOptions(), transfer_thread_),
-        max_parameters_(chunk_buffer_.size(), chunk_buffer_.size()) {}
+      : ctx_(transfer_thread_, 512),
+        max_parameters_(chunk_buffer_.size(), chunk_buffer_.size()),
+        transfer_thread_(chunk_buffer_, encode_buffer_),
+        system_thread_(TransferThreadOptions(), transfer_thread_) {}
 
   ~TransferThreadTest() {
     transfer_thread_.Terminate();
@@ -51,13 +52,17 @@
   }
 
  protected:
-  transfer::Thread<1, 1> transfer_thread_;
-  thread::Thread system_thread_;
+  PW_RAW_TEST_METHOD_CONTEXT(TransferService, Read) ctx_;
+
   std::array<std::byte, 64> chunk_buffer_;
   std::array<std::byte, 64> encode_buffer_;
-  internal::TransferParameters max_parameters_;
 
   rpc::RawClientTestContext<> rpc_client_context_;
+  internal::TransferParameters max_parameters_;
+
+  transfer::Thread<1, 1> transfer_thread_;
+
+  thread::Thread system_thread_;
 };
 
 class SimpleReadTransfer final : public ReadOnlyHandler {
@@ -92,9 +97,7 @@
 constexpr auto kData = bytes::Initialized<32>([](size_t i) { return i; });
 
 TEST_F(TransferThreadTest, AddTransferHandler) {
-  PW_RAW_TEST_METHOD_CONTEXT(TransferService, Read) ctx(transfer_thread_, 512);
-
-  auto reader_writer = ctx.reader_writer();
+  auto reader_writer = ctx_.reader_writer();
   transfer_thread_.SetServerReadStream(reader_writer);
 
   SimpleReadTransfer handler(3, kData);
@@ -113,9 +116,7 @@
 }
 
 TEST_F(TransferThreadTest, RemoveTransferHandler) {
-  PW_RAW_TEST_METHOD_CONTEXT(TransferService, Read) ctx(transfer_thread_, 512);
-
-  auto reader_writer = ctx.reader_writer();
+  auto reader_writer = ctx_.reader_writer();
   transfer_thread_.SetServerReadStream(reader_writer);
 
   SimpleReadTransfer handler(3, kData);
@@ -133,32 +134,28 @@
 
   EXPECT_FALSE(handler.prepare_read_called);
 
-  ASSERT_EQ(ctx.total_responses(), 1u);
-  auto chunk = DecodeChunk(ctx.response());
+  ASSERT_EQ(ctx_.total_responses(), 1u);
+  auto chunk = DecodeChunk(ctx_.response());
   EXPECT_EQ(chunk.transfer_id, 3u);
   ASSERT_TRUE(chunk.status.has_value());
   EXPECT_EQ(chunk.status.value(), Status::NotFound());
 }
 
-// TODO(hepler): Re-enable once ASAN issue is fixed.
-TEST_F(TransferThreadTest, DISABLED_ProcessChunk_SendsWindow) {
-  PW_RAW_TEST_METHOD_CONTEXT(TransferService, Read) ctx(transfer_thread_, 512);
+TEST_F(TransferThreadTest, ProcessChunk_SendsWindow) {
+  auto reader_writer = ctx_.reader_writer();
+  transfer_thread_.SetServerReadStream(reader_writer);
 
-  auto reader_writer = ctx.reader_writer();
+  SimpleReadTransfer handler(3, kData);
+  transfer_thread_.AddTransferHandler(handler);
 
-  rpc::test::WaitForPackets(ctx.output(), 2, [&] {
-    transfer_thread_.SetServerReadStream(reader_writer);
+  transfer_thread_.StartServerTransfer(internal::TransferType::kTransmit,
+                                       3,
+                                       3,
+                                       max_parameters_,
+                                       std::chrono::seconds(2),
+                                       0);
 
-    SimpleReadTransfer handler(3, kData);
-    transfer_thread_.AddTransferHandler(handler);
-
-    transfer_thread_.StartServerTransfer(internal::TransferType::kTransmit,
-                                         3,
-                                         3,
-                                         max_parameters_,
-                                         std::chrono::seconds(2),
-                                         0);
-
+  rpc::test::WaitForPackets(ctx_.output(), 2, [this] {
     // Malformed transfer parameters chunk without a pending_bytes field.
     transfer_thread_.ProcessServerChunk(
         EncodeChunk({.transfer_id = 3,
@@ -169,14 +166,14 @@
                      .type = Chunk::Type::kParametersRetransmit}));
   });
 
-  ASSERT_EQ(ctx.total_responses(), 2u);
-  auto chunk = DecodeChunk(ctx.responses()[0]);
+  ASSERT_EQ(ctx_.total_responses(), 2u);
+  auto chunk = DecodeChunk(ctx_.responses()[0]);
   EXPECT_EQ(chunk.transfer_id, 3u);
   EXPECT_EQ(chunk.offset, 0u);
   EXPECT_EQ(chunk.data.size(), 8u);
   EXPECT_EQ(std::memcmp(chunk.data.data(), kData.data(), chunk.data.size()), 0);
 
-  chunk = DecodeChunk(ctx.responses()[1]);
+  chunk = DecodeChunk(ctx_.responses()[1]);
   EXPECT_EQ(chunk.transfer_id, 3u);
   EXPECT_EQ(chunk.offset, 8u);
   EXPECT_EQ(chunk.data.size(), 8u);
@@ -184,17 +181,14 @@
             0);
 }
 
-// TODO(hepler): Re-enable once ASAN issue is fixed.
-TEST_F(TransferThreadTest, DISABLED_ProcessChunk_Malformed) {
-  PW_RAW_TEST_METHOD_CONTEXT(TransferService, Read) ctx(transfer_thread_, 512);
+TEST_F(TransferThreadTest, ProcessChunk_Malformed) {
+  auto reader_writer = ctx_.reader_writer();
+  transfer_thread_.SetServerReadStream(reader_writer);
 
-  auto reader_writer = ctx.reader_writer();
-  rpc::test::WaitForPackets(ctx.output(), 1, [&] {
-    transfer_thread_.SetServerReadStream(reader_writer);
+  SimpleReadTransfer handler(3, kData);
+  transfer_thread_.AddTransferHandler(handler);
 
-    SimpleReadTransfer handler(3, kData);
-    transfer_thread_.AddTransferHandler(handler);
-
+  rpc::test::WaitForPackets(ctx_.output(), 1, [this] {
     transfer_thread_.StartServerTransfer(internal::TransferType::kTransmit,
                                          3,
                                          3,
@@ -205,8 +199,9 @@
     // Malformed transfer parameters chunk without a pending_bytes field.
     transfer_thread_.ProcessServerChunk(EncodeChunk({.transfer_id = 3}));
   });
-  ASSERT_EQ(ctx.total_responses(), 1u);
-  auto chunk = DecodeChunk(ctx.response());
+
+  ASSERT_EQ(ctx_.total_responses(), 1u);
+  auto chunk = DecodeChunk(ctx_.response());
   EXPECT_EQ(chunk.transfer_id, 3u);
   ASSERT_TRUE(chunk.status.has_value());
   EXPECT_EQ(chunk.status.value(), Status::InvalidArgument());