diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-15 16:37:08 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-17 16:30:22 -0600 |
| commit | 45df4d0d9b577fecee798d672695fe24ff57fb1b (patch) | |
| tree | 1b99bf645035b58e0d6db08c7a83521f41f7a75b /vendor/matchit/tests/remove.rs | |
| parent | f94f79608393d4ab127db63cc41668445ef6b243 (diff) | |
feat: migrate from Cedar to SpiceDB authorization system
This is a major architectural change that replaces the Cedar policy-based
authorization system with SpiceDB's relation-based authorization.
Key changes:
- Migrate from Rust to Go implementation
- Replace Cedar policies with SpiceDB schema and relationships
- Switch from envoy `ext_authz` with Cedar to SpiceDB permission checks
- Update build system and dependencies for Go ecosystem
- Maintain Envoy integration for external authorization
This change enables more flexible permission modeling through SpiceDB's
Google Zanzibar inspired relation-based system, supporting complex
hierarchical permissions that were difficult to express in Cedar.
Breaking change: Existing Cedar policies and Rust-based configuration
will no longer work and need to be migrated to SpiceDB schema.
Diffstat (limited to 'vendor/matchit/tests/remove.rs')
| -rw-r--r-- | vendor/matchit/tests/remove.rs | 265 |
1 files changed, 0 insertions, 265 deletions
diff --git a/vendor/matchit/tests/remove.rs b/vendor/matchit/tests/remove.rs deleted file mode 100644 index 3237ccde..00000000 --- a/vendor/matchit/tests/remove.rs +++ /dev/null @@ -1,265 +0,0 @@ -use matchit::Router; - -struct RemoveTest { - routes: Vec<&'static str>, - ops: Vec<(Operation, &'static str, Option<&'static str>)>, - remaining: Vec<&'static str>, -} - -enum Operation { - Insert, - Remove, -} - -use Operation::*; - -impl RemoveTest { - fn run(self) { - let mut router = Router::new(); - - for route in self.routes.iter() { - assert_eq!(router.insert(*route, route.to_owned()), Ok(()), "{route}"); - } - - for (op, route, expected) in self.ops.iter() { - match op { - Insert => { - assert_eq!(router.insert(*route, route), Ok(()), "{route}") - } - Remove => { - assert_eq!(router.remove(*route), *expected, "removing {route}",) - } - } - } - - for route in self.remaining { - assert!(matches!(router.at(route), Ok(_)), "remaining {route}"); - } - } -} - -#[test] -fn normalized() { - RemoveTest { - routes: vec![ - "/x/{foo}/bar", - "/x/{bar}/baz", - "/{foo}/{baz}/bax", - "/{foo}/{bar}/baz", - "/{fod}/{baz}/{bax}/foo", - "/{fod}/baz/bax/foo", - "/{foo}/baz/bax", - "/{bar}/{bay}/bay", - "/s", - "/s/s", - "/s/s/s", - "/s/s/s/s", - "/s/s/{s}/x", - "/s/s/{y}/d", - ], - ops: vec![ - (Remove, "/x/{foo}/bar", Some("/x/{foo}/bar")), - (Remove, "/x/{bar}/baz", Some("/x/{bar}/baz")), - (Remove, "/{foo}/{baz}/bax", Some("/{foo}/{baz}/bax")), - (Remove, "/{foo}/{bar}/baz", Some("/{foo}/{bar}/baz")), - ( - Remove, - "/{fod}/{baz}/{bax}/foo", - Some("/{fod}/{baz}/{bax}/foo"), - ), - (Remove, "/{fod}/baz/bax/foo", Some("/{fod}/baz/bax/foo")), - (Remove, "/{foo}/baz/bax", Some("/{foo}/baz/bax")), - (Remove, "/{bar}/{bay}/bay", Some("/{bar}/{bay}/bay")), - (Remove, "/s", Some("/s")), - (Remove, "/s/s", Some("/s/s")), - (Remove, "/s/s/s", Some("/s/s/s")), - (Remove, "/s/s/s/s", Some("/s/s/s/s")), - (Remove, "/s/s/{s}/x", Some("/s/s/{s}/x")), - (Remove, "/s/s/{y}/d", Some("/s/s/{y}/d")), - ], - remaining: vec![], - } - .run(); -} - -#[test] -fn test() { - RemoveTest { - routes: vec!["/home", "/home/{id}"], - ops: vec![ - (Remove, "/home", Some("/home")), - (Remove, "/home", None), - (Remove, "/home/{id}", Some("/home/{id}")), - (Remove, "/home/{id}", None), - ], - remaining: vec![], - } - .run(); -} - -#[test] -fn blog() { - RemoveTest { - routes: vec![ - "/{page}", - "/posts/{year}/{month}/{post}", - "/posts/{year}/{month}/index", - "/posts/{year}/top", - "/static/{*path}", - "/favicon.ico", - ], - ops: vec![ - (Remove, "/{page}", Some("/{page}")), - ( - Remove, - "/posts/{year}/{month}/{post}", - Some("/posts/{year}/{month}/{post}"), - ), - ( - Remove, - "/posts/{year}/{month}/index", - Some("/posts/{year}/{month}/index"), - ), - (Remove, "/posts/{year}/top", Some("/posts/{year}/top")), - (Remove, "/static/{*path}", Some("/static/{*path}")), - (Remove, "/favicon.ico", Some("/favicon.ico")), - ], - remaining: vec![], - } - .run() -} - -#[test] -fn catchall() { - RemoveTest { - routes: vec!["/foo/{*catchall}", "/bar", "/bar/", "/bar/{*catchall}"], - ops: vec![ - (Remove, "/foo/{*catchall}", Some("/foo/{*catchall}")), - (Remove, "/bar/", Some("/bar/")), - (Insert, "/foo/*catchall", Some("/foo/*catchall")), - (Remove, "/bar/{*catchall}", Some("/bar/{*catchall}")), - ], - remaining: vec!["/bar", "/foo/*catchall"], - } - .run(); -} - -#[test] -fn overlapping_routes() { - RemoveTest { - routes: vec![ - "/home", - "/home/{id}", - "/users", - "/users/{id}", - "/users/{id}/posts", - "/users/{id}/posts/{post_id}", - "/articles", - "/articles/{category}", - "/articles/{category}/{id}", - ], - ops: vec![ - (Remove, "/home", Some("/home")), - (Insert, "/home", Some("/home")), - (Remove, "/home/{id}", Some("/home/{id}")), - (Insert, "/home/{id}", Some("/home/{id}")), - (Remove, "/users", Some("/users")), - (Insert, "/users", Some("/users")), - (Remove, "/users/{id}", Some("/users/{id}")), - (Insert, "/users/{id}", Some("/users/{id}")), - (Remove, "/users/{id}/posts", Some("/users/{id}/posts")), - (Insert, "/users/{id}/posts", Some("/users/{id}/posts")), - ( - Remove, - "/users/{id}/posts/{post_id}", - Some("/users/{id}/posts/{post_id}"), - ), - ( - Insert, - "/users/{id}/posts/{post_id}", - Some("/users/{id}/posts/{post_id}"), - ), - (Remove, "/articles", Some("/articles")), - (Insert, "/articles", Some("/articles")), - (Remove, "/articles/{category}", Some("/articles/{category}")), - (Insert, "/articles/{category}", Some("/articles/{category}")), - ( - Remove, - "/articles/{category}/{id}", - Some("/articles/{category}/{id}"), - ), - ( - Insert, - "/articles/{category}/{id}", - Some("/articles/{category}/{id}"), - ), - ], - remaining: vec![ - "/home", - "/home/{id}", - "/users", - "/users/{id}", - "/users/{id}/posts", - "/users/{id}/posts/{post_id}", - "/articles", - "/articles/{category}", - "/articles/{category}/{id}", - ], - } - .run(); -} - -#[test] -fn trailing_slash() { - RemoveTest { - routes: vec!["/{home}/", "/foo"], - ops: vec![ - (Remove, "/", None), - (Remove, "/{home}", None), - (Remove, "/foo/", None), - (Remove, "/foo", Some("/foo")), - (Remove, "/{home}", None), - (Remove, "/{home}/", Some("/{home}/")), - ], - remaining: vec![], - } - .run(); -} - -#[test] -fn remove_root() { - RemoveTest { - routes: vec!["/"], - ops: vec![(Remove, "/", Some("/"))], - remaining: vec![], - } - .run(); -} - -#[test] -fn check_escaped_params() { - RemoveTest { - routes: vec![ - "/foo/{id}", - "/foo/{id}/bar", - "/bar/{user}/{id}", - "/bar/{user}/{id}/baz", - "/baz/{product}/{user}/{id}", - ], - ops: vec![ - (Remove, "/foo/{a}", None), - (Remove, "/foo/{a}/bar", None), - (Remove, "/bar/{a}/{b}", None), - (Remove, "/bar/{a}/{b}/baz", None), - (Remove, "/baz/{a}/{b}/{c}", None), - ], - remaining: vec![ - "/foo/{id}", - "/foo/{id}/bar", - "/bar/{user}/{id}", - "/bar/{user}/{id}/baz", - "/baz/{product}/{user}/{id}", - ], - } - .run(); -} |
