add unit tests for DatabaseError downcasting

This commit is contained in:
Austin Bonander 2020-03-25 18:26:57 -07:00
parent 673f133cab
commit 6e3fa49ad5
5 changed files with 74 additions and 2 deletions

View file

@ -43,3 +43,22 @@ impl From<MySqlError> for crate::Error {
crate::Error::Database(Box::new(err))
}
}
#[test]
fn test_error_downcasting() {
let error = MySqlError(ErrPacket {
error_code: 0xABCD,
sql_state: None,
error_message: "".into()
});
let error = crate::Error::from(error);
let db_err = match error {
crate::Error::Database(db_err) => db_err,
e => panic!("expected crate::Error::Database, got {:?}", e)
};
assert_eq!(db_err.downcast_ref::<MySqlError>().0.error_code, 0xABCD);
assert_eq!(db_err.downcast::<MySqlError>().0.error_code, 0xABCD);
}

View file

@ -63,3 +63,38 @@ impl From<PgError> for crate::Error {
crate::Error::Database(Box::new(err))
}
}
#[test]
fn test_error_downcasting() {
use super::protocol::Severity;
let error = PgError(Response {
severity: Severity::Panic,
code: "".into(),
message: "".into(),
detail: None,
hint: None,
position: None,
internal_position: None,
internal_query: None,
where_: None,
schema: None,
table: None,
column: None,
data_type: None,
constraint: None,
file: None,
line: None,
routine: None
});
let error = crate::Error::from(error);
let db_err = match error {
crate::Error::Database(db_err) => db_err,
e => panic!("expected Error::Database, got {:?}", e)
};
assert_eq!(db_err.downcast_ref::<PgError>().0.severity, Severity::Panic);
assert_eq!(db_err.downcast::<PgError>().0.severity, Severity::Panic);
}

View file

@ -60,7 +60,7 @@ pub(crate) use message::Message;
pub(crate) use notification_response::NotificationResponse;
pub(crate) use parameter_description::ParameterDescription;
pub(crate) use ready_for_query::ReadyForQuery;
pub(crate) use response::Response;
pub(crate) use response::{Response, Severity};
pub(crate) use row_description::{Field, RowDescription};
pub(crate) trait Write {

View file

@ -3,7 +3,7 @@ use std::str::{self, FromStr};
use crate::postgres::database::Postgres;
#[derive(Debug, Copy, Clone)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub(crate) enum Severity {
Panic,
Fatal,

View file

@ -71,3 +71,21 @@ impl From<SqliteError> for crate::Error {
crate::Error::Database(Box::new(err))
}
}
#[test]
fn test_error_downcasting() {
let error = SqliteError {
code: "SQLITE_ERR_SOMETHING".into(),
message: "Some hypothetical error message".into()
};
let error = crate::Error::from(error);
let db_err = match error {
crate::Error::Database(db_err) => db_err,
e => panic!("expected Error::Database, got {:?}", e)
};
assert_eq!(&db_err.downcast_ref::<SqliteError>().code, "SQLITE_ERR_SOMETHING");
assert_eq!(db_err.downcast::<SqliteError>().code, "SQLITE_ERR_SOMETHING");
}