rust/hedgewars-network-protocol/src/tests/parser.rs
author S.D.
Tue, 27 Sep 2022 14:59:03 +0300
changeset 15900 fc3cb23fd26f
parent 15852 ea459da15b30
child 16026 7c8697fa019f
permissions -rw-r--r--
Allow to see rooms of incompatible versions in the lobby For the new clients the room version is shown in a separate column. There is also a hack for previous versions clients: the room vesion specifier is prepended to the room names for rooms of incompatible versions, and the server shows 'incompatible version' error if the client tries to join them.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
15852
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     1
use crate::{
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     2
    parser::HwProtocolError,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     3
    parser::{message, server_message},
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     4
    types::GameCfg,
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     5
};
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     6
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     7
#[test]
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     8
fn parse_test() {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
     9
    use crate::messages::HwProtocolMessage::*;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    10
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    11
    assert_eq!(message(b"PING\n\n"), Ok((&b""[..], Ping)));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    12
    assert_eq!(message(b"START_GAME\n\n"), Ok((&b""[..], StartGame)));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    13
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    14
        message(b"NICK\nit's me\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    15
        Ok((&b""[..], Nick("it's me".to_string())))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    16
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    17
    assert_eq!(message(b"PROTO\n51\n\n"), Ok((&b""[..], Proto(51))));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    18
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    19
        message(b"QUIT\nbye-bye\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    20
        Ok((&b""[..], Quit(Some("bye-bye".to_string()))))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    21
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    22
    assert_eq!(message(b"QUIT\n\n"), Ok((&b""[..], Quit(None))));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    23
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    24
        message(b"CMD\nwatch 49471\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    25
        Ok((&b""[..], Watch(49471)))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    26
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    27
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    28
        message(b"BAN\nme\nbad\n77\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    29
        Ok((&b""[..], Ban("me".to_string(), "bad".to_string(), 77)))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    30
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    31
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    32
    assert_eq!(message(b"CMD\nPART\n\n"), Ok((&b""[..], Part(None))));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    33
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    34
        message(b"CMD\nPART _msg_\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    35
        Ok((&b""[..], Part(Some("_msg_".to_string()))))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    36
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    37
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    38
    assert_eq!(message(b"CMD\nRND\n\n"), Ok((&b""[..], Rnd(vec![]))));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    39
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    40
        message(b"CMD\nRND A B\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    41
        Ok((&b""[..], Rnd(vec![String::from("A"), String::from("B")])))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    42
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    43
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    44
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    45
        message(b"CFG\nSCHEME\na\nA\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    46
        Ok((
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    47
            &b""[..],
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    48
            Cfg(GameCfg::Scheme("a".to_string(), vec!["A".to_string()]))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    49
        ))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    50
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    51
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    52
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    53
        message(b"QUIT\n1\n2\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    54
        Err(nom::Err::Error(HwProtocolError::new()))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    55
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    56
}
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    57
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    58
#[test]
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    59
fn parse_server_messages_test() {
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    60
    use crate::messages::HwServerMessage::*;
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    61
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    62
    assert_eq!(server_message(b"PING\n\n"), Ok((&b""[..], Ping)));
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    63
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    64
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    65
        server_message(b"JOINING\nnoone\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    66
        Ok((&b""[..], Joining("noone".to_string())))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    67
    );
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    68
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    69
    assert_eq!(
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    70
        server_message(b"CLIENT_FLAGS\naaa\nA\nB\n\n"),
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    71
        Ok((
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    72
            &b""[..],
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    73
            ClientFlags("aaa".to_string(), vec!["A".to_string(), "B".to_string()])
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    74
        ))
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    75
    )
ea459da15b30 update protocol 📦
alfadur
parents:
diff changeset
    76
}