()
| 905 | // Ensure that the metadata iterator short-circuits after finding all metadata files. |
| 906 | #[test] |
| 907 | fn package_metadata_iterator() -> TestResult { |
| 908 | init_logger(); |
| 909 | |
| 910 | let temp_dir = TempDir::new()?; |
| 911 | let package = create_package( |
| 912 | &temp_dir, |
| 913 | &InputDirConfig { |
| 914 | build_info: true, |
| 915 | data_files: true, |
| 916 | mtree: true, |
| 917 | package_info: true, |
| 918 | scriptlet: true, |
| 919 | }, |
| 920 | CompressionSettings::Xz { |
| 921 | compression_level: Default::default(), |
| 922 | }, |
| 923 | )?; |
| 924 | |
| 925 | let mut reader: PackageReader = package.clone().try_into()?; |
| 926 | let mut metadata_entries = reader.metadata_entries()?; |
| 927 | |
| 928 | assert!(matches!( |
| 929 | metadata_entries.next(), |
| 930 | Some(Ok(MetadataEntry::BuildInfo(_))) |
| 931 | )); |
| 932 | assert!(matches!( |
| 933 | metadata_entries.next(), |
| 934 | Some(Ok(MetadataEntry::Mtree(_))) |
| 935 | )); |
| 936 | assert!(matches!( |
| 937 | metadata_entries.next(), |
| 938 | Some(Ok(MetadataEntry::PackageInfo(_))) |
| 939 | )); |
| 940 | // Make sure that the iterator no longer returns any values. |
| 941 | // This should not advance the iterator, as all metadata files have been found. |
| 942 | assert!(metadata_entries.next().is_none()); |
| 943 | |
| 944 | // Now test that the short-circuit of the iterator actually worked. |
| 945 | // Get the underlying raw Entries iterator and make sure that this non-filtering iterator still |
| 946 | // produces data files. |
| 947 | let mut inner_iter = metadata_entries.into_inner().into_inner(); |
| 948 | assert!( |
| 949 | inner_iter.next().is_some(), |
| 950 | "Expected the non-filtering iterator to still return a value." |
| 951 | ); |
| 952 | |
| 953 | Ok(()) |
| 954 | } |
| 955 | |
| 956 | // Small helper function to assert that an entry is a metadata entry and then returns |
| 957 | // that entry. |
nothing calls this directly
no test coverage detected