@@ -295,6 +295,58 @@ TEST_F(SerializeTest, EnforcerTest) {
295295 ASSERT_STREQ (err_msg, " token verification failed: 'scope' claim verification failed." );
296296 ASSERT_TRUE (rv == -1 ) << err_msg;
297297
298+ }
299+
300+ TEST_F (SerializeTest, EnforcerScopeTest) {
301+ char *err_msg = nullptr ;
302+
303+ auto rv = scitoken_set_claim_string (m_token.get (), " aud" ,
304+ " https://demo.scitokens.org/" , &err_msg);
305+ ASSERT_TRUE (rv == 0 );
306+
307+ std::vector<const char *> audiences_array;
308+ audiences_array.push_back (" https://demo.scitokens.org/" );
309+ audiences_array.push_back (nullptr );
310+
311+ auto enforcer = enforcer_create (" https://demo.scitokens.org/gtest" , &audiences_array[0 ], &err_msg);
312+ ASSERT_TRUE (enforcer != nullptr );
313+
314+ scitoken_set_serialize_profile (m_token.get (), SciTokenProfile::WLCG_1_0);
315+
316+ rv = scitoken_set_claim_string (m_token.get (), " scope" ,
317+ " storage.modify:/ storage.read:/ openid offline_access" , &err_msg);
318+ ASSERT_TRUE (rv == 0 );
319+
320+ char *token_value = nullptr ;
321+ rv = scitoken_serialize (m_token.get (), &token_value, &err_msg);
322+ ASSERT_TRUE (rv == 0 );
323+
324+ rv = scitoken_deserialize_v2 (token_value, m_read_token.get (), nullptr , &err_msg);
325+ ASSERT_TRUE (rv == 0 );
326+
327+ Acl *acls;
328+ enforcer_generate_acls (enforcer, m_read_token.get (), &acls, &err_msg);
329+ ASSERT_TRUE (acls != nullptr );
330+ int idx = 0 ;
331+ bool found_read = false ;
332+ bool found_write = false ;
333+ while (acls[idx].resource && acls[idx++].authz ) {
334+ auto resource = acls[idx-1 ].resource ;
335+ auto authz = acls[idx-1 ].authz ;
336+ if (strcmp (authz, " read" ) == 0 ) {
337+ found_read = true ;
338+ ASSERT_STREQ (resource, " /" );
339+ } else if (strcmp (authz, " write" ) == 0 ) {
340+ found_write = true ;
341+ ASSERT_STREQ (resource, " /" );
342+ }
343+ }
344+ ASSERT_TRUE (found_read);
345+ ASSERT_TRUE (found_write);
346+
347+
348+
349+
298350}
299351
300352}
0 commit comments