diff options
| author | namilsk <namilsk@namilsk.tech> | 2026-03-18 21:21:21 +0300 |
|---|---|---|
| committer | namilsk <namilsk@namilsk.tech> | 2026-03-18 21:21:21 +0300 |
| commit | 8887a775f5c46551f8d9ea0f2197d129008eabf1 (patch) | |
| tree | c37f9808af3326d8d0adf873c756bae0ebe6257f /tests | |
| parent | da8e70f2e3c841796c122ca90617d74cb044b763 (diff) | |
Written geosite protobuf parser and tests 4 it
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/v2ray_geosite.rs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/v2ray_geosite.rs b/tests/v2ray_geosite.rs new file mode 100644 index 0000000..f4ea664 --- /dev/null +++ b/tests/v2ray_geosite.rs @@ -0,0 +1,68 @@ +use nsc::geoparsers::v2ray::parsing::GeoSiteService; +use nsc::geoparsers::v2ray::types::Domain; +use std::fs; +use std::path::PathBuf; + +fn download_geosite() -> Result<PathBuf, Box<dyn std::error::Error>> { + let tmp_dir = std::env::temp_dir().join("seccontrol_test"); + fs::create_dir_all(&tmp_dir)?; + + let geosite_path = tmp_dir.join("geosite.dat"); + + if !geosite_path.exists() { + // Use v2fly domain-list-community which has standard protobuf format + let url = "https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat"; + let response = ureq::get(url).call()?; + let mut file = fs::File::create(&geosite_path)?; + let mut reader = response.into_reader(); + std::io::copy(&mut reader, &mut file)?; + } + + Ok(geosite_path) +} + +fn get_geosite_service() -> Result<GeoSiteService, Box<dyn std::error::Error>> { + let geosite_path = download_geosite()?; + let service = GeoSiteService::new(geosite_path.to_str().unwrap())?; + Ok(service) +} + +#[test] +fn geosite_service_creation() { + let service = get_geosite_service(); + assert!(service.is_ok(), "Failed to create GeoSiteService: {:?}", service.err()); +} + +#[test] +fn lookup_existing_domain() { + let service = get_geosite_service().expect("Failed to create service"); + + assert!(!service.is_empty(), "Service should have entries"); + println!("Loaded {} GeoSite entries", service.len()); +} + +#[test] +fn lookup_nonexistent_domain() { + let service = get_geosite_service().expect("Failed to create service"); + let domain = Domain { + r#type: nsc::geoparsers::v2ray::types::domain::Type::Full as i32, + value: "nfaklsfjlasfvjkcnjnasxcjsas-not-existing-domain.com".to_string(), + attribute: vec![], + }; + + let result = service.lookup(domain.value.as_str()); + assert!(result.is_none(), "Should return none for not existing domain"); + println!("{:?}", result); +} + +#[test] +fn geosite_list_not_empty() { + let service = get_geosite_service().expect("Failed to create service"); + + assert!( + !service.is_empty(), + "GeoSiteList should not be empty" + ); + + println!("Loaded {} GeoSite entries", service.len()); +} |
