actiondb 0.7.0

A safe and efficient unstructured text (log) parsing library.
Documentation
use super::Pattern;
use uuid::Uuid;

#[test]
fn test_given_json_document_when_it_does_not_contain_errors_then_pattern_can_be_created_from_it
                                                                                                () {
    let buffer = r#"
{
  "name": "SSH_DISCONNECT",
  "pattern": "Jun %{INT:day} %{INT:hour}:%{INT:min}:%{INT:sec} lobotomy sshd[%{INT:pid}]: Received disconnect from %{GREEDY:ipaddr}: %{INT:dunno}: disconnected by user",
  "uuid": "9a49c47d-29e9-4072-be84-3b76c6814743",
  "values": {
      "key1": "value1",
      "key2": "value2"
  },
  "tags": ["tag1", "tag2"]
}
"#;

    let expected_uuid = Uuid::parse_str("9a49c47d-29e9-4072-be84-3b76c6814743").ok().unwrap();
    let expected_tags = &["tag1".to_owned(), "tag2".to_owned()];
    let result = Pattern::from_json(buffer);
    println!("{:?}", result);
    let pattern = result.expect("Failed to deserialize a JSON Pattern");
    assert_eq!(pattern.name(), Some("SSH_DISCONNECT"));
    assert_eq!(pattern.uuid().as_bytes(), expected_uuid.as_bytes());
    assert_eq!(pattern.values()
                      .expect("Pattern created from JSON but it doesn't contain the expected \
                               additional values")
                      .get("key1")
                      .expect("Pattern created from JSON but it doesn't contain the expected \
                               additional value"),
               "value1");
    assert_eq!(pattern.values()
                      .expect("Pattern created from JSON but it doesn't contain the expected \
                               additional values")
                      .get("key2")
                      .expect("Pattern created from JSON but it doesn't contain the expected \
                               additional value"),
               "value2");
    assert_eq!(pattern.values().expect("").get("key3"), None);
    assert_eq!(pattern.tags()
                      .expect("Pattern created from JSON but it doesn't contain the expected \
                               tags"),
               expected_tags);
    assert_eq!(pattern.pattern().len(), 15);
}

#[test]
fn test_given_json_pattern_when_it_does_not_have_the_optional_paramaters_then_pattern_can_be_built_from_it
    () {
    let buffer = r#"
{
  "uuid": "9a49c47d-29e9-4072-be84-3b76c6814743",
  "pattern": "Jun %{INT:day} %{INT:hour}:%{INT:min}:%{INT:sec} lobotomy sshd[%{INT:pid}]: Received disconnect from %{GREEDY:ipaddr}: %{INT:dunno}: disconnected by user"
}
"#;

    let pattern = Pattern::from_json(buffer).expect("Failed to deserialize a JSON Pattern");
    assert_eq!(pattern.name(), None);
}

#[test]
fn test_given_json_pattern_when_its_uuid_is_invalid_then_pattern_cannot_be_built_from_it() {
    let buffer = r#"
{
  "uuid": "sdfsdf-12f-sdfd--23",
  "pattern": "Jun %{INT:day} %{INT:hour}:%{INT:min}:%{INT:sec} lobotomy sshd[%{INT:pid}]: Received disconnect from %{GREEDY:ipaddr}: %{INT:dunno}: disconnected by user"
}
"#;

    let _ = Pattern::from_json(buffer).err().expect("We created a Pattern with an invalid Uuid");
}

#[test]
fn test_given_json_pattern_when_its_pattern_is_invalid_then_pattern_cannot_be_built_from_it() {
    let buffer = r#"
{
  "uuid": "9a49c47d-29e9-4072-be84-3b76c6814743",
  "pattern": "Jun %{INT:da"
}
"#;

    let _ = Pattern::from_json(buffer)
                .err()
                .expect("We created a Pattern with an invalid pattern field");
}

#[test]
fn test_given_json_pattern_when_test_messages_are_specified_then_they_are_parsed() {
    let buffer = r#"
{
  "uuid": "9a49c47d-29e9-4072-be84-3b76c6814743",
  "pattern": "Jun %{INT:day}",
  "test_messages": [
      {
          "message": "Jun 1",
          "values": {
              "day": "1"
          }
      }
  ]
}
"#;

    let _ = Pattern::from_json(buffer)
                .expect("Failed to create a Pattern when test_messages are specified");
}

#[test]
fn test_given_json_pattern_with_invalid_uuid_when_we_try_to_create_pattern_then_it_fails() {
    let buffer = r#"
{
  "uuid": "not valid uuid",
  "pattern": "Jun %{INT:day}"
}
"#;

    let _ = Pattern::from_json(buffer)
                .err()
                .expect("We created a Pattern with an invalid uuid field");
}

#[test]
fn test_given_json_pattern_when_it_does_not_have_the_pattern_field_then_it_cannot_be_created() {
    let buffer = r#"
{
  "uuid": "9a49c47d-29e9-4072-be84-3b76c6814743",
}
"#;

    let _ = Pattern::from_json(buffer)
                .err()
                .expect("We created a Pattern without the pattern field");
}

#[test]
fn test_given_json_pattern_when_it_does_not_have_a_name_it_can_be_successfully_deserialized() {
    let buffer = r#"
{
  "uuid": "b3c778e3-f476-4df9-b5a1-aaf27a3b4e21",
  "pattern": "Jun %{INT:day}"
}
"#;

    let _ = Pattern::from_json(buffer).expect("We should be able to deserialize a pattern definition without a 'name' field");
}