Add need_to_remove policy tests for authorization grant

This commit is contained in:
Eric Eastwood
2026-04-21 17:47:01 -05:00
parent abe4c35194
commit f30bf47e82
2 changed files with 64 additions and 17 deletions
@@ -223,34 +223,81 @@ test_mas_scopes if {
with input.scope as "urn:mas:admin"
}
test_session_limiting if {
authorization_grant.allow with input.user as user
# Helper utility to extract the number of sessions that they `need_to_remove`, returns 0
# if the `too-many-sessions` violation is not found
get_need_to_remove(violations) := need if {
some v in violations
v.code == "too-many-sessions"
need := v.need_to_remove
} else := 0
# Tests session limiting when using OAuth 2.0 authorization grants
# (interactive, therefore `soft_limit` applies)
# =========================================================================
test_session_limiting_under_limit if {
result := {
"allow": authorization_grant.allow,
"need_to_remove": get_need_to_remove(authorization_grant.violation),
} with input.user as user
with input.session_counts as {"total": 1}
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
result.allow
result.need_to_remove == 0
}
authorization_grant.allow with input.user as user
test_session_limiting_under_soft_limit if {
result := {
"allow": authorization_grant.allow,
"need_to_remove": get_need_to_remove(authorization_grant.violation),
} with input.user as user
with input.session_counts as {"total": 31}
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
result.allow
result.need_to_remove == 0
}
not authorization_grant.allow with input.user as user
test_session_limiting_hit_soft_limit if {
result := {
"allow": authorization_grant.allow,
"need_to_remove": get_need_to_remove(authorization_grant.violation),
} with input.user as user
with input.session_counts as {"total": 32}
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
not result.allow
result.need_to_remove == 1
}
not authorization_grant.allow with input.user as user
test_session_limiting_over_soft_limit if {
result := {
"allow": authorization_grant.allow,
"need_to_remove": get_need_to_remove(authorization_grant.violation),
} with input.user as user
with input.session_counts as {"total": 42}
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
not result.allow
result.need_to_remove == 11
}
not authorization_grant.allow with input.user as user
test_session_limiting_over_soft_limit if {
result := {
"allow": authorization_grant.allow,
"need_to_remove": get_need_to_remove(authorization_grant.violation),
} with input.user as user
with input.session_counts as {"total": 65}
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
# No limit configured
authorization_grant.allow with input.user as user
with input.session_counts as {"total": 1}
with data.session_limit as null
# Client credentials grant
authorization_grant.allow with input.user as user
with input.session_counts as null
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
not result.allow
# Only the `soft_limit` applies to the interactive login
result.need_to_remove == 34
}
test_session_limiting_no_limit if {
result := {
"allow": authorization_grant.allow,
"need_to_remove": get_need_to_remove(authorization_grant.violation),
} with input.user as user
with input.session_counts as {"total": 1}
# No limit configured
with data.session_limit as null
result.allow
result.need_to_remove == 0
}
+1 -1
View File
@@ -83,7 +83,7 @@ test_session_limiting_sso_over_hard_limit if {
with input.session_replaced as false
with data.session_limit as {"soft_limit": 32, "hard_limit": 64}
not result.allow
# Only the soft-limit applies to the interactive `m.login.sso` login
# Only the `soft_limit` applies to the interactive `m.login.sso` login
result.need_to_remove == 34
}