use dnsparse::*;
const CAPTIVE_APPLE_COM_QUERY: [u8; 48] = [
30, 252, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, b'c', b'a', b'p', b't', b'i', b'v', b'e', 5, b'a', b'p', b'p', b'l', b'e', 3, b'c', b'o', b'm', 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ];
macro_rules! parse {
($req:ident) => {
let mut buf = CAPTIVE_APPLE_COM_QUERY;
let $req = Message::parse(&mut buf).expect("parsing failed");
}
}
#[test]
fn test_parse() {
let mut buf = CAPTIVE_APPLE_COM_QUERY;
let request = Message::parse(&mut buf).expect("parsing failed");
assert_eq!(request.len(), 35);
}
#[test]
fn test_header_id() {
parse!(request);
assert_eq!(request.header().id(), 7932);
}
#[test]
fn test_header_kind() {
parse!(request);
assert_eq!(request.header().kind(), HeaderKind::Query);
}
#[test]
fn test_header_opcode() {
parse!(request);
assert_eq!(request.header().opcode(), OpCode::Query);
}
#[test]
fn test_header_authoritative_answer() {
parse!(request);
assert_eq!(request.header().authoritative_answer(), false);
}
#[test]
fn test_header_truncated() {
parse!(request);
assert_eq!(request.header().truncated(), false);
}
#[test]
fn test_header_recursion_desired() {
parse!(request);
assert_eq!(request.header().recursion_desired(), true);
}
#[test]
fn test_header_recursion_available() {
parse!(request);
assert_eq!(request.header().recursion_available(), false);
}
#[test]
fn test_header_response_code() {
parse!(request);
assert_eq!(request.header().response_code(), ResponseCode::NoError);
}
#[test]
fn test_header_question_count() {
parse!(request);
assert_eq!(request.header().question_count(), 1);
}
#[test]
fn test_header_answer_count() {
parse!(request);
assert_eq!(request.header().answer_count(), 0);
}
#[test]
fn test_header_name_server_count() {
parse!(request);
assert_eq!(request.header().name_server_count(), 0);
}
#[test]
fn test_header_additional_records_count() {
parse!(request);
assert_eq!(request.header().additional_records_count(), 0);
}
#[test]
fn test_questions() {
parse!(request);
let mut questions = request.questions();
let question = questions.next().expect("`Questions` iterator is empty");
assert_eq!(question.name(), "captive.apple.com");
assert_eq!(question.name(), "CAPTIVE.APPLE.COM");
assert_ne!(question.name(), ".captive.apple.com");
assert_ne!(question.name(), "captive.apple.com.");
assert_ne!(question.name(), "captive-apple-com");
assert_eq!(*question.class(), QueryClass::IN);
assert_eq!(*question.kind(), QueryKind::A);
assert_eq!(question.name().to_string(), "captive.apple.com".to_string());
assert!(questions.next().is_none());
}
#[test]
fn test_as_bytes() {
parse!(request);
let bytes = request.as_bytes();
assert_eq!(bytes.len(), request.len());
assert_eq!(&CAPTIVE_APPLE_COM_QUERY[..bytes.len()], bytes);
}