]> git.proxmox.com Git - proxmox-apt.git/blobdiff - tests/repositories.rs
This repository was moved into the `proxmox.git` repository
[proxmox-apt.git] / tests / repositories.rs
diff --git a/tests/repositories.rs b/tests/repositories.rs
deleted file mode 100644 (file)
index f6dc290..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-use std::path::PathBuf;
-
-use anyhow::{bail, format_err, Error};
-
-use proxmox_apt::config::APTConfig;
-
-use proxmox_apt::repositories::{
-    check_repositories, get_current_release_codename, standard_repositories, APTRepositoryFile,
-    APTRepositoryHandle, APTRepositoryInfo, APTStandardRepository, DebianCodename,
-};
-
-#[test]
-fn test_parse_write() -> Result<(), Error> {
-    test_parse_write_dir("sources.list.d")?;
-    test_parse_write_dir("sources.list.d.expected")?; // check if it's idempotent
-
-    Ok(())
-}
-
-fn test_parse_write_dir(read_dir: &str) -> Result<(), Error> {
-    let test_dir = std::env::current_dir()?.join("tests");
-    let read_dir = test_dir.join(read_dir);
-    let write_dir = test_dir.join("sources.list.d.actual");
-    let expected_dir = test_dir.join("sources.list.d.expected");
-
-    if write_dir.is_dir() {
-        std::fs::remove_dir_all(&write_dir)
-            .map_err(|err| format_err!("unable to remove dir {:?} - {}", write_dir, err))?;
-    }
-
-    std::fs::create_dir_all(&write_dir)
-        .map_err(|err| format_err!("unable to create dir {:?} - {}", write_dir, err))?;
-
-    let mut files = vec![];
-    let mut errors = vec![];
-
-    for entry in std::fs::read_dir(read_dir)? {
-        let path = entry?.path();
-
-        match APTRepositoryFile::new(&path)? {
-            Some(mut file) => match file.parse() {
-                Ok(()) => files.push(file),
-                Err(err) => errors.push(err),
-            },
-            None => bail!("unexpected None for '{:?}'", path),
-        }
-    }
-
-    assert!(errors.is_empty());
-
-    for file in files.iter_mut() {
-        let path = match &file.path {
-            Some(path) => path,
-            None => continue,
-        };
-        let path = PathBuf::from(path);
-        let new_path = write_dir.join(path.file_name().unwrap());
-        file.path = Some(new_path.into_os_string().into_string().unwrap());
-        file.digest = None;
-        file.write()?;
-    }
-
-    let mut expected_count = 0;
-
-    for entry in std::fs::read_dir(expected_dir)? {
-        expected_count += 1;
-
-        let expected_path = entry?.path();
-        let actual_path = write_dir.join(expected_path.file_name().unwrap());
-
-        let expected_contents = std::fs::read(&expected_path)
-            .map_err(|err| format_err!("unable to read {:?} - {}", expected_path, err))?;
-
-        let actual_contents = std::fs::read(&actual_path)
-            .map_err(|err| format_err!("unable to read {:?} - {}", actual_path, err))?;
-
-        assert_eq!(
-            expected_contents, actual_contents,
-            "Use\n\ndiff {:?} {:?}\n\nif you're not fluent in byte decimals",
-            expected_path, actual_path
-        );
-    }
-
-    let actual_count = std::fs::read_dir(write_dir)?.count();
-
-    assert_eq!(expected_count, actual_count);
-
-    Ok(())
-}
-
-#[test]
-fn test_digest() -> Result<(), Error> {
-    let test_dir = std::env::current_dir()?.join("tests");
-    let read_dir = test_dir.join("sources.list.d");
-    let write_dir = test_dir.join("sources.list.d.digest");
-
-    if write_dir.is_dir() {
-        std::fs::remove_dir_all(&write_dir)
-            .map_err(|err| format_err!("unable to remove dir {:?} - {}", write_dir, err))?;
-    }
-
-    std::fs::create_dir_all(&write_dir)
-        .map_err(|err| format_err!("unable to create dir {:?} - {}", write_dir, err))?;
-
-    let path = read_dir.join("standard.list");
-
-    let mut file = APTRepositoryFile::new(&path)?.unwrap();
-    file.parse()?;
-
-    let new_path = write_dir.join(path.file_name().unwrap());
-    file.path = Some(new_path.clone().into_os_string().into_string().unwrap());
-
-    let old_digest = file.digest.unwrap();
-
-    // file does not exist yet...
-    assert!(file.read_with_digest().is_err());
-    assert!(file.write().is_err());
-
-    // ...but it should work if there's no digest
-    file.digest = None;
-    file.write()?;
-
-    // overwrite with old contents...
-    std::fs::copy(path, new_path)?;
-
-    // modify the repo
-    let mut repo = file.repositories.first_mut().unwrap();
-    repo.enabled = !repo.enabled;
-
-    // ...then it should work
-    file.digest = Some(old_digest);
-    file.write()?;
-
-    // expect a different digest, because the repo was modified
-    let (_, new_digest) = file.read_with_digest()?;
-    assert_ne!(old_digest, new_digest);
-
-    assert!(file.write().is_err());
-
-    Ok(())
-}
-
-#[test]
-fn test_empty_write() -> Result<(), Error> {
-    let test_dir = std::env::current_dir()?.join("tests");
-    let read_dir = test_dir.join("sources.list.d");
-    let write_dir = test_dir.join("sources.list.d.remove");
-
-    if write_dir.is_dir() {
-        std::fs::remove_dir_all(&write_dir)
-            .map_err(|err| format_err!("unable to remove dir {:?} - {}", write_dir, err))?;
-    }
-
-    std::fs::create_dir_all(&write_dir)
-        .map_err(|err| format_err!("unable to create dir {:?} - {}", write_dir, err))?;
-
-    let path = read_dir.join("standard.list");
-
-    let mut file = APTRepositoryFile::new(&path)?.unwrap();
-    file.parse()?;
-
-    let new_path = write_dir.join(path.file_name().unwrap());
-    file.path = Some(new_path.into_os_string().into_string().unwrap());
-
-    file.digest = None;
-
-    file.write()?;
-
-    assert!(file.exists());
-
-    file.repositories.clear();
-
-    file.write()?;
-
-    assert!(!file.exists());
-
-    Ok(())
-}
-
-#[test]
-fn test_check_repositories() -> Result<(), Error> {
-    let test_dir = std::env::current_dir()?.join("tests");
-    let read_dir = test_dir.join("sources.list.d");
-
-    proxmox_apt::config::init(APTConfig::new(
-        Some(&test_dir.into_os_string().into_string().unwrap()),
-        None,
-    ));
-
-    let absolute_suite_list = read_dir.join("absolute_suite.list");
-    let mut file = APTRepositoryFile::new(&absolute_suite_list)?.unwrap();
-    file.parse()?;
-
-    let infos = check_repositories(&[file], DebianCodename::Bullseye);
-
-    assert!(infos.is_empty());
-    let pve_list = read_dir.join("pve.list");
-    let mut file = APTRepositoryFile::new(&pve_list)?.unwrap();
-    file.parse()?;
-
-    let path_string = pve_list.into_os_string().into_string().unwrap();
-
-    let origins = [
-        "Debian", "Debian", "Proxmox", "Proxmox", "Proxmox", "Debian",
-    ];
-
-    let mut expected_infos = vec![];
-    for (n, origin) in origins.into_iter().enumerate() {
-        expected_infos.push(APTRepositoryInfo {
-            path: path_string.clone(),
-            index: n,
-            property: None,
-            kind: "origin".to_string(),
-            message: origin.to_string(),
-        });
-    }
-    expected_infos.sort();
-
-    let mut infos = check_repositories(&[file], DebianCodename::Bullseye);
-    infos.sort();
-
-    assert_eq!(infos, expected_infos);
-
-    let bad_sources = read_dir.join("bad.sources");
-    let mut file = APTRepositoryFile::new(&bad_sources)?.unwrap();
-    file.parse()?;
-
-    let path_string = bad_sources.into_os_string().into_string().unwrap();
-
-    let mut expected_infos = vec![
-        APTRepositoryInfo {
-            path: path_string.clone(),
-            index: 0,
-            property: Some("Suites".to_string()),
-            kind: "warning".to_string(),
-            message: "suite 'sid' should not be used in production!".to_string(),
-        },
-        APTRepositoryInfo {
-            path: path_string.clone(),
-            index: 1,
-            property: Some("Suites".to_string()),
-            kind: "warning".to_string(),
-            message: "old suite 'lenny' configured!".to_string(),
-        },
-        APTRepositoryInfo {
-            path: path_string.clone(),
-            index: 2,
-            property: Some("Suites".to_string()),
-            kind: "warning".to_string(),
-            message: "old suite 'stretch' configured!".to_string(),
-        },
-        APTRepositoryInfo {
-            path: path_string.clone(),
-            index: 3,
-            property: Some("Suites".to_string()),
-            kind: "warning".to_string(),
-            message: "use the name of the stable distribution instead of 'stable'!".to_string(),
-        },
-        APTRepositoryInfo {
-            path: path_string.clone(),
-            index: 4,
-            property: Some("Suites".to_string()),
-            kind: "ignore-pre-upgrade-warning".to_string(),
-            message: "suite 'bookworm' should not be used in production!".to_string(),
-        },
-        APTRepositoryInfo {
-            path: path_string.clone(),
-            index: 5,
-            property: Some("Suites".to_string()),
-            kind: "warning".to_string(),
-            message: "suite 'testing' should not be used in production!".to_string(),
-        },
-    ];
-    for n in 0..=5 {
-        expected_infos.push(APTRepositoryInfo {
-            path: path_string.clone(),
-            index: n,
-            property: None,
-            kind: "origin".to_string(),
-            message: "Debian".to_string(),
-        });
-    }
-    expected_infos.sort();
-
-    let mut infos = check_repositories(&[file], DebianCodename::Bullseye);
-    infos.sort();
-
-    assert_eq!(infos, expected_infos);
-
-    let bad_security = read_dir.join("bad-security.list");
-    let mut file = APTRepositoryFile::new(&bad_security)?.unwrap();
-    file.parse()?;
-
-    let path_string = bad_security.into_os_string().into_string().unwrap();
-
-    let mut expected_infos = vec![];
-    for n in 0..=1 {
-        expected_infos.push(APTRepositoryInfo {
-            path: path_string.clone(),
-            index: n,
-            property: Some("Suites".to_string()),
-            kind: "warning".to_string(),
-            message: "expected suite 'bullseye-security'".to_string(),
-        });
-    }
-    for n in 0..=1 {
-        expected_infos.push(APTRepositoryInfo {
-            path: path_string.clone(),
-            index: n,
-            property: None,
-            kind: "origin".to_string(),
-            message: "Debian".to_string(),
-        });
-    }
-    expected_infos.sort();
-
-    let mut infos = check_repositories(&[file], DebianCodename::Bullseye);
-    infos.sort();
-
-    assert_eq!(infos, expected_infos);
-    Ok(())
-}
-
-#[test]
-fn test_get_cached_origin() -> Result<(), Error> {
-    let test_dir = std::env::current_dir()?.join("tests");
-    let read_dir = test_dir.join("sources.list.d");
-
-    proxmox_apt::config::init(APTConfig::new(
-        Some(&test_dir.into_os_string().into_string().unwrap()),
-        None,
-    ));
-
-    let pve_list = read_dir.join("pve.list");
-    let mut file = APTRepositoryFile::new(&pve_list)?.unwrap();
-    file.parse()?;
-
-    let origins = [
-        Some("Debian".to_string()),
-        Some("Debian".to_string()),
-        Some("Proxmox".to_string()),
-        None, // no cache file exists
-        None, // no cache file exists
-        Some("Debian".to_string()),
-    ];
-
-    assert_eq!(file.repositories.len(), origins.len());
-
-    for (n, repo) in file.repositories.iter().enumerate() {
-        assert_eq!(repo.get_cached_origin()?, origins[n]);
-    }
-
-    Ok(())
-}
-
-#[test]
-fn test_standard_repositories() -> Result<(), Error> {
-    let test_dir = std::env::current_dir()?.join("tests");
-    let read_dir = test_dir.join("sources.list.d");
-
-    let mut expected = vec![
-        APTStandardRepository::from(APTRepositoryHandle::Enterprise),
-        APTStandardRepository::from(APTRepositoryHandle::NoSubscription),
-        APTStandardRepository::from(APTRepositoryHandle::Test),
-        APTStandardRepository::from(APTRepositoryHandle::CephQuincy),
-        APTStandardRepository::from(APTRepositoryHandle::CephQuincyTest),
-        APTStandardRepository::from(APTRepositoryHandle::CephPacific),
-        APTStandardRepository::from(APTRepositoryHandle::CephPacificTest),
-        APTStandardRepository::from(APTRepositoryHandle::CephOctopus),
-        APTStandardRepository::from(APTRepositoryHandle::CephOctopusTest),
-    ];
-
-    let absolute_suite_list = read_dir.join("absolute_suite.list");
-    let mut file = APTRepositoryFile::new(&absolute_suite_list)?.unwrap();
-    file.parse()?;
-
-    let std_repos = standard_repositories(&[file], "pve", DebianCodename::Bullseye);
-
-    assert_eq!(std_repos, expected);
-
-    let pve_list = read_dir.join("pve.list");
-    let mut file = APTRepositoryFile::new(&pve_list)?.unwrap();
-    file.parse()?;
-
-    let file_vec = vec![file];
-
-    let std_repos = standard_repositories(&file_vec, "pbs", DebianCodename::Bullseye);
-
-    assert_eq!(&std_repos, &expected[0..=2]);
-
-    expected[0].status = Some(false);
-    expected[1].status = Some(true);
-
-    let std_repos = standard_repositories(&file_vec, "pve", DebianCodename::Bullseye);
-
-    assert_eq!(std_repos, expected);
-
-    let pve_alt_list = read_dir.join("pve-alt.list");
-    let mut file = APTRepositoryFile::new(&pve_alt_list)?.unwrap();
-    file.parse()?;
-
-    let file_vec = vec![file];
-
-    expected[0].status = Some(true);
-    expected[1].status = Some(true);
-    expected[2].status = Some(false);
-
-    let std_repos = standard_repositories(&file_vec, "pve", DebianCodename::Bullseye);
-
-    assert_eq!(std_repos, expected);
-
-    Ok(())
-}
-
-#[test]
-fn test_get_current_release_codename() -> Result<(), Error> {
-    let codename = get_current_release_codename()?;
-
-    assert!(codename == DebianCodename::Bullseye);
-
-    Ok(())
-}