Commit 44facb83 authored by cypherpunks's avatar cypherpunks
Browse files

rust/protover: parse empty string into empty *ProtoEntry

Contrary to what 15e59a1f
said, the C implementation has always accepted an empty string
without complaint. Meanwhile the rust implementation has always
given an error. Make the rust implementation match C.

Also eliminate some more redundant tests.

Fix on 0.3.3.1-alpha.
parent 419ea2f8
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -245,6 +245,11 @@ impl FromStr for ProtoEntry {
    /// Otherwise, the `Err` value of this `Result` is a `ProtoverError`.
    fn from_str(protocol_entry: &str) -> Result<ProtoEntry, ProtoverError> {
        let mut proto_entry: ProtoEntry = ProtoEntry::default();

        if protocol_entry.is_empty() {
            return Ok(proto_entry);
        }

        let entries = protocol_entry.split(' ');

        for entry in entries {
@@ -493,6 +498,10 @@ impl UnvalidatedProtoEntry {
    ) -> Result<Vec<(&'a str, &'a str)>, ProtoverError> {
        let mut protovers: Vec<(&str, &str)> = Vec::new();

        if protocol_string.is_empty() {
            return Ok(protovers);
        }

        for subproto in protocol_string.split(' ') {
            let mut parts = subproto.splitn(2, '=');

@@ -851,7 +860,8 @@ mod test {

    #[test]
    fn test_protoentry_from_str_empty() {
        assert_protoentry_is_unparseable!("");
        assert_protoentry_is_parseable!("");
        assert!(UnvalidatedProtoEntry::from_str("").is_ok());
    }

    #[test]
+0 −13
Original line number Diff line number Diff line
@@ -69,18 +69,6 @@ fn protocol_all_supported_with_one_value() {
    assert_eq!(true, unsupported.is_none());
}

#[test]
#[should_panic]
fn parse_protocol_unvalidated_with_empty() {
    let _: UnvalidatedProtoEntry = "".parse().unwrap();
}

#[test]
#[should_panic]
fn parse_protocol_validated_with_empty() {
    let _: ProtoEntry = "".parse().unwrap();
}

#[test]
fn protocol_all_supported_with_three_values() {
    let protocols: UnvalidatedProtoEntry = "LinkAuth=1 Microdesc=1-2 Relay=2".parse().unwrap();
@@ -156,7 +144,6 @@ fn parse_protocol_with_unexpected_characters() {
}

#[test]
#[should_panic]
fn protover_compute_vote_returns_empty_for_empty_string() {
    let protocols: &[UnvalidatedProtoEntry] = &["".parse().unwrap()];
    let listed = ProtoverVote::compute(protocols, &1);