dcsctp: Adding testing macros

This is the first and last macro that will go into this project,
but it's really useful to verify that a call returns an optional
value (that is non-nullopt) and that extracts the underlying type.

Bug: webrtc:12614
Change-Id: I0a05bf22466a575dbcc9a8f7b88dde0f55ff54d9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/213345
Commit-Queue: Victor Boivie <boivie@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33607}
diff --git a/net/dcsctp/testing/BUILD.gn b/net/dcsctp/testing/BUILD.gn
new file mode 100644
index 0000000..a18f238
--- /dev/null
+++ b/net/dcsctp/testing/BUILD.gn
@@ -0,0 +1,14 @@
+# Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
+#
+# Use of this source code is governed by a BSD-style license
+# that can be found in the LICENSE file in the root of the source
+# tree. An additional intellectual property rights grant can be found
+# in the file PATENTS.  All contributing project authors may
+# be found in the AUTHORS file in the root of the source tree.
+
+import("../../../webrtc.gni")
+
+rtc_source_set("testing_macros") {
+  testonly = true
+  sources = [ "testing_macros.h" ]
+}
diff --git a/net/dcsctp/testing/testing_macros.h b/net/dcsctp/testing/testing_macros.h
new file mode 100644
index 0000000..5cbdfff
--- /dev/null
+++ b/net/dcsctp/testing/testing_macros.h
@@ -0,0 +1,29 @@
+/*
+ *  Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+#ifndef NET_DCSCTP_TESTING_TESTING_MACROS_H_
+#define NET_DCSCTP_TESTING_TESTING_MACROS_H_
+
+#include <utility>
+
+namespace dcsctp {
+
+#define DCSCTP_CONCAT_INNER_(x, y) x##y
+#define DCSCTP_CONCAT_(x, y) DCSCTP_CONCAT_INNER_(x, y)
+
+// Similar to ASSERT_OK_AND_ASSIGN, this works with an absl::optional<> instead
+// of an absl::StatusOr<>.
+#define ASSERT_HAS_VALUE_AND_ASSIGN(lhs, rexpr)                     \
+  auto DCSCTP_CONCAT_(tmp_opt_val__, __LINE__) = rexpr;             \
+  ASSERT_TRUE(DCSCTP_CONCAT_(tmp_opt_val__, __LINE__).has_value()); \
+  lhs = *std::move(DCSCTP_CONCAT_(tmp_opt_val__, __LINE__));
+
+}  // namespace dcsctp
+
+#endif  // NET_DCSCTP_TESTING_TESTING_MACROS_H_