From 8887a775f5c46551f8d9ea0f2197d129008eabf1 Mon Sep 17 00:00:00 2001 From: namilsk Date: Wed, 18 Mar 2026 21:21:21 +0300 Subject: Written geosite protobuf parser and tests 4 it --- tests/v2ray_geosite.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/v2ray_geosite.rs (limited to 'tests') 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> { + 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> { + 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()); +} -- cgit v1.2.3