summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/net/dcsctp/testing
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /third_party/libwebrtc/net/dcsctp/testing
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/net/dcsctp/testing')
-rw-r--r--third_party/libwebrtc/net/dcsctp/testing/BUILD.gn33
-rw-r--r--third_party/libwebrtc/net/dcsctp/testing/data_generator.cc65
-rw-r--r--third_party/libwebrtc/net/dcsctp/testing/data_generator.h58
-rw-r--r--third_party/libwebrtc/net/dcsctp/testing/testing_macros.h29
4 files changed, 185 insertions, 0 deletions
diff --git a/third_party/libwebrtc/net/dcsctp/testing/BUILD.gn b/third_party/libwebrtc/net/dcsctp/testing/BUILD.gn
new file mode 100644
index 0000000000..7e005a1f0c
--- /dev/null
+++ b/third_party/libwebrtc/net/dcsctp/testing/BUILD.gn
@@ -0,0 +1,33 @@
+# 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" ]
+}
+
+rtc_library("data_generator") {
+ testonly = true
+ deps = [
+ "../../../api:array_view",
+ "../../../rtc_base:checks",
+ "../common:internal_types",
+ "../packet:data",
+ "../public:types",
+ ]
+ sources = [
+ "data_generator.cc",
+ "data_generator.h",
+ ]
+ absl_deps = [
+ "//third_party/abseil-cpp/absl/strings",
+ "//third_party/abseil-cpp/absl/types:optional",
+ ]
+}
diff --git a/third_party/libwebrtc/net/dcsctp/testing/data_generator.cc b/third_party/libwebrtc/net/dcsctp/testing/data_generator.cc
new file mode 100644
index 0000000000..417695c9d0
--- /dev/null
+++ b/third_party/libwebrtc/net/dcsctp/testing/data_generator.cc
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ */
+#include "net/dcsctp/testing/data_generator.h"
+
+#include <cstdint>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/strings/string_view.h"
+#include "net/dcsctp/packet/data.h"
+#include "net/dcsctp/public/types.h"
+
+namespace dcsctp {
+constexpr PPID kPpid = PPID(53);
+
+Data DataGenerator::Ordered(std::vector<uint8_t> payload,
+ absl::string_view flags,
+ const DataGeneratorOptions opts) {
+ Data::IsBeginning is_beginning(flags.find('B') != std::string::npos);
+ Data::IsEnd is_end(flags.find('E') != std::string::npos);
+
+ if (is_beginning) {
+ fsn_ = FSN(0);
+ } else {
+ fsn_ = FSN(*fsn_ + 1);
+ }
+ MID mid = opts.mid.value_or(mid_);
+ Data ret = Data(opts.stream_id, SSN(static_cast<uint16_t>(*mid)), mid, fsn_,
+ opts.ppid, std::move(payload), is_beginning, is_end,
+ IsUnordered(false));
+
+ if (is_end) {
+ mid_ = MID(*mid + 1);
+ }
+ return ret;
+}
+
+Data DataGenerator::Unordered(std::vector<uint8_t> payload,
+ absl::string_view flags,
+ const DataGeneratorOptions opts) {
+ Data::IsBeginning is_beginning(flags.find('B') != std::string::npos);
+ Data::IsEnd is_end(flags.find('E') != std::string::npos);
+
+ if (is_beginning) {
+ fsn_ = FSN(0);
+ } else {
+ fsn_ = FSN(*fsn_ + 1);
+ }
+ MID mid = opts.mid.value_or(mid_);
+ Data ret = Data(opts.stream_id, SSN(0), mid, fsn_, kPpid, std::move(payload),
+ is_beginning, is_end, IsUnordered(true));
+ if (is_end) {
+ mid_ = MID(*mid + 1);
+ }
+ return ret;
+}
+} // namespace dcsctp
diff --git a/third_party/libwebrtc/net/dcsctp/testing/data_generator.h b/third_party/libwebrtc/net/dcsctp/testing/data_generator.h
new file mode 100644
index 0000000000..52f98dd1cb
--- /dev/null
+++ b/third_party/libwebrtc/net/dcsctp/testing/data_generator.h
@@ -0,0 +1,58 @@
+/*
+ * 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_DATA_GENERATOR_H_
+#define NET_DCSCTP_TESTING_DATA_GENERATOR_H_
+
+#include <cstdint>
+#include <vector>
+
+#include "absl/strings/string_view.h"
+#include "absl/types/optional.h"
+#include "api/array_view.h"
+#include "net/dcsctp/common/internal_types.h"
+#include "net/dcsctp/packet/data.h"
+
+namespace dcsctp {
+
+struct DataGeneratorOptions {
+ StreamID stream_id = StreamID(1);
+ absl::optional<MID> mid = absl::nullopt;
+ PPID ppid = PPID(53);
+};
+
+// Generates Data with correct sequence numbers, and used only in unit tests.
+class DataGenerator {
+ public:
+ explicit DataGenerator(MID start_mid = MID(0)) : mid_(start_mid) {}
+
+ // Generates ordered "data" with the provided `payload` and flags, which can
+ // contain "B" for setting the "is_beginning" flag, and/or "E" for setting the
+ // "is_end" flag.
+ Data Ordered(std::vector<uint8_t> payload,
+ absl::string_view flags = "",
+ DataGeneratorOptions opts = {});
+
+ // Generates unordered "data" with the provided `payload` and flags, which can
+ // contain "B" for setting the "is_beginning" flag, and/or "E" for setting the
+ // "is_end" flag.
+ Data Unordered(std::vector<uint8_t> payload,
+ absl::string_view flags = "",
+ DataGeneratorOptions opts = {});
+
+ // Resets the Message ID identifier - simulating a "stream reset".
+ void ResetStream() { mid_ = MID(0); }
+
+ private:
+ MID mid_;
+ FSN fsn_ = FSN(0);
+};
+} // namespace dcsctp
+
+#endif // NET_DCSCTP_TESTING_DATA_GENERATOR_H_
diff --git a/third_party/libwebrtc/net/dcsctp/testing/testing_macros.h b/third_party/libwebrtc/net/dcsctp/testing/testing_macros.h
new file mode 100644
index 0000000000..5cbdfffdce
--- /dev/null
+++ b/third_party/libwebrtc/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_