Change LoadBalancerEncoder::Create to return unique_ptr.
More convenient in light of changes to who owns instances of LoadBalancerEncoder
PiperOrigin-RevId: 471573005
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.cc b/quiche/quic/load_balancer/load_balancer_encoder.cc
index bb9608b..5b0a613 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder.cc
@@ -47,7 +47,7 @@
constexpr uint8_t kLoadBalancerLengthMask = 0x3f;
constexpr uint8_t kLoadBalancerUnroutableConfigId = 0xc0;
-absl::optional<LoadBalancerEncoder> LoadBalancerEncoder::Create(
+std::unique_ptr<LoadBalancerEncoder> LoadBalancerEncoder::Create(
QuicRandom &random, LoadBalancerEncoderVisitorInterface *const visitor,
const bool len_self_encoded, const uint8_t unroutable_connection_id_len) {
if (unroutable_connection_id_len == 0 ||
@@ -56,10 +56,10 @@
QUIC_BUG(quic_bug_435375038_01)
<< "Invalid unroutable_connection_id_len = "
<< static_cast<int>(unroutable_connection_id_len);
- return absl::optional<LoadBalancerEncoder>();
+ return nullptr;
}
- return LoadBalancerEncoder(random, visitor, len_self_encoded,
- unroutable_connection_id_len);
+ return absl::WrapUnique(new LoadBalancerEncoder(
+ random, visitor, len_self_encoded, unroutable_connection_id_len));
}
bool LoadBalancerEncoder::UpdateConfig(const LoadBalancerConfig &config,
diff --git a/quiche/quic/load_balancer/load_balancer_encoder.h b/quiche/quic/load_balancer/load_balancer_encoder.h
index b48bb19..1405d62 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder.h
+++ b/quiche/quic/load_balancer/load_balancer_encoder.h
@@ -60,7 +60,7 @@
// random. |unroutable_connection_id_length| specifies the length of
// connection IDs to be generated when there is no active config. It must not
// be 0 and must not be larger than the RFC9000 maximum of 20.
- static absl::optional<LoadBalancerEncoder> Create(
+ static std::unique_ptr<LoadBalancerEncoder> Create(
QuicRandom& random, LoadBalancerEncoderVisitorInterface* const visitor,
const bool len_self_encoded,
const uint8_t unroutable_connection_id_len = kLoadBalancerUnroutableLen);
diff --git a/quiche/quic/load_balancer/load_balancer_encoder_test.cc b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
index f1df860..0ea7aa0 100644
--- a/quiche/quic/load_balancer/load_balancer_encoder_test.cc
+++ b/quiche/quic/load_balancer/load_balancer_encoder_test.cc
@@ -119,18 +119,18 @@
TEST_F(LoadBalancerEncoderTest, BadUnroutableLength) {
EXPECT_QUIC_BUG(
- EXPECT_FALSE(
- LoadBalancerEncoder::Create(random_, nullptr, false, 0).has_value()),
+ EXPECT_EQ(LoadBalancerEncoder::Create(random_, nullptr, false, 0),
+ nullptr),
"Invalid unroutable_connection_id_len = 0");
EXPECT_QUIC_BUG(
- EXPECT_FALSE(
- LoadBalancerEncoder::Create(random_, nullptr, false, 21).has_value()),
+ EXPECT_EQ(LoadBalancerEncoder::Create(random_, nullptr, false, 21),
+ nullptr),
"Invalid unroutable_connection_id_len = 21");
}
TEST_F(LoadBalancerEncoderTest, BadServerIdLength) {
auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
// Expects a 3 byte server ID and got 4.
auto config = LoadBalancerConfig::CreateUnencrypted(1, 3, 4);
EXPECT_TRUE(config.has_value());
@@ -143,8 +143,7 @@
TEST_F(LoadBalancerEncoderTest, FailToUpdateConfigWithSameId) {
TestLoadBalancerEncoderVisitor visitor;
auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true);
- EXPECT_TRUE(encoder.has_value());
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
auto config = LoadBalancerConfig::CreateUnencrypted(1, 3, 4);
EXPECT_TRUE(config.has_value());
EXPECT_TRUE(encoder->UpdateConfig(*config, MakeServerId(kServerId, 3)));
@@ -199,7 +198,7 @@
};
random_.AddNextValues(0, 0x75c2699c);
auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 8);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
auto config = LoadBalancerConfig::Create(config_id, server_id_len, nonce_len,
absl::string_view(raw_key));
EXPECT_TRUE(config.has_value());
@@ -248,7 +247,7 @@
};
for (const auto &test : test_vectors) {
auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 8);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
random_.AddNextValues(kNonceHigh, kNonceLow);
EXPECT_TRUE(encoder->UpdateConfig(test.config, test.server_id));
EXPECT_EQ(encoder->GenerateConnectionId(), test.connection_id);
@@ -259,7 +258,7 @@
const uint8_t server_id_len = 3;
TestLoadBalancerEncoderVisitor visitor;
auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true, 8);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
auto config = LoadBalancerConfig::Create(0, server_id_len, 4, kKey);
EXPECT_TRUE(config.has_value());
EXPECT_TRUE(
@@ -279,7 +278,7 @@
TEST_F(LoadBalancerEncoderTest, UnroutableConnectionId) {
random_.AddNextValues(0x83, kNonceHigh);
auto encoder = LoadBalancerEncoder::Create(random_, nullptr, false);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
EXPECT_EQ(encoder->num_nonces_left(), 0);
auto connection_id = encoder->GenerateConnectionId();
// The first byte is the config_id (0xc0) xored with (0x83 & 0x3f).
@@ -290,7 +289,7 @@
TEST_F(LoadBalancerEncoderTest, NonDefaultUnroutableConnectionIdLength) {
auto encoder = LoadBalancerEncoder::Create(random_, nullptr, true, 9);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
QuicConnectionId connection_id = encoder->GenerateConnectionId();
EXPECT_EQ(connection_id.length(), 9);
}
@@ -298,7 +297,7 @@
TEST_F(LoadBalancerEncoderTest, DeleteConfigWhenNoConfigExists) {
TestLoadBalancerEncoderVisitor visitor;
auto encoder = LoadBalancerEncoder::Create(random_, &visitor, true);
- EXPECT_TRUE(encoder.has_value());
+ EXPECT_NE(encoder, nullptr);
encoder->DeleteConfig();
EXPECT_EQ(visitor.num_deletes(), 0u);
}