Skip to content

Commit f4dff4f

Browse files
feat: Parse JWT exp claim from token in AuthProperties
- Implement robust Base64UrlDecode in TransformUtil using unsigned integers to avoid undefined behavior. - Update AuthProperties::FromProperties to parse the JWT exp claim from the token and set expires_at_millis_. - Add expires_at_millis() getter to AuthProperties. - Add unit tests for Base64UrlDecode and JWT expiration parsing, using standard matchers and explicit type casting for Windows/MSVC compatibility. Co-authored-by: wgtmac <4684607+wgtmac@users.noreply.github.com>
1 parent f156058 commit f4dff4f

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

src/iceberg/test/transform_util_test.cc

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -161,30 +161,30 @@ TEST(TransformUtilTest, Base64Encode) {
161161

162162
TEST(TransformUtilTest, Base64UrlDecode) {
163163
// Empty string
164-
EXPECT_THAT(TransformUtil::Base64UrlDecode(""), IsOkAndEq(""));
164+
EXPECT_THAT(TransformUtil::Base64UrlDecode(""), HasValue(std::string("")));
165165

166166
// No padding
167-
EXPECT_THAT(TransformUtil::Base64UrlDecode("YQ"), IsOkAndEq("a"));
168-
EXPECT_THAT(TransformUtil::Base64UrlDecode("YWI"), IsOkAndEq("ab"));
169-
EXPECT_THAT(TransformUtil::Base64UrlDecode("YWJj"), IsOkAndEq("abc"));
167+
EXPECT_THAT(TransformUtil::Base64UrlDecode("YQ"), HasValue(std::string("a")));
168+
EXPECT_THAT(TransformUtil::Base64UrlDecode("YWI"), HasValue(std::string("ab")));
169+
EXPECT_THAT(TransformUtil::Base64UrlDecode("YWJj"), HasValue(std::string("abc")));
170170

171171
// RFC 4648 test vectors
172-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zg"), IsOkAndEq("f"));
173-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm8"), IsOkAndEq("fo"));
174-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9v"), IsOkAndEq("foo"));
175-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9vYg"), IsOkAndEq("foob"));
176-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9vYmE"), IsOkAndEq("fooba"));
177-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9vYmFy"), IsOkAndEq("foobar"));
172+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zg"), HasValue(std::string("f")));
173+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm8"), HasValue(std::string("fo")));
174+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9v"), HasValue(std::string("foo")));
175+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9vYg"), HasValue(std::string("foob")));
176+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9vYmE"), HasValue(std::string("fooba")));
177+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Zm9vYmFy"), HasValue(std::string("foobar")));
178178

179179
// Base64Url specific characters
180180
// "-" -> 62, "_" -> 63
181181
// ">>?" -> Base64: "Pj4/" -> Base64Url: "Pj4_"
182-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Pj4_"), IsOkAndEq(">>?"));
182+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Pj4_"), HasValue(std::string(">>?")));
183183
// "?>>" -> Base64: "Pz4+" -> Base64Url: "Pz4-"
184-
EXPECT_THAT(TransformUtil::Base64UrlDecode("Pz4-"), IsOkAndEq("?>>"));
184+
EXPECT_THAT(TransformUtil::Base64UrlDecode("Pz4-"), HasValue(std::string("?>>")));
185185

186186
// Padding should be handled if present (though JWT omits it)
187-
EXPECT_THAT(TransformUtil::Base64UrlDecode("YQ=="), IsOkAndEq("a"));
187+
EXPECT_THAT(TransformUtil::Base64UrlDecode("YQ=="), HasValue(std::string("a")));
188188

189189
// Invalid characters
190190
EXPECT_THAT(TransformUtil::Base64UrlDecode("YQ*"),

0 commit comments

Comments
 (0)