Skip to content

Commit c1e9331

Browse files
committed
set multiple request metadata items in a single transaction
1 parent 953757c commit c1e9331

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

psicash.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,9 +161,17 @@ void PsiCash::SetHTTPRequestFn(MakeHTTPRequestFn make_http_request_fn) {
161161
make_http_request_fn_ = std::move(make_http_request_fn);
162162
}
163163

164-
Error PsiCash::SetRequestMetadataItem(const string& key, const string& value) {
164+
Error PsiCash::SetRequestMetadataItems(const std::map<std::string, std::string>& items) {
165165
MUST_BE_INITIALIZED;
166-
return PassError(user_data_->SetRequestMetadataItem(key, value));
166+
UserData::Transaction transaction(*user_data_);
167+
for (const auto& it : items) {
168+
// Errors won't manifest until we commit
169+
(void)user_data_->SetRequestMetadataItem(it.first, it.second);
170+
}
171+
if (auto err = transaction.Commit()) {
172+
return WrapError(err, "user data write failed");
173+
}
174+
return nullerr;
167175
}
168176

169177
Error PsiCash::SetLocale(const string& locale) {

psicash.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class PsiCash {
194194

195195
/// Set values that will be included in the request metadata. This includes
196196
/// client_version, client_region, sponsor_id, and propagation_channel_id.
197-
error::Error SetRequestMetadataItem(const std::string& key, const std::string& value);
197+
error::Error SetRequestMetadataItems(const std::map<std::string, std::string>& items);
198198

199199
/// Set current UI locale.
200200
error::Error SetLocale(const std::string& locale);

psicash_test.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,19 +279,27 @@ TEST_F(TestPsiCash, SetHTTPRequestFn) {
279279
}
280280
}
281281

282-
TEST_F(TestPsiCash, SetRequestMetadataItem) {
282+
TEST_F(TestPsiCash, SetRequestMetadataItems) {
283283
PsiCashTester pc;
284284
auto err = pc.Init(TestPsiCash::UserAgent(), GetTempDir().c_str(), nullptr, false);
285285
ASSERT_FALSE(err);
286286

287287
auto j = pc.user_data().GetRequestMetadata();
288288
ASSERT_EQ(j.size(), 0);
289289

290-
err = pc.SetRequestMetadataItem("k", "v");
290+
err = pc.SetRequestMetadataItems({{"k", "v"}});
291291
ASSERT_FALSE(err);
292292

293293
j = pc.user_data().GetRequestMetadata();
294294
ASSERT_EQ(j["k"], "v");
295+
296+
err = pc.SetRequestMetadataItems({{"a", "b"}, {"x", "y"}});
297+
ASSERT_FALSE(err);
298+
299+
j = pc.user_data().GetRequestMetadata();
300+
ASSERT_EQ(j["k"], "v");
301+
ASSERT_EQ(j["a"], "b");
302+
ASSERT_EQ(j["x"], "y");
295303
}
296304

297305
TEST_F(TestPsiCash, SetLocale) {
@@ -934,15 +942,15 @@ TEST_F(TestPsiCash, ModifyLandingPage) {
934942
// With metadata
935943
//
936944

937-
err = pc.SetRequestMetadataItem("k", "v");
945+
err = pc.SetRequestMetadataItems({{"k", "v"}, {"x", "y"}});
938946
ASSERT_FALSE(err);
939947
url_in = {"https://asdf.sadf.gf", "", ""};
940948
res = pc.ModifyLandingPage(url_in.ToString());
941949
ASSERT_TRUE(res);
942950
url_out.Parse(*res);
943951
ASSERT_EQ(url_out.scheme_host_path_, url_in.scheme_host_path_);
944952
ASSERT_EQ(url_out.fragment_, url_in.fragment_);
945-
ASSERT_THAT(TokenPayloadsMatch(url_out.query_.substr(key_part.length()), R"({"metadata":{"k":"v"},"tokens":"kEarnerTokenType"})"_json), IsEmpty());
953+
ASSERT_THAT(TokenPayloadsMatch(url_out.query_.substr(key_part.length()), R"({"metadata":{"k":"v","x":"y"},"tokens":"kEarnerTokenType"})"_json), IsEmpty());
946954

947955
//
948956
// Errors
@@ -1077,7 +1085,7 @@ TEST_F(TestPsiCash, GetRewardedActivityData) {
10771085
ASSERT_TRUE(res);
10781086
ASSERT_EQ(*res, base64::B64Encode(utils::Stringer(R"({"metadata":{"user_agent":")", TestPsiCash::UserAgent(), R"(","v":1},"tokens":"kEarnerTokenType","v":1})")));
10791087

1080-
err = pc.SetRequestMetadataItem("k", "v");
1088+
err = pc.SetRequestMetadataItems({{"k", "v"}});
10811089
ASSERT_FALSE(err);
10821090
res = pc.GetRewardedActivityData();
10831091
ASSERT_TRUE(res);

0 commit comments

Comments
 (0)