refactor(gateway): delete dead accessors and FromRef impls (review 002 COV-13)
Coverage-confirmed dead code (every binary, zero hits): - server/state.rs: drop FromRef<RouterState> impls for Arc<OperationRegistry> and Arc<dyn IdentityProvider> — no route extracts these types; the auth middleware receives the provider directly via from_fn_with_state - gateway/dispatch.rs: drop identity_provider() and resolve_bearer() accessors; resolve_bearer's doc promised an auth hook the middleware never calls (spec/code drift). Wire-or-delete resolved to delete: bearer resolution lives in the middleware (SRV-11 single-resolve ordering), the dispatch spine only needs the per-call Option<Identity>. GatewayDispatch::new consequently takes the registry alone (GatewayState loses its unused identity_provider passthrough; dispatch.rs/to_mcp.rs tests simplified) - websocket/upgrade.rs: drop FromRef<SessionState> for Arc<OperationRegistry> — no router carries SessionState as its state type; the inverse FromRef<Arc<OperationRegistry>> for SessionState (custom upgrade routes, integration tests) remains Verification: ./scripts/verify.sh (352 passed), ./scripts/verify.sh --all-features (466 passed), clippy -D warnings, fmt --check.
This commit is contained in:
+20
-71
@@ -502,7 +502,6 @@ pub fn to_mcp_service(dispatch: Arc<GatewayDispatch>) -> ToMcpService {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use alkcall::core::auth::{AuthToken, IdentityProvider};
|
||||
use alkcall::core::types::Capabilities;
|
||||
use alkcall::registry::context::{OperationContext, ScopedPeerEnv};
|
||||
use alkcall::registry::discovery::{
|
||||
@@ -516,41 +515,6 @@ mod tests {
|
||||
use futures::StreamExt;
|
||||
use rmcp::model::Extensions;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Mutex as StdMutex;
|
||||
|
||||
struct StaticIdentityProvider {
|
||||
tokens: StdMutex<HashMap<String, Identity>>,
|
||||
}
|
||||
|
||||
impl StaticIdentityProvider {
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
tokens: StdMutex::new(HashMap::new()),
|
||||
}
|
||||
}
|
||||
|
||||
fn with_token(self, token: &str, identity: Identity) -> Self {
|
||||
self.tokens
|
||||
.lock()
|
||||
.unwrap_or_else(|e| e.into_inner())
|
||||
.insert(token.to_string(), identity);
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl IdentityProvider for StaticIdentityProvider {
|
||||
fn resolve_from_fingerprint(&self, _fp: &str) -> Option<Identity> {
|
||||
None
|
||||
}
|
||||
fn resolve_from_token(&self, token: &AuthToken) -> Option<Identity> {
|
||||
let token_str = String::from_utf8_lossy(&token.raw);
|
||||
self.tokens
|
||||
.lock()
|
||||
.unwrap_or_else(|e| e.into_inner())
|
||||
.get(token_str.as_ref())
|
||||
.cloned()
|
||||
}
|
||||
}
|
||||
|
||||
fn identity_with_scopes(id: &str, scopes: &[&str]) -> Identity {
|
||||
Identity {
|
||||
@@ -675,15 +639,8 @@ mod tests {
|
||||
Arc::new(dispatch_registry)
|
||||
}
|
||||
|
||||
fn dispatch(
|
||||
registry: Arc<OperationRegistry>,
|
||||
provider: Arc<dyn alkcall::core::auth::IdentityProvider>,
|
||||
) -> Arc<GatewayDispatch> {
|
||||
Arc::new(GatewayDispatch::new(registry, provider))
|
||||
}
|
||||
|
||||
fn provider() -> Arc<dyn alkcall::core::auth::IdentityProvider> {
|
||||
Arc::new(StaticIdentityProvider::new())
|
||||
fn dispatch(registry: Arc<OperationRegistry>) -> Arc<GatewayDispatch> {
|
||||
Arc::new(GatewayDispatch::new(registry))
|
||||
}
|
||||
|
||||
fn extensions_with_identity(identity: Option<Identity>) -> Extensions {
|
||||
@@ -728,7 +685,7 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn list_tools_returns_exactly_four_gateway_tools() {
|
||||
let _gateway = ToMcpGateway::new(dispatch(full_registry_with_ops(vec![]), provider()));
|
||||
let _gateway = ToMcpGateway::new(dispatch(full_registry_with_ops(vec![])));
|
||||
let tools = gateway_tools();
|
||||
let names: Vec<String> = tools.iter().map(|t| t.name.to_string()).collect();
|
||||
assert_eq!(names.len(), 4);
|
||||
@@ -745,7 +702,7 @@ mod tests {
|
||||
OperationType::Query,
|
||||
AccessControl::default(),
|
||||
)]);
|
||||
let _gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let _gateway = ToMcpGateway::new(dispatch(registry));
|
||||
let tools = gateway_tools();
|
||||
for tool in &tools {
|
||||
assert_ne!(tool.name, "fs/readFile");
|
||||
@@ -777,9 +734,7 @@ mod tests {
|
||||
AccessControl::default(),
|
||||
),
|
||||
]);
|
||||
let idp: Arc<dyn alkcall::core::auth::IdentityProvider> =
|
||||
Arc::new(StaticIdentityProvider::new());
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, idp));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let result = invoke_tool(
|
||||
&gateway,
|
||||
@@ -833,7 +788,7 @@ mod tests {
|
||||
AccessControl::default(),
|
||||
),
|
||||
]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let result = invoke_tool(&gateway, "search", None, None).await;
|
||||
assert_eq!(result.is_error, Some(false));
|
||||
@@ -871,7 +826,7 @@ mod tests {
|
||||
AccessControl::default(),
|
||||
),
|
||||
]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert("query".to_string(), Value::String("fs".to_string()));
|
||||
@@ -900,7 +855,7 @@ mod tests {
|
||||
OperationType::Query,
|
||||
AccessControl::default(),
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert("name".to_string(), Value::String("fs/readFile".to_string()));
|
||||
@@ -926,7 +881,7 @@ mod tests {
|
||||
..Default::default()
|
||||
},
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert("name".to_string(), Value::String("fs/readFile".to_string()));
|
||||
@@ -956,7 +911,7 @@ mod tests {
|
||||
..Default::default()
|
||||
},
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert(
|
||||
@@ -1027,7 +982,7 @@ mod tests {
|
||||
Capabilities::new(),
|
||||
))
|
||||
.unwrap();
|
||||
let gateway = ToMcpGateway::new(dispatch(Arc::new(dispatch_registry), provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(Arc::new(dispatch_registry)));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert("name".to_string(), Value::String("secret/op".to_string()));
|
||||
@@ -1066,7 +1021,7 @@ mod tests {
|
||||
OperationType::Query,
|
||||
AccessControl::default(),
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert(
|
||||
@@ -1095,7 +1050,7 @@ mod tests {
|
||||
OperationType::Query,
|
||||
AccessControl::default(),
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert(
|
||||
@@ -1116,7 +1071,7 @@ mod tests {
|
||||
#[tokio::test]
|
||||
async fn call_argument_errors_carry_retryable_and_truthy_messages() {
|
||||
let registry = full_registry_with_ops(vec![]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let missing = invoke_tool(&gateway, "call", None, None).await;
|
||||
assert_eq!(missing.is_error, Some(true));
|
||||
@@ -1154,7 +1109,7 @@ mod tests {
|
||||
#[tokio::test]
|
||||
async fn call_returns_structured_error_for_call_error() {
|
||||
let registry = full_registry_with_ops(vec![]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert(
|
||||
@@ -1178,7 +1133,7 @@ mod tests {
|
||||
OperationType::Query,
|
||||
AccessControl::default(),
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert(
|
||||
@@ -1235,9 +1190,7 @@ mod tests {
|
||||
..Default::default()
|
||||
},
|
||||
)]);
|
||||
let idp: Arc<dyn alkcall::core::auth::IdentityProvider> =
|
||||
Arc::new(StaticIdentityProvider::new());
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, idp));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let mut args = Map::new();
|
||||
args.insert(
|
||||
@@ -1256,7 +1209,7 @@ mod tests {
|
||||
|
||||
#[tokio::test]
|
||||
async fn unknown_tool_name_returns_not_found_structured_error() {
|
||||
let gateway = ToMcpGateway::new(dispatch(Arc::new(OperationRegistry::new()), provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(Arc::new(OperationRegistry::new())));
|
||||
let result = invoke_tool(&gateway, "bogus", None, None).await;
|
||||
assert_eq!(result.is_error, Some(true));
|
||||
let structured = result.structured_content.expect("structured error present");
|
||||
@@ -1276,11 +1229,7 @@ mod tests {
|
||||
..Default::default()
|
||||
},
|
||||
)]);
|
||||
let idp: Arc<dyn alkcall::core::auth::IdentityProvider> = Arc::new(
|
||||
StaticIdentityProvider::new()
|
||||
.with_token("alk_admin", identity_with_scopes("admin-peer", &["admin"])),
|
||||
);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, idp));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let admin_identity = identity_with_scopes("admin-peer", &["admin"]);
|
||||
let extensions = extensions_with_identity(Some(admin_identity.clone()));
|
||||
@@ -1354,7 +1303,7 @@ mod tests {
|
||||
OperationType::Query,
|
||||
AccessControl::default(),
|
||||
)]);
|
||||
let gateway = ToMcpGateway::new(dispatch(registry, provider()));
|
||||
let gateway = ToMcpGateway::new(dispatch(registry));
|
||||
|
||||
let search_result = invoke_tool(&gateway, "search", None, None).await;
|
||||
let ops = search_result
|
||||
|
||||
Reference in New Issue
Block a user