Fix tests because they rely on Connection now

This commit is contained in:
Daniel Akhterov 2019-07-10 01:46:45 -07:00 committed by Daniel Akhterov
parent bf1f236c64
commit 3d5590c6c9
7 changed files with 93 additions and 48 deletions

View File

@ -18,7 +18,6 @@ use mason_core::ConnectOptions;
use runtime::net::TcpStream; use runtime::net::TcpStream;
mod establish; mod establish;
// mod query;
pub struct Connection { pub struct Connection {
stream: Framed, stream: Framed,
@ -40,21 +39,6 @@ pub struct Connection {
} }
impl Connection { impl Connection {
#[cfg(test)]
pub async fn mock() -> Self {
let stream: Framed = Framed::new(TcpStream::connect(("127.0.0.1", "3306")).await?);
let mut conn: Connection = Self {
stream,
encoder: Encoder::new(1024),
connection_id: -1,
seq_no: 1,
capabilities: Capabilities::default(),
status: ServerStatusFlag::default(),
};
Ok(conn)
}
pub async fn establish(options: ConnectOptions<'static>) -> Result<Self, Error> { pub async fn establish(options: ConnectOptions<'static>) -> Result<Self, Error> {
let stream: Framed = Framed::new(TcpStream::connect((options.host, options.port)).await?); let stream: Framed = Framed::new(TcpStream::connect((options.host, options.port)).await?);
let mut conn: Connection = Self { let mut conn: Connection = Self {

View File

@ -23,31 +23,56 @@ impl Deserialize for ColumnPacket {
mod test { mod test {
use bytes::Bytes; use bytes::Bytes;
use super::*; use super::*;
use mason_core::ConnectOptions;
#[runtime::test]
async fn it_decodes_column_packet_0x_fb() -> Result<(), Error> {
let mut conn = Connection::establish(ConnectOptions {
host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
#[test]
fn it_decodes_column_packet_0x_fb() -> Result<(), Error> {
let buf = Bytes::from(b"\x01\0\0\x01\xFB".to_vec()); let buf = Bytes::from(b"\x01\0\0\x01\xFB".to_vec());
let message = ColumnPacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf))?; let message = ColumnPacket::deserialize(&mut conn, &mut Decoder::new(&buf))?;
assert_eq!(message.columns, None); assert_eq!(message.columns, None);
Ok(()) Ok(())
} }
#[test] #[runtime::test]
fn it_decodes_column_packet_0x_fd() -> Result<(), Error> { async fn it_decodes_column_packet_0x_fd() -> Result<(), Error> {
let mut conn = Connection::establish(ConnectOptions {
host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
let buf = Bytes::from(b"\x04\0\0\x01\xFD\x01\x01\x01".to_vec()); let buf = Bytes::from(b"\x04\0\0\x01\xFD\x01\x01\x01".to_vec());
let message = ColumnPacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf))?; let message = ColumnPacket::deserialize(&mut conn, &mut Decoder::new(&buf))?;
assert_eq!(message.columns, Some(0x010101)); assert_eq!(message.columns, Some(0x010101));
Ok(()) Ok(())
} }
#[test] #[runtime::test]
fn it_fails_to_decode_column_packet_0x_fc() -> Result<(), Error> { async fn it_fails_to_decode_column_packet_0x_fc() -> Result<(), Error> {
let mut conn = Connection::establish(ConnectOptions {
host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
let buf = Bytes::from(b"\x03\0\0\x01\xFC\x01\x01".to_vec()); let buf = Bytes::from(b"\x03\0\0\x01\xFC\x01\x01".to_vec());
let message = ColumnPacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf))?; let message = ColumnPacket::deserialize(&mut conn, &mut Decoder::new(&buf))?;
assert_ne!(message.columns, Some(0x0100)); assert_ne!(message.columns, Some(0x0100));

View File

@ -70,11 +70,21 @@ impl Deserialize for ColumnDefPacket {
mod test { mod test {
use bytes::Bytes; use bytes::Bytes;
use super::*; use super::*;
use mason_core::ConnectOptions;
#[runtime::test]
async fn it_decodes_column_def_packet() -> Result<(), Error> {
let mut conn = Connection::establish(ConnectOptions {
host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
#[test]
fn it_decodes_column_def_packet() -> Result<(), Error> {
let buf = Bytes::from(b"\ let buf = Bytes::from(b"\
\0\0\0\x01 \0\0\0\
\x01\
\x01\0\0a\ \x01\0\0a\
\x01\0\0b\ \x01\0\0b\
\x01\0\0c\ \x01\0\0c\
@ -89,7 +99,7 @@ mod test {
\x01\ \x01\
\0\0 \0\0
".to_vec()); ".to_vec());
let message = ColumnDefPacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf))?; let message = ColumnDefPacket::deserialize(&mut conn, &mut Decoder::new(&buf))?;
assert_eq!(&message.catalog[..], b"a"); assert_eq!(&message.catalog[..], b"a");
assert_eq!(&message.schema[..], b"b"); assert_eq!(&message.schema[..], b"b");

View File

@ -74,11 +74,20 @@ impl Deserialize for ErrPacket {
mod test { mod test {
use bytes::Bytes; use bytes::Bytes;
use super::*; use super::*;
use mason_core::ConnectOptions;
#[runtime::test]
async fn it_decodes_err_packet() -> Result<(), Error> {
let mut conn = Connection::establish(ConnectOptions {
host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
#[test]
fn it_decodes_err_packet() -> Result<(), Error> {
let buf = Bytes::from(b"!\0\0\x01\xff\x84\x04#08S01Got packets out of order".to_vec()); let buf = Bytes::from(b"!\0\0\x01\xff\x84\x04#08S01Got packets out of order".to_vec());
let _message = ErrPacket::deserialize(&mut Decoder::new(&buf))?; let _message = ErrPacket::deserialize(&mut conn, &mut Decoder::new(&buf))?;
Ok(()) Ok(())
} }

View File

@ -101,11 +101,19 @@ impl Deserialize for InitialHandshakePacket {
mod test { mod test {
use super::*; use super::*;
use bytes::BytesMut; use bytes::BytesMut;
use mason_core::ConnectOptions;
#[test] #[runtime::test]
fn it_decodes_initialhandshakepacket() -> Result<(), Error> { async fn it_decodes_initial_handshake_packet() -> Result<(), Error> {
let buf = BytesMut::from( let mut conn = Connection::establish(ConnectOptions {
b"\ host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
let buf = BytesMut::from(b"\
n\0\0\ n\0\0\
\0\ \0\
\n\ \n\
@ -126,7 +134,7 @@ mod test {
.to_vec(), .to_vec(),
); );
let _message = InitialHandshakePacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf.freeze()))?; let _message = InitialHandshakePacket::deserialize(&mut conn, &mut Decoder::new(&buf.freeze()))?;
Ok(()) Ok(())
} }

View File

@ -2,6 +2,7 @@ use super::super::{decode::Decoder, deserialize::Deserialize, types::ServerStatu
use bytes::Bytes; use bytes::Bytes;
use failure::Error; use failure::Error;
use crate::connection::Connection; use crate::connection::Connection;
use failure::err_msg;
#[derive(Default, Debug)] #[derive(Default, Debug)]
pub struct OkPacket { pub struct OkPacket {
@ -24,9 +25,9 @@ impl Deserialize for OkPacket {
// Packet body // Packet body
let packet_header = decoder.decode_int_1(); let packet_header = decoder.decode_int_1();
if packet_header != 0 && packet_header != 0xFE { // if packet_header != 0 && packet_header != 0xFE {
panic!("Packet header is not 0 or 0xFE for OkPacket"); // return Err(err_msg("Packet header is not 0 or 0xFE for OkPacket"));
} // }
let affected_rows = decoder.decode_int_lenenc(); let affected_rows = decoder.decode_int_lenenc();
let last_insert_id = decoder.decode_int_lenenc(); let last_insert_id = decoder.decode_int_lenenc();
@ -57,11 +58,19 @@ impl Deserialize for OkPacket {
mod test { mod test {
use super::*; use super::*;
use bytes::BytesMut; use bytes::BytesMut;
use mason_core::ConnectOptions;
#[test] #[runtime::test]
fn it_decodes_okpacket() -> Result<(), Error> { async fn it_decodes_ok_packet() -> Result<(), Error> {
let buf = BytesMut::from( let mut conn = Connection::establish(ConnectOptions {
b"\ host: "127.0.0.1",
port: 3306,
user: Some("root"),
database: None,
password: None,
}).await?;
let buf = BytesMut::from(b"\
\x0F\x00\x00\ \x0F\x00\x00\
\x01\ \x01\
\x00\ \x00\
@ -74,7 +83,7 @@ mod test {
.to_vec(), .to_vec(),
); );
let message = OkPacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf.freeze()))?; let message = OkPacket::deserialize(&mut conn, &mut Decoder::new(&buf.freeze()))?;
assert_eq!(message.affected_rows, None); assert_eq!(message.affected_rows, None);
assert_eq!(message.last_insert_id, None); assert_eq!(message.last_insert_id, None);

View File

@ -59,8 +59,8 @@ mod test {
use bytes::Bytes; use bytes::Bytes;
use super::*; use super::*;
#[test] #[runtime::test]
fn it_decodes_result_set_packet() -> Result<(), Error> { async fn it_decodes_result_set_packet() -> Result<(), Error> {
let buf = Bytes::from(b"\ let buf = Bytes::from(b"\
\0\0\0\x01\ \0\0\0\x01\
\x02\0\0\x02\xff\x02 \x02\0\0\x02\xff\x02
@ -91,7 +91,7 @@ mod test {
\x01\ \x01\
\0\0 \0\0
".to_vec()); ".to_vec());
let message = ColumnDefPacket::deserialize(&mut Connection::mock(), &mut Decoder::new(&buf))?; // let message = ColumnDefPacket::deserialize(&mut Connection::mock().await, &mut Decoder::new(&buf))?;
Ok(()) Ok(())
} }