From 7fc06ece34504b28f4e96bdabed762d3c2d36cf5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 16:53:12 +0000 Subject: [PATCH 1/3] Initial plan From 23507d2862e3197f1fb6ea819387131fc48333cc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 7 Mar 2026 16:57:51 +0000 Subject: [PATCH 2/3] Add SCITOKENS_SKIP_ONLINE_TESTS env var to skip network-dependent tests When the SCITOKENS_SKIP_ONLINE_TESTS environment variable is set, all tests that require network connectivity are skipped using GTEST_SKIP(). This allows packagers and CI systems running in offline/network-sandboxed environments to run the test suite without failures. Skipped tests: - KeycacheTest.RefreshTest - KeycacheTest.RefreshInvalid - KeycacheTest.RefreshExpiredTest - KeycacheTest.NegativeCacheTest - KeycacheTest.LoadJwksMissingTest - KeycacheTest.LoadJwksTriggersRefreshWhenStale Co-authored-by: djw8605 <79268+djw8605@users.noreply.github.com> --- test/main.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/test/main.cpp b/test/main.cpp index af2bbb5..5212976 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -679,6 +679,10 @@ class KeycacheTest : public ::testing::Test { }; TEST_F(KeycacheTest, RefreshTest) { + if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { + GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " + "set)"; + } char *err_msg = nullptr; auto rv = keycache_refresh_jwks(demo_scitokens_url.c_str(), &err_msg); ASSERT_TRUE(rv == 0) << err_msg; @@ -695,6 +699,10 @@ TEST_F(KeycacheTest, RefreshTest) { } TEST_F(KeycacheTest, RefreshInvalid) { + if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { + GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " + "set)"; + } char *err_msg = nullptr, *jwks; auto rv = keycache_refresh_jwks("https://demo.scitokens.org/invalid", &err_msg); @@ -888,6 +896,10 @@ TEST_F(KeycacheTest, SetInvalidExpirationTest) { } TEST_F(KeycacheTest, RefreshExpiredTest) { + if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { + GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " + "set)"; + } char *err_msg = nullptr, *jwks; int new_expiration_interval = 0; std::string key = "keycache.expiration_interval_s"; @@ -910,6 +922,10 @@ TEST_F(KeycacheTest, RefreshExpiredTest) { } TEST_F(KeycacheTest, NegativeCacheTest) { + if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { + GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " + "set)"; + } // This test verifies that failed issuer lookups are cached as negative // entries and that subsequent attempts fail quickly with the right counter char *err_msg = nullptr; @@ -1058,6 +1074,10 @@ TEST_F(KeycacheTest, LoadJwksTest) { } TEST_F(KeycacheTest, LoadJwksMissingTest) { + if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { + GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " + "set)"; + } // Test load API with missing issuer - should attempt refresh char *err_msg = nullptr; char *jwks = nullptr; @@ -1071,6 +1091,10 @@ TEST_F(KeycacheTest, LoadJwksMissingTest) { } TEST_F(KeycacheTest, LoadJwksTriggersRefreshWhenStale) { + if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { + GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " + "set)"; + } // Force next_update in the past so load_jwks triggers a refresh char *err_msg = nullptr; From b6d22a04a28f589e2f0f9c437d07e557d6c8f5ac Mon Sep 17 00:00:00 2001 From: Derek Weitzel Date: Fri, 13 Mar 2026 15:40:07 -0500 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- test/main.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/main.cpp b/test/main.cpp index 5212976..af7424d 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -681,7 +681,7 @@ class KeycacheTest : public ::testing::Test { TEST_F(KeycacheTest, RefreshTest) { if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " - "set)"; + "set)"; } char *err_msg = nullptr; auto rv = keycache_refresh_jwks(demo_scitokens_url.c_str(), &err_msg); @@ -701,7 +701,7 @@ TEST_F(KeycacheTest, RefreshTest) { TEST_F(KeycacheTest, RefreshInvalid) { if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " - "set)"; + "set)"; } char *err_msg = nullptr, *jwks; auto rv = @@ -898,7 +898,7 @@ TEST_F(KeycacheTest, SetInvalidExpirationTest) { TEST_F(KeycacheTest, RefreshExpiredTest) { if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " - "set)"; + "set)"; } char *err_msg = nullptr, *jwks; int new_expiration_interval = 0; @@ -924,7 +924,7 @@ TEST_F(KeycacheTest, RefreshExpiredTest) { TEST_F(KeycacheTest, NegativeCacheTest) { if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " - "set)"; + "set)"; } // This test verifies that failed issuer lookups are cached as negative // entries and that subsequent attempts fail quickly with the right counter @@ -1076,7 +1076,7 @@ TEST_F(KeycacheTest, LoadJwksTest) { TEST_F(KeycacheTest, LoadJwksMissingTest) { if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " - "set)"; + "set)"; } // Test load API with missing issuer - should attempt refresh char *err_msg = nullptr; @@ -1093,7 +1093,7 @@ TEST_F(KeycacheTest, LoadJwksMissingTest) { TEST_F(KeycacheTest, LoadJwksTriggersRefreshWhenStale) { if (std::getenv("SCITOKENS_SKIP_ONLINE_TESTS")) { GTEST_SKIP() << "Skipping online test (SCITOKENS_SKIP_ONLINE_TESTS is " - "set)"; + "set)"; } // Force next_update in the past so load_jwks triggers a refresh char *err_msg = nullptr;