hyperium / tonic

A native gRPC client & server implementation with async/await support.
https://docs.rs/tonic
MIT License
9.46k stars 971 forks source link

Inserting metadata in a test panics with index out of bounds #1782

Open esiebert opened 2 weeks ago

esiebert commented 2 weeks ago

Bug Report

Version

> cargo tree | grep tonic
├── tonic v0.11.0
├── tonic-reflection v0.11.0
│   └── tonic v0.11.0 (*)
├── tonic-types v0.11.0
│   └── tonic v0.11.0 (*)
└── tonic-build v0.11.0

Description

When creating a simple test case for the authentication interceptor example:

#[cfg(test)]
mod tests {
    use super::*;

    #[tokio::test]
    async fn test_check_auth_valid() {
        let mut req = Request::new(());
        let token: MetadataValue<_> = "Bearer some-secret-token".parse().unwrap();
        req.metadata_mut().insert("Authorization", token);

        let result = check_auth(req);

        assert!(result.is_ok());
    }
}

The test panics with the following message when inserting the metadata value:

---- actor::grpc::tests::test_check_auth_valid stdout ----
thread 'actor::grpc::tests::test_check_auth_valid' panicked at /Users/eee/.cargo/registry/src/index.crates.io-6f17d22bba15001f/http-0.2.12/src/header/name.rs:1270:13:
index out of bounds: the len is 0 but the index is 0

The panic disappears if the insert command is removed, but obviously fails because it depends on it.

I'm failing to understand how insert is panicking here.

Stay1444 commented 1 week ago

Same happening here. +1