#[cfg(test)]
mod elastic_test {
    use usiem::chrono;
    use std::thread;
    use usiem::components::command::{SiemCommandCall, SiemCommandHeader};
    use usiem::components::common::SiemMessage;
    use usiem::components::SiemComponent;
    use usiem::crossbeam_channel;
    use usiem::events::SiemLog;
    use usiem_elasticsearch::output::{ElasticOuputConfig, ElasticSearchOutput};

    #[test]
    fn test_elasticsearch_output() {
        let config = ElasticOuputConfig {
            commit_max_messages: 10,
            commit_timeout: 1,
            commit_time: 1,
            cache_size: 20,
            elastic_address: String::from("http://127.0.0.1:9200"),
            elastic_stream: String::from("log-integration-test"),
            bearer_token: None,
        };
        let (k_sender, _receiver) = crossbeam_channel::unbounded();
        let (log_sender_other, log_receiver) = crossbeam_channel::unbounded();
        let (log_sender, _log_receiver) = crossbeam_channel::unbounded();
        let mut es_output = ElasticSearchOutput::new(config);
        es_output.set_log_channel(log_sender, log_receiver);
        es_output.set_kernel_sender(k_sender);
        let component_channel = es_output.local_channel();

        thread::spawn(move || {
            thread::sleep(std::time::Duration::from_millis(50));

            for i in 0..100 {
                let log = SiemLog::new(
                    format!("Log for testing only {}", i),
                    chrono::Utc::now().timestamp_millis(),
                    "123.45.67.89",
                );
                log_sender_other.send(log).unwrap();
                println!("Sended log {}", i);
            }
            thread::sleep(std::time::Duration::from_millis(1000));
            component_channel
                .send(SiemMessage::Command(
                    SiemCommandHeader {
                        comm_id: 0,
                        comp_id: 0,
                        user: String::from("None"),
                    },
                    SiemCommandCall::STOP_COMPONENT("Component for testing".to_string()),
                ))
                .unwrap();
            println!("Ended sending logs");
        });
        es_output.run();
        thread::sleep(std::time::Duration::from_millis(100));
        println!("End");
    }
}