Skip to content

Commit

Permalink
Drop duplicative tests from src/tests.rs
Browse files Browse the repository at this point in the history
  • Loading branch information
dralley committed May 19, 2023
1 parent 6f5bec8 commit 7a0ecce
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 104 deletions.
103 changes: 103 additions & 0 deletions benches/bench.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
use std::error::Error;

use criterion::{self, criterion_group, criterion_main, Criterion};

use rpm::signature::pgp::{Signer, Verifier};
use rpm::{self, RPMPackage};

fn build_rpm(c: &mut Criterion) {
let mut group = c.benchmark_group("build_rpm");
let date1 = chrono::DateTime::parse_from_rfc2822("Wed, 19 April 2023 23:16:09 GMT");
let date2 = chrono::DateTime::parse_from_rfc2822("Wed, 19 April 2023 23:16:10 GMT");

group.bench_function("build_rpm", |b| {
b.iter(|| {
rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package")
.compression(rpm::CompressionType::Gzip)
.with_file(
"./test_assets/awesome.toml",
rpm::RPMFileOptions::new("/etc/awesome/config.toml").is_config(),
)
.unwrap()
// file mode is inherited from source file
.with_file(
"./test_assets/awesome.py",
rpm::RPMFileOptions::new("/usr/bin/awesome"),
)
.unwrap()
.with_file(
"./test_assets/awesome.toml",
// you can set a custom mode and custom user too
rpm::RPMFileOptions::new("/etc/awesome/second.toml")
.mode(0o100744)
.user("hugo"),
)
.unwrap()
.pre_install_script("echo preinst")
.add_changelog_entry("me", "was awesome, eh?", date1)
.add_changelog_entry("you", "yeah, it was", date2)
.requires(rpm::Dependency::any("wget"))
.vendor("corporation or individual")
.url("www.github.com/repo")
.vcs("git:repo=example_repo:branch=example_branch:sha=example_sha")
.build()
.unwrap();
})
});
group.finish();
}

fn parse_rpm(c: &mut Criterion) -> Result<(), Box<dyn Error>> {
let mut group = c.benchmark_group("parse_rpm");
let rpm_file = std::fs::read("test_assets/389-ds-base-devel-1.3.8.4-15.el7.x86_64.rpm")?;

group.bench_function("parse_rpm", |b| {
b.iter(|| {
RPMPackage::parse(&mut std::io::Cursor::new(&rpm_file)).unwrap();
})
});
group.finish();

Ok(())
}

fn verify_rpm(c: &mut Criterion) -> Result<(), Box<dyn Error>> {
let mut group = c.benchmark_group("verify_rpm");

let raw_pub_key = std::fs::read("test_assets/public_key.asc")?;
let pkg = rpm::RPMPackage::open("test_assets/ima_signed.rpm")?;
let verifier = Verifier::load_from_asc_bytes(&raw_pub_key).unwrap();

pkg.verify_signature(&verifier).unwrap();

group.bench_function("verify_rpm", |b| {
b.iter(|| pkg.verify_signature(&verifier).unwrap());
});
group.finish();

Ok(())
}

fn sign_rpm(c: &mut Criterion) -> Result<(), Box<dyn Error>> {
let mut group = c.benchmark_group("sign_rpm");

let raw_secret_key = std::fs::read("./test_assets/secret_key.asc")?;
group.bench_function("sign_rpm", |b| {
let mut pkg =
rpm::RPMPackage::open("test_assets/389-ds-base-devel-1.3.8.4-15.el7.x86_64.rpm")
.unwrap();

b.iter(|| {
criterion::black_box(
pkg.sign(Signer::load_from_asc_bytes(&raw_secret_key).unwrap())
.unwrap(),
);
})
});
group.finish();

Ok(())
}

criterion_group!(benches, build_rpm, parse_rpm, verify_rpm, sign_rpm);
criterion_main!(benches);
4 changes: 2 additions & 2 deletions src/rpm/package.rs
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,7 @@ impl RPMPackageMetadata {
})
}

// @todo: It's not very convenient to receive an Error when there's no compressor
#[inline]
pub fn get_payload_compressor(&self) -> Result<CompressionType, RPMError> {
let comp_str = self
Expand Down Expand Up @@ -699,8 +700,7 @@ impl RPMPackageMetadata {

/// The digest algorithm used per file.
///
/// Note that this is not necessarily the same as the digest
/// used for headers.
/// Note that this is not necessarily the same as the digest used for headers.
pub fn get_file_digest_algorithm(&self) -> Result<DigestAlgorithm, RPMError> {
self.header
.get_entry_data_as_u32(IndexTag::RPMTAG_FILEDIGESTALGO)
Expand Down
101 changes: 2 additions & 99 deletions src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,51 +8,8 @@ fn cargo_manifest_dir() -> std::path::PathBuf {
std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))
}

#[test]
fn test_rpm_builder() -> Result<(), Box<dyn std::error::Error>> {
use chrono::TimeZone;

let mut buff = std::io::Cursor::new(Vec::<u8>::new());

let pkg = rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package")
.compression(rpm::CompressionType::Gzip)
.with_file(
"Cargo.toml",
RPMFileOptions::new("/etc/awesome/config.toml").is_config(),
)?
// file mode is inherited from source file
.with_file("Cargo.toml", RPMFileOptions::new("/usr/bin/awesome"))?
.with_file(
"Cargo.toml",
// you can set a custom mode and custom user too
RPMFileOptions::new("/etc/awesome/second.toml")
.mode(0o100744)
.user("hugo"),
)?
.pre_install_script("echo preinst")
.add_changelog_entry(
"me",
"was awesome, eh?",
chrono::Utc.timestamp_opt(1681411811, 0).unwrap(),
)
.add_changelog_entry(
"you",
"yeah, it was",
chrono::DateTime::parse_from_rfc3339("1996-12-19T16:39:57-08:00").unwrap(),
)
.requires(Dependency::any("wget"))
.vendor("dummy vendor")
.url("dummy url")
.vcs("dummy vcs")
.build()?;

pkg.write(&mut buff)?;

pkg.verify_digests()?;

Ok(())
}

// Currently only testing header internal details which we can't do from the integration tests
// Once we have enough API surface (or a way to test total equality) we can ditch these
#[test]
fn test_rpm_header() -> Result<(), Box<dyn std::error::Error>> {
let rpm_file_path = rpm_389_ds_file_path();
Expand All @@ -63,60 +20,6 @@ fn test_rpm_header() -> Result<(), Box<dyn std::error::Error>> {
assert_eq!(metadata.signature.index_entries[0].num_items, 16);
assert_eq!(metadata.signature.index_header.data_section_size, 1156);

assert_eq!(package.metadata.get_name().unwrap(), "389-ds-base-devel");
assert!(package.metadata.get_epoch().is_err());
assert_eq!(package.metadata.get_version().unwrap(), "1.3.8.4");
assert_eq!(package.metadata.get_release().unwrap(), "15.el7");
assert_eq!(package.metadata.get_arch().unwrap(), "x86_64");

assert_eq!(
package.metadata.get_url().unwrap(),
"https://www.port389.org/"
);

// TODO: vcs
// assert_eq!(
// package.metadata.get_vcs().unwrap(),
// "git://pkgs.fedoraproject.org/389-ds-base.git"
// );

assert_eq!(
package.metadata.get_packager().unwrap(),
"CentOS BuildSystem <http://bugs.centos.org>"
);
assert_eq!(package.metadata.get_license().unwrap(), "GPLv3+");
assert_eq!(package.metadata.get_vendor().unwrap(), "CentOS");

// TODO: internationalized strings
// assert_eq!(
// package.metadata.get_summary().unwrap(),
// "Development libraries for 389 Directory Server"
// );
// assert_eq!(
// package.metadata.get_description().unwrap(),
// "Development Libraries and headers for the 389 Directory Server base package."
// );
// assert_eq!(
// package.metadata.get_group().unwrap(),
// "Development/Libraries"
// );
assert_eq!(
package.metadata.get_source_rpm().unwrap(),
"389-ds-base-1.3.8.4-15.el7.src.rpm"
);
assert_eq!(
package.metadata.get_build_host().unwrap(),
"x86-01.bsys.centos.org"
);
assert_eq!(package.metadata.get_build_time().unwrap(), 1540945151);
assert_eq!(package.metadata.get_installed_size().unwrap(), 503853);
assert_eq!(
package.metadata.get_payload_compressor().unwrap(),
CompressionType::Xz
);

assert_eq!(package.metadata.is_source_package(), false);

let expected_data = vec![
(
16,
Expand Down
18 changes: 15 additions & 3 deletions tests/building.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ fn test_empty_source_package_equivalent() -> Result<(), Box<dyn std::error::Erro
/// Build an RPM using many features of RPM and (eventually) compare it to one built by rpmbuild
#[test]
fn test_rpm_builder() -> Result<(), Box<dyn std::error::Error>> {
let mut buff = Vec::<u8>::new();
use chrono::TimeZone;

let mut buff = std::io::Cursor::new(Vec::<u8>::new());

let pkg = rpm::RPMBuilder::new("test", "1.0.0", "MIT", "x86_64", "some awesome package")
.compression(rpm::CompressionType::Gzip)
Expand All @@ -71,8 +73,16 @@ fn test_rpm_builder() -> Result<(), Box<dyn std::error::Error>> {
.user("hugo"),
)?
.pre_install_script("echo preinst")
.add_changelog_entry("me", "was awesome, eh?", 123123123)
.add_changelog_entry("you", "yeah, it was", 12312312)
.add_changelog_entry(
"me",
"was awesome, eh?",
chrono::Utc.timestamp_opt(1681411811, 0).unwrap(),
)
.add_changelog_entry(
"you",
"yeah, it was",
chrono::DateTime::parse_from_rfc3339("1996-12-19T16:39:57-08:00").unwrap(),
)
.requires(Dependency::any("wget"))
.vendor("dummy vendor")
.url("dummy url")
Expand All @@ -81,6 +91,8 @@ fn test_rpm_builder() -> Result<(), Box<dyn std::error::Error>> {

pkg.write(&mut buff)?;

pkg.verify_digests()?;

Ok(())
}

Expand Down
3 changes: 3 additions & 0 deletions tests/parsing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,9 @@ fn test_empty_package() -> Result<(), Box<dyn std::error::Error>> {
assert_eq!(metadata.get_build_host().unwrap(), "localhost");
assert_eq!(metadata.get_build_time().unwrap(), 1681068559);

assert_eq!(metadata.get_payload_compressor().unwrap(), CompressionType::Xz);
assert_eq!(metadata.get_installed_size().unwrap(), 503853);

assert!(matches!(
metadata.get_vendor(),
Err(RPMError::TagNotFound(_))
Expand Down

0 comments on commit 7a0ecce

Please sign in to comment.