togglempc 0.1.0

Togglempc is a small REST server that accepts HTTP post requests to toggle MPD on and off and switch playlist. (It is a client to MPD.) MPD is Music Play Daemon, see https://www.musicpd.org/. Togglempc can be used for home automation or smart switches can use it to control MPD instances.
Documentation
use crate::MpdConnection;
use crate::MpdConn;
use std::thread;

#[path="../src/mpd_mock.rs"]
mod mpd_mock;
use mpd_mock::MpdMock;

#[test]
fn test_connect_via_ipv4() {
    run_connect(MpdMock::new_v4())
}

#[test]
fn test_connect_via_ipv6() {
    run_connect(MpdMock::new_v6())
}

fn run_connect(mut mpd_mock: MpdMock) {
    let addr_and_port = mpd_mock.addr_and_port.clone();
    let handle = thread::spawn(move || {
        mpd_mock.start_tcp_server();
    });
    {
        MpdConnection::new(&addr_and_port).unwrap();
    }
    handle.join().unwrap();
}

#[test]
fn test_call_ok() {
    let dummy_request = "Hi\n";
    let dummy_response = "Hello\nOK\n";

    let mut mpd_mock = MpdMock::new_v6();
    let addr_and_port = mpd_mock.addr_and_port.clone();
    let handle = thread::spawn(move || {
        mpd_mock.start_tcp_server();
        mpd_mock.process_call(dummy_request, dummy_response)
    });
    {
        println!("Start Connection");
        let mut mpd_c = MpdConnection::new(&addr_and_port).unwrap();
        println!("Perform call");
        assert_eq!(dummy_response, mpd_c.call(dummy_request).unwrap());
        println!("Call done");
    }
    handle.join().unwrap();
}

#[test]
fn test_call_error() {
    let dummy_request = "Hi\n";
    let dummy_response = "Hello\nACK some error occured\n";

    let mut mpd_mock = MpdMock::new_v6();
    let addr_and_port = mpd_mock.addr_and_port.clone();
    let handle = thread::spawn(move || {
        mpd_mock.start_tcp_server();
        mpd_mock.process_call(dummy_request, dummy_response)
    });
    {
        println!("Start Connection");
        let mut mpd_c = MpdConnection::new(&addr_and_port).unwrap();
        println!("Perform call");
        match mpd_c.call(dummy_request) {
            Ok(_) => panic!("call should end with error"),
            Err(err) => assert_eq!("ACK some error occured\n", format!("{}",err)),
        }
        println!("Call done");
    }
    handle.join().unwrap();
}