Skip to content

Commit 5abfe1b

Browse files
committed
test: cover 200-changeset propagation and post-directive error in FDv1 fallback tests
1 parent 96a7f5a commit 5abfe1b

2 files changed

Lines changed: 53 additions & 0 deletions

File tree

libs/server-sdk/tests/fdv2_polling_impl_test.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,32 @@ TEST(HandleFDv2PollResponseTest, TerminalErrorPropagatesFlag) {
7171
EXPECT_TRUE(result.fdv1_fallback);
7272
}
7373

74+
TEST(HandleFDv2PollResponseTest, OkWithChangeSetBodyPropagatesFlag) {
75+
auto logger = MakeNullLogger();
76+
FDv2ProtocolHandler handler;
77+
78+
std::string const body =
79+
R"({"events":[)"
80+
R"({"event":"server-intent","data":{"payloads":[)"
81+
R"({"id":"p1","target":1,"intentCode":"xfer-full"}]}},)"
82+
R"({"event":"put-object","data":{"version":1,"kind":"flag",)"
83+
R"("key":"my-flag","object":{"key":"my-flag","on":true,)"
84+
R"("fallthrough":{"variation":0},"variations":[true,false],)"
85+
R"("version":1}}},)"
86+
R"({"event":"payload-transferred","data":{"state":"abc","version":1}})"
87+
R"(]})";
88+
89+
network::HttpResult::HeadersType headers{{"X-LD-FD-Fallback", "true"}};
90+
network::HttpResult res{200, body, std::move(headers)};
91+
92+
auto result = HandleFDv2PollResponse(res, &handler, logger, "test");
93+
94+
auto* change_set = std::get_if<FDv2SourceResult::ChangeSet>(&result.value);
95+
ASSERT_NE(change_set, nullptr);
96+
EXPECT_FALSE(change_set->change_set.data.empty());
97+
EXPECT_TRUE(result.fdv1_fallback);
98+
}
99+
74100
TEST(HandleFDv2PollResponseTest, OkWithMissingBodyPropagatesFlag) {
75101
auto logger = MakeNullLogger();
76102
FDv2ProtocolHandler handler;

libs/server-sdk/tests/fdv2_streaming_synchronizer_test.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,3 +751,30 @@ TEST(FDv2StreamingSynchronizerTest, SecondResponseWithoutDirectiveClearsFlag) {
751751
ASSERT_TRUE(result.has_value());
752752
EXPECT_FALSE(result->fdv1_fallback);
753753
}
754+
755+
TEST(FDv2StreamingSynchronizerTest, ErrorAfterDirectiveCarriesFlag) {
756+
auto logger = MakeNullLogger();
757+
IoContextRunner runner;
758+
759+
FDv2StreamingSynchronizer synchronizer(
760+
runner.context().get_executor(), logger,
761+
MakeEndpoints("http://localhost"), MakeHttpProperties(), std::nullopt,
762+
1s);
763+
FDv2StreamingSynchronizerTestPeer::MarkStarted(synchronizer);
764+
765+
boost::beast::http::response_header<> headers;
766+
headers.result(200);
767+
headers.set("X-LD-FD-Fallback", "true");
768+
FDv2StreamingSynchronizerTestPeer::OnResponse(synchronizer, headers);
769+
770+
FDv2StreamingSynchronizerTestPeer::OnError(
771+
synchronizer,
772+
sse::Error{sse::errors::ReadTimeout{std::chrono::milliseconds(0)}});
773+
774+
auto result = synchronizer.Next(data_model::Selector{}).WaitForResult(2s);
775+
776+
ASSERT_TRUE(result.has_value());
777+
EXPECT_TRUE(
778+
std::holds_alternative<FDv2SourceResult::Interrupted>(result->value));
779+
EXPECT_TRUE(result->fdv1_fallback);
780+
}

0 commit comments

Comments
 (0)