aboutsummaryrefslogblamecommitdiff
path: root/src/config/options_test.rs
blob: 98fc625e95e1f99e08d928f41338a765745baf4f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
                              











                                                           





                                                                                    


                                                                                        





                                                                                         


        






                                                           


                    
                                                          

                                                           


       
                               


                                                                     







                                                                           



                                              













                                                                     
            



               
                              
                                               


                                                                                  
                                             


       
                           


                                                                     

                                                                                

                                                





                                                                              


                                                







                                                                           


                                           
                   







                                                                       
          


                                         
                   

                                                                         

                   

                                    

                   

                                 

          
use std::collections::HashMap;
use std::time::Duration;

use crate::config::*;

// Environment variables are set for the entire process and
// tests are run whithin the same process.
// => We cannot test ConfigOpts::from_env(), 
// because tests modify each other's environment.
// This is why we only test ConfigOpts::from_iter(iter).

fn minimal_valid_options() -> HashMap<String, String> {
	let mut opts = HashMap::new();
    opts.insert("DIPLONAT_CONSUL_NODE_NAME".to_string(), "consul_node".to_string());
    opts
}

fn all_valid_options() -> HashMap<String, String> {
	let mut opts = minimal_valid_options();
    opts.insert("DIPLONAT_CONSUL_URL".to_string(), "http://127.0.0.1:9999".to_string());
	opts.insert("DIPLONAT_ACME_ENABLE".to_string(), "true".to_string());
	opts.insert("DIPLONAT_ACME_EMAIL".to_string(), "bozo@bozo.net".to_string());
	opts.insert("DIPLONAT_FIREWALL_ENABLE".to_string(), "true".to_string());
	opts.insert("DIPLONAT_FIREWALL_REFRESH_TIME".to_string(), "20".to_string());
	opts.insert("DIPLONAT_IGD_ENABLE".to_string(), "true".to_string());
	opts.insert("DIPLONAT_IGD_PRIVATE_IP".to_string(), "172.123.43.555".to_string());
	opts.insert("DIPLONAT_IGD_EXPIRATION_TIME".to_string(), "60".to_string());
	opts.insert("DIPLONAT_IGD_REFRESH_TIME".to_string(), "10".to_string());
    opts
}

// #[test]
// #[should_panic]
// fn err_empty_env() {
// 	 std::env::remove_var("DIPLONAT_CONSUL_NODE_NAME");
// 	 ConfigOpts::from_env().unwrap();
// }

#[test]
#[should_panic]
fn err_empty_env() {
	std::env::remove_var("DIPLONAT_CONSUL_NODE_NAME");
	let opts: HashMap<String, String> = HashMap::new();
	ConfigOpts::from_iter(opts).unwrap();
}

#[test]
fn ok_minimal_valid_options() {
	let opts = minimal_valid_options();
	let rt_config = ConfigOpts::from_iter(opts.clone()).unwrap();

	assert_eq!(
		&rt_config.consul.node_name, 
		opts.get(&"DIPLONAT_CONSUL_NODE_NAME".to_string()).unwrap()
	);
	assert_eq!(
		rt_config.consul.url, 
		CONSUL_URL.to_string()
	);
	assert!(rt_config.acme.is_none());
	assert!(rt_config.firewall.is_none());
	assert!(rt_config.igd.is_none());
	/*assert_eq!(
		rt_config.firewall.refresh_time,
		Duration::from_secs(REFRESH_TIME.into())
	);
	assert_eq!(
		&rt_config.igd.private_ip,
		opts.get(&"DIPLONAT_PRIVATE_IP".to_string()).unwrap()
	);
	assert_eq!(
		rt_config.igd.expiration_time,
		Duration::from_secs(EXPIRATION_TIME.into())
	);
	assert_eq!(
		rt_config.igd.refresh_time,
		Duration::from_secs(REFRESH_TIME.into())
	);*/
}

#[test]
#[should_panic]
fn err_invalid_igd_options() {
	let mut opts = minimal_valid_options();
	opts.insert("DIPLONAT_IGD_ENABLE".to_string(), "true".to_string());
	opts.insert("DIPLONAT_IGD_EXPIRATION_TIME".to_string(), "60".to_string());
	opts.insert("DIPLONAT_IGD_REFRESH_TIME".to_string(), "60".to_string());
	ConfigOpts::from_iter(opts).unwrap();
}

#[test]
fn ok_all_valid_options() {
	let opts = all_valid_options();
	let rt_config = ConfigOpts::from_iter(opts.clone()).unwrap();

	let firewall_refresh_time = Duration::from_secs(
		opts.get(&"DIPLONAT_FIREWALL_REFRESH_TIME".to_string()).unwrap()
			.parse::<u64>().unwrap()
			.into());
	let igd_expiration_time = Duration::from_secs(
		opts.get(&"DIPLONAT_IGD_EXPIRATION_TIME".to_string()).unwrap()
			.parse::<u64>().unwrap()
			.into());
	let igd_refresh_time = Duration::from_secs(
		opts.get(&"DIPLONAT_IGD_REFRESH_TIME".to_string()).unwrap()
			.parse::<u64>().unwrap()
			.into());

	assert_eq!(
		&rt_config.consul.node_name, 
		opts.get(&"DIPLONAT_CONSUL_NODE_NAME".to_string()).unwrap()
	);
	assert_eq!(
		&rt_config.consul.url, 
		opts.get(&"DIPLONAT_CONSUL_URL".to_string()).unwrap()
	);

	assert!(rt_config.acme.is_some());
	let acme = rt_config.acme.unwrap();
	assert_eq!(
		&acme.email,
		opts.get(&"DIPLONAT_ACME_EMAIL".to_string()).unwrap());

	assert!(rt_config.firewall.is_some());
	let firewall = rt_config.firewall.unwrap();
	assert_eq!(
		firewall.refresh_time,
		firewall_refresh_time
	);

	assert!(rt_config.igd.is_some());
	let igd = rt_config.igd.unwrap();
	assert_eq!(
		&igd.private_ip,
		opts.get(&"DIPLONAT_IGD_PRIVATE_IP".to_string()).unwrap()
	);
	assert_eq!(
		igd.expiration_time,
		igd_expiration_time
	);
	assert_eq!(
		igd.refresh_time,
		igd_refresh_time
	);
}