You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: stream_states.rs
    path of file: ./repos/h2/tests/h2-tests/tests
    
    the code of the file until where you have to start completion: #![deny(warnings)]

use futures::future::{join, join3, lazy, t
    
async fn recv_next_stream_id_updated_by_malformed_headers() {
    h2_support::trace_init!();
    let (io, mut client) = mock::new();

    let bad_auth = util::byte_str("not:a/good authority");
    let mut bad_headers: frame::Headers = frames::headers(1)
        .request("GET", "https://example.com/")
        .eos()
        .into();
    bad_headers.pseudo_mut().authority = Some(bad_auth);

    let client = async move {
        let settings = client.assert_server_handshake().await;
        assert_default_settings!(settings);
        // bad headers -- should error.
        client.send_frame(bad_headers).await;
        client.recv_frame(frames::reset(1).protocol_error()).await;
        // this frame is good, but the stream id should already have been incr'd
        client
            .send_frame(
                frames::headers(1)
                    .request("GET", "https://example.com/")
                    .eos(),
            )
            .await;
        client.recv_frame(frames::go_away(1).protocol_error()).await;
    };
    let srv = async move {
        let mut srv = server::handshake(io).await.expect("handshake");
        let res = srv.next().await.unwrap();
        let err = res.unwrap_err();
        assert_eq!(err.reason(), Some(h2::Reason::PROTOCOL_ERROR));
    };

    join(srv, client).await;
}