From 301a748d4f2bb90c34d0c4f2cb8a518d91dfbd84 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Sun, 8 Sep 2024 16:51:16 +0200 Subject: [PATCH 1/9] fix: properly finish progress bar in Repository::get_snapshot_group --- crates/core/src/commands/snapshots.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/core/src/commands/snapshots.rs b/crates/core/src/commands/snapshots.rs index 37b11e0c..e57d5f35 100644 --- a/crates/core/src/commands/snapshots.rs +++ b/crates/core/src/commands/snapshots.rs @@ -8,6 +8,7 @@ use crate::{ SnapshotFile, }, repository::{Open, Repository}, + Progress, }; /// Get the snapshots from the repository. @@ -56,6 +57,7 @@ pub(crate) fn get_snapshot_group( vec![item] } }; + p.finish(); Ok(groups) } From 6ee51e440b328106a761b5cc19273c973b367dd1 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Mon, 9 Sep 2024 11:57:37 +0200 Subject: [PATCH 2/9] add integration tests --- crates/core/tests/integration.rs | 76 +++++++--- .../integration__backup-tar-groups-nix.snap | 136 ++++++++++++++++++ ...ration__backup-tar-matching-snaps-nix.snap | 47 ++++++ ...gration__backup-tar-summary-third-nix.snap | 44 ++++++ 4 files changed, 284 insertions(+), 19 deletions(-) create mode 100644 crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap create mode 100644 crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap create mode 100644 crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap diff --git a/crates/core/tests/integration.rs b/crates/core/tests/integration.rs index 6acc2e3e..fb11d265 100644 --- a/crates/core/tests/integration.rs +++ b/crates/core/tests/integration.rs @@ -36,7 +36,8 @@ use rstest::{fixture, rstest}; use rustic_core::{ repofile::SnapshotFile, BackupOptions, CheckOptions, ConfigOptions, FindMatches, FindNode, FullIndex, IndexedFull, IndexedStatus, KeyOptions, LimitOption, LsOptions, NoProgressBars, - OpenStatus, PathList, Repository, RepositoryBackends, RepositoryOptions, RusticResult, + OpenStatus, ParentOptions, PathList, Repository, RepositoryBackends, RepositoryOptions, + RusticResult, SnapshotGroupCriterion, SnapshotOptions, StringList, }; use rustic_core::{ repofile::{Metadata, Node}, @@ -101,33 +102,33 @@ fn handle_option(val: Content, _: ContentPath<'_>) -> String { fn insta_summary_redaction() -> Settings { let mut settings = Settings::clone_current(); - settings.add_redaction(".tree", "[tree_id]"); - settings.add_dynamic_redaction(".program_version", |val, _| { + settings.add_redaction(".**.tree", "[tree_id]"); + settings.add_dynamic_redaction(".**.program_version", |val, _| { val.resolve_inner() .as_str() .map_or("[program_version]".to_string(), |v| { v.replace(env!("CARGO_PKG_VERSION"), "[rustic_core_version]") }) }); - settings.add_redaction(".time", "[time]"); - settings.add_dynamic_redaction(".parent", handle_option); - settings.add_redaction(".tags", "[tags]"); - settings.add_redaction(".id", "[id]"); - settings.add_redaction(".summary.backup_start", "[backup_start]"); - settings.add_redaction(".summary.backup_end", "[backup_end]"); - settings.add_redaction(".summary.backup_duration", "[backup_duration]"); - settings.add_redaction(".summary.total_duration", "[total_duration]"); - settings.add_redaction(".summary.data_added", "[data_added]"); - settings.add_redaction(".summary.data_added_packed", "[data_added_packed]"); + settings.add_redaction(".**.time", "[time]"); + settings.add_dynamic_redaction(".**.parent", handle_option); + settings.add_redaction(".**.tags", "[tags]"); + settings.add_redaction(".**.id", "[id]"); + settings.add_redaction(".**.summary.backup_start", "[backup_start]"); + settings.add_redaction(".**.summary.backup_end", "[backup_end]"); + settings.add_redaction(".**.summary.backup_duration", "[backup_duration]"); + settings.add_redaction(".**.summary.total_duration", "[total_duration]"); + settings.add_redaction(".**.summary.data_added", "[data_added]"); + settings.add_redaction(".**.summary.data_added_packed", "[data_added_packed]"); settings.add_redaction( - ".summary.total_dirsize_processed", + ".**.summary.total_dirsize_processed", "[total_dirsize_processed]", ); settings.add_redaction( - ".summary.data_added_trees_packed", + ".**.summary.data_added_trees_packed", "[data_added_trees_packed]", ); - settings.add_redaction(".summary.data_added_trees", "[data_added_trees]"); + settings.add_redaction(".**.summary.data_added_trees", "[data_added_trees]"); settings } @@ -230,14 +231,36 @@ fn test_backup_with_tar_gz_passes( assert_eq!(second_snapshot.parent, Some(first_snapshot.id)); assert_eq!(first_snapshot.tree, second_snapshot.tree); + // pack files should be unchanged + let packs2: Vec<_> = repo.list(rustic_core::FileType::Pack)?.collect(); + assert_eq!(packs1, packs2); + + // re-read index + let repo = repo.to_indexed_ids()?; + // third backup with tags and explicitely given parent + let snap = SnapshotOptions::default() + .tag([StringList::from_str("a,b")?]) + .to_snapshot()?; + let opts = opts.parent_opts(ParentOptions::default().parent(second_snapshot.id.to_string())); + let third_snapshot = repo.backup(&opts, paths, snap)?; + + insta_summary_redaction.bind(|| { + assert_with_win("backup-tar-summary-third", &second_snapshot); + }); + assert_eq!(third_snapshot.parent, Some(second_snapshot.id)); + assert_eq!(third_snapshot.tree, second_snapshot.tree); + // get all snapshots and check them let mut all_snapshots = repo.get_all_snapshots()?; all_snapshots.sort_unstable(); - assert_eq!(vec![first_snapshot, second_snapshot], all_snapshots); + assert_eq!( + vec![first_snapshot, second_snapshot, third_snapshot], + all_snapshots + ); // pack files should be unchanged - let packs2: Vec<_> = repo.list(rustic_core::FileType::Pack)?.collect(); - assert_eq!(packs1, packs2); + let packs3: Vec<_> = repo.list(rustic_core::FileType::Pack)?.collect(); + assert_eq!(packs1, packs3); // Check if snapshots can be retrieved let mut ids: Vec<_> = all_snapshots.iter().map(|sn| sn.id.to_string()).collect(); @@ -250,6 +273,21 @@ fn test_backup_with_tar_gz_passes( let snaps = repo.get_snapshots(&ids)?; assert_eq!(snaps, all_snapshots); + // get snapshot group + let group_by = SnapshotGroupCriterion::new().tags(true); + let groups = repo.get_snapshot_group(&[], group_by, |_| true)?; + + insta_summary_redaction.bind(|| { + assert_with_win("backup-tar-groups", &groups); + }); + + // filter snapshots by tag + let filter = |snap: &SnapshotFile| snap.tags.contains("a"); + let snaps = repo.get_matching_snapshots(filter)?; + insta_summary_redaction.bind(|| { + assert_with_win("backup-tar-matching-snaps", &snaps); + }); + Ok(()) } diff --git a/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap new file mode 100644 index 00000000..69c16d18 --- /dev/null +++ b/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap @@ -0,0 +1,136 @@ +--- +source: crates/core/tests/integration.rs +expression: snap +--- +[ + (SnapshotGroup( + tags: "[tags]", + ), [ + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "", + username: "", + uid: 0, + gid: 0, + tags: "[tags]", + original: Some(Id("8e73284dc2932e02d98b731b01f2bb869b6beb6917d329538589397da96f4516")), + summary: Some(SnapshotSummary( + files_new: 73, + files_changed: 0, + files_unmodified: 0, + total_files_processed: 73, + total_bytes_processed: 1125674, + dirs_new: 6, + dirs_changed: 0, + dirs_unmodified: 0, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 70, + tree_blobs: 6, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 1125653, + data_added_files_packed: 78740, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "", + username: "", + uid: 0, + gid: 0, + tags: "[tags]", + original: Some(Id("f35e73aacc988931fb4ba18bd556e2eace332e4c5285bd9e9cf99323733a950b")), + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125682, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), + ]), + (SnapshotGroup( + tags: "[tags]", + ), [ + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "latitude", + username: "", + uid: 0, + gid: 0, + tags: "[tags]", + original: Some(Id("89a20e891f73f1943ab0f043611a6302fda8a1dc1db156baceff975c97993def")), + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125682, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "/home/alex-dev/rust/rustic_core/target/debug/deps/integration-17052277a5b56351 --color=auto", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), + ]), +] diff --git a/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap new file mode 100644 index 00000000..7dc17c31 --- /dev/null +++ b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap @@ -0,0 +1,47 @@ +--- +source: crates/core/tests/integration.rs +expression: snap +--- +[ + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "latitude", + username: "", + uid: 0, + gid: 0, + tags: "[tags]", + original: Some(Id("89a20e891f73f1943ab0f043611a6302fda8a1dc1db156baceff975c97993def")), + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125682, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "/home/alex-dev/rust/rustic_core/target/debug/deps/integration-17052277a5b56351 --color=auto", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), +] diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap new file mode 100644 index 00000000..90fe910e --- /dev/null +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap @@ -0,0 +1,44 @@ +--- +source: crates/core/tests/integration.rs +expression: snap +--- +SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "", + username: "", + uid: 0, + gid: 0, + tags: "[tags]", + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125682, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", +) From 833aef2488d4fec64cb4b0aca560f8218f6659fa Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Mon, 9 Sep 2024 21:26:32 +0200 Subject: [PATCH 3/9] modify snapshotfile redactions; sort group before testing it --- crates/core/tests/integration.rs | 28 +++++++++++-------- .../integration__backup-tar-groups-nix.snap | 22 +++++++++------ ...ration__backup-tar-matching-snaps-nix.snap | 7 +++-- ...gration__backup-tar-summary-first-nix.snap | 2 +- ...ration__backup-tar-summary-second-nix.snap | 2 +- ...gration__backup-tar-summary-third-nix.snap | 2 +- ...gration__dryrun-tar-summary-first-nix.snap | 2 +- ...ration__dryrun-tar-summary-second-nix.snap | 2 +- 8 files changed, 40 insertions(+), 27 deletions(-) diff --git a/crates/core/tests/integration.rs b/crates/core/tests/integration.rs index fb11d265..6961f52e 100644 --- a/crates/core/tests/integration.rs +++ b/crates/core/tests/integration.rs @@ -99,7 +99,7 @@ fn handle_option(val: Content, _: ContentPath<'_>) -> String { } #[fixture] -fn insta_summary_redaction() -> Settings { +fn insta_snapshotfile_redaction() -> Settings { let mut settings = Settings::clone_current(); settings.add_redaction(".**.tree", "[tree_id]"); @@ -112,8 +112,8 @@ fn insta_summary_redaction() -> Settings { }); settings.add_redaction(".**.time", "[time]"); settings.add_dynamic_redaction(".**.parent", handle_option); - settings.add_redaction(".**.tags", "[tags]"); settings.add_redaction(".**.id", "[id]"); + settings.add_redaction(".**.original", "[original]"); settings.add_redaction(".**.summary.backup_start", "[backup_start]"); settings.add_redaction(".**.summary.backup_end", "[backup_end]"); settings.add_redaction(".**.summary.backup_duration", "[backup_duration]"); @@ -177,7 +177,7 @@ fn assert_with_win(test: &str, snap: T) { fn test_backup_with_tar_gz_passes( tar_gz_testdata: Result, set_up_repo: Result, - insta_summary_redaction: Settings, + insta_snapshotfile_redaction: Settings, insta_node_redaction: Settings, ) -> Result<()> { // uncomment for logging output @@ -197,7 +197,7 @@ fn test_backup_with_tar_gz_passes( // We can also bind to scope ( https://docs.rs/insta/latest/insta/struct.Settings.html#method.bind_to_scope ) // But I think that can get messy with a lot of tests, also checking which settings are currently applied // will be probably harder - insta_summary_redaction.bind(|| { + insta_snapshotfile_redaction.bind(|| { assert_with_win("backup-tar-summary-first", &first_snapshot); }); @@ -224,7 +224,7 @@ fn test_backup_with_tar_gz_passes( // second backup let second_snapshot = repo.backup(&opts, paths, SnapshotFile::default())?; - insta_summary_redaction.bind(|| { + insta_snapshotfile_redaction.bind(|| { assert_with_win("backup-tar-summary-second", &second_snapshot); }); @@ -244,7 +244,7 @@ fn test_backup_with_tar_gz_passes( let opts = opts.parent_opts(ParentOptions::default().parent(second_snapshot.id.to_string())); let third_snapshot = repo.backup(&opts, paths, snap)?; - insta_summary_redaction.bind(|| { + insta_snapshotfile_redaction.bind(|| { assert_with_win("backup-tar-summary-third", &second_snapshot); }); assert_eq!(third_snapshot.parent, Some(second_snapshot.id)); @@ -275,16 +275,20 @@ fn test_backup_with_tar_gz_passes( // get snapshot group let group_by = SnapshotGroupCriterion::new().tags(true); - let groups = repo.get_snapshot_group(&[], group_by, |_| true)?; + let mut groups = repo.get_snapshot_group(&[], group_by, |_| true)?; - insta_summary_redaction.bind(|| { + // sort groups to get unique result + groups.iter_mut().for_each(|(_, snaps)| snaps.sort()); + groups.sort_by_key(|(group, _)| group.tags.clone()); + + insta_snapshotfile_redaction.bind(|| { assert_with_win("backup-tar-groups", &groups); }); // filter snapshots by tag let filter = |snap: &SnapshotFile| snap.tags.contains("a"); let snaps = repo.get_matching_snapshots(filter)?; - insta_summary_redaction.bind(|| { + insta_snapshotfile_redaction.bind(|| { assert_with_win("backup-tar-matching-snaps", &snaps); }); @@ -295,7 +299,7 @@ fn test_backup_with_tar_gz_passes( fn test_backup_dry_run_with_tar_gz_passes( tar_gz_testdata: Result, set_up_repo: Result, - insta_summary_redaction: Settings, + insta_snapshotfile_redaction: Settings, insta_node_redaction: Settings, ) -> Result<()> { // Fixtures @@ -311,7 +315,7 @@ fn test_backup_dry_run_with_tar_gz_passes( // dry-run backup let snap_dry_run = repo.backup(&opts, paths, SnapshotFile::default())?; - insta_summary_redaction.bind(|| { + insta_snapshotfile_redaction.bind(|| { assert_with_win("dryrun-tar-summary-first", &snap_dry_run); }); @@ -343,7 +347,7 @@ fn test_backup_dry_run_with_tar_gz_passes( let opts = opts.dry_run(true); let snap_dry_run = repo.backup(&opts, paths, SnapshotFile::default())?; - insta_summary_redaction.bind(|| { + insta_snapshotfile_redaction.bind(|| { assert_with_win("dryrun-tar-summary-second", &snap_dry_run); }); diff --git a/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap index 69c16d18..c222c79f 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap @@ -4,7 +4,7 @@ expression: snap --- [ (SnapshotGroup( - tags: "[tags]", + tags: Some(StringList([])), ), [ SnapshotFile( time: "[time]", @@ -17,8 +17,8 @@ expression: snap username: "", uid: 0, gid: 0, - tags: "[tags]", - original: Some(Id("8e73284dc2932e02d98b731b01f2bb869b6beb6917d329538589397da96f4516")), + tags: StringList([]), + original: "[original]", summary: Some(SnapshotSummary( files_new: 73, files_changed: 0, @@ -58,8 +58,8 @@ expression: snap username: "", uid: 0, gid: 0, - tags: "[tags]", - original: Some(Id("f35e73aacc988931fb4ba18bd556e2eace332e4c5285bd9e9cf99323733a950b")), + tags: StringList([]), + original: "[original]", summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, @@ -89,7 +89,10 @@ expression: snap ), ]), (SnapshotGroup( - tags: "[tags]", + tags: Some(StringList([ + "a", + "b", + ])), ), [ SnapshotFile( time: "[time]", @@ -103,8 +106,11 @@ expression: snap username: "", uid: 0, gid: 0, - tags: "[tags]", - original: Some(Id("89a20e891f73f1943ab0f043611a6302fda8a1dc1db156baceff975c97993def")), + tags: StringList([ + "a", + "b", + ]), + original: "[original]", summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, diff --git a/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap index 7dc17c31..33902366 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap @@ -15,8 +15,11 @@ expression: snap username: "", uid: 0, gid: 0, - tags: "[tags]", - original: Some(Id("89a20e891f73f1943ab0f043611a6302fda8a1dc1db156baceff975c97993def")), + tags: StringList([ + "a", + "b", + ]), + original: "[original]", summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap index d9eb15ba..197e1771 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap @@ -13,7 +13,7 @@ SnapshotFile( username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 73, files_changed: 0, diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap index 90fe910e..74446a5b 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap @@ -14,7 +14,7 @@ SnapshotFile( username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap index 90fe910e..74446a5b 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap @@ -14,7 +14,7 @@ SnapshotFile( username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, diff --git a/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap b/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap index fff22787..721b1c1d 100644 --- a/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap +++ b/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap @@ -13,7 +13,7 @@ SnapshotFile( username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 73, files_changed: 0, diff --git a/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap b/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap index 0ff6b0e9..1b7acf0d 100644 --- a/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap +++ b/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap @@ -14,7 +14,7 @@ SnapshotFile( username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, From 45f9b1dc567939595d122edb8bf7c9a97071ec4d Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Mon, 9 Sep 2024 21:55:04 +0200 Subject: [PATCH 4/9] more redactions --- crates/core/tests/integration.rs | 4 +++- .../integration__backup-tar-groups-nix.snap | 12 ++++++------ .../integration__backup-tar-matching-snaps-nix.snap | 4 ++-- .../integration__backup-tar-summary-first-nix.snap | 4 ++-- .../integration__backup-tar-summary-second-nix.snap | 4 ++-- .../integration__backup-tar-summary-third-nix.snap | 9 ++++++--- .../integration__dryrun-tar-summary-first-nix.snap | 4 ++-- .../integration__dryrun-tar-summary-second-nix.snap | 4 ++-- 8 files changed, 25 insertions(+), 20 deletions(-) diff --git a/crates/core/tests/integration.rs b/crates/core/tests/integration.rs index 6961f52e..255c3199 100644 --- a/crates/core/tests/integration.rs +++ b/crates/core/tests/integration.rs @@ -114,6 +114,8 @@ fn insta_snapshotfile_redaction() -> Settings { settings.add_dynamic_redaction(".**.parent", handle_option); settings.add_redaction(".**.id", "[id]"); settings.add_redaction(".**.original", "[original]"); + settings.add_redaction(".**.hostname", "[hostname]"); + settings.add_redaction(".**.command", "[command]"); settings.add_redaction(".**.summary.backup_start", "[backup_start]"); settings.add_redaction(".**.summary.backup_end", "[backup_end]"); settings.add_redaction(".**.summary.backup_duration", "[backup_duration]"); @@ -245,7 +247,7 @@ fn test_backup_with_tar_gz_passes( let third_snapshot = repo.backup(&opts, paths, snap)?; insta_snapshotfile_redaction.bind(|| { - assert_with_win("backup-tar-summary-third", &second_snapshot); + assert_with_win("backup-tar-summary-third", &third_snapshot); }); assert_eq!(third_snapshot.parent, Some(second_snapshot.id)); assert_eq!(third_snapshot.tree, second_snapshot.tree); diff --git a/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap index c222c79f..d3ca3f2f 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-groups-nix.snap @@ -13,7 +13,7 @@ expression: snap paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -38,7 +38,7 @@ expression: snap data_added_files_packed: 78740, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", @@ -54,7 +54,7 @@ expression: snap paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -79,7 +79,7 @@ expression: snap data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", @@ -102,7 +102,7 @@ expression: snap paths: StringList([ "test", ]), - hostname: "latitude", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -130,7 +130,7 @@ expression: snap data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "/home/alex-dev/rust/rustic_core/target/debug/deps/integration-17052277a5b56351 --color=auto", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap index 33902366..636cc90b 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-nix.snap @@ -11,7 +11,7 @@ expression: snap paths: StringList([ "test", ]), - hostname: "latitude", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -39,7 +39,7 @@ expression: snap data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "/home/alex-dev/rust/rustic_core/target/debug/deps/integration-17052277a5b56351 --color=auto", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap index 197e1771..4280c551 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-first-nix.snap @@ -9,7 +9,7 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -33,7 +33,7 @@ SnapshotFile( data_added_files_packed: 78740, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap index 74446a5b..cf66fd07 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-second-nix.snap @@ -10,7 +10,7 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -34,7 +34,7 @@ SnapshotFile( data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap index 74446a5b..2fe82db1 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-third-nix.snap @@ -10,11 +10,14 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, - tags: StringList([]), + tags: StringList([ + "a", + "b", + ]), summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, @@ -34,7 +37,7 @@ SnapshotFile( data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap b/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap index 721b1c1d..8abb966a 100644 --- a/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap +++ b/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-nix.snap @@ -9,7 +9,7 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -33,7 +33,7 @@ SnapshotFile( data_added_files_packed: 78740, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap b/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap index 1b7acf0d..2212f993 100644 --- a/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap +++ b/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-nix.snap @@ -10,7 +10,7 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, @@ -34,7 +34,7 @@ SnapshotFile( data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", From fb0e33be4ead73a0c48132912bc1eee0f5c33681 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Mon, 9 Sep 2024 22:40:12 +0200 Subject: [PATCH 5/9] add windows snapshots --- .../integration__backup-tar-summary-first-windows.snap | 6 +++--- .../integration__dryrun-tar-summary-first-windows.snap | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-first-windows.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-first-windows.snap index d9eb15ba..4280c551 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-first-windows.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-first-windows.snap @@ -9,11 +9,11 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 73, files_changed: 0, @@ -33,7 +33,7 @@ SnapshotFile( data_added_files_packed: 78740, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-windows.snap b/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-windows.snap index fff22787..8abb966a 100644 --- a/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-windows.snap +++ b/crates/core/tests/snapshots/integration__dryrun-tar-summary-first-windows.snap @@ -9,11 +9,11 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 73, files_changed: 0, @@ -33,7 +33,7 @@ SnapshotFile( data_added_files_packed: 78740, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", From 740b9dff058d7c05dbc45462c159d4d4820874cd Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Mon, 9 Sep 2024 23:05:23 +0200 Subject: [PATCH 6/9] add windows snapshots --- .../integration__backup-tar-summary-second-windows.snap | 6 +++--- .../integration__dryrun-tar-summary-second-windows.snap | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-second-windows.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-second-windows.snap index f4908313..cf5a6121 100644 --- a/crates/core/tests/snapshots/integration__backup-tar-summary-second-windows.snap +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-second-windows.snap @@ -10,11 +10,11 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, @@ -34,7 +34,7 @@ SnapshotFile( data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", diff --git a/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-windows.snap b/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-windows.snap index 2a70f9ae..d322fea6 100644 --- a/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-windows.snap +++ b/crates/core/tests/snapshots/integration__dryrun-tar-summary-second-windows.snap @@ -10,11 +10,11 @@ SnapshotFile( paths: StringList([ "test", ]), - hostname: "", + hostname: "[hostname]", username: "", uid: 0, gid: 0, - tags: "[tags]", + tags: StringList([]), summary: Some(SnapshotSummary( files_new: 0, files_changed: 0, @@ -34,7 +34,7 @@ SnapshotFile( data_added_files_packed: 0, data_added_trees: "[data_added_trees]", data_added_trees_packed: "[data_added_trees_packed]", - command: "", + command: "[command]", backup_start: "[backup_start]", backup_end: "[backup_end]", backup_duration: "[backup_duration]", From 8c8ac8dea2b90fb53d2a229745d4544cc98ad5ac Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Mon, 9 Sep 2024 23:23:52 +0200 Subject: [PATCH 7/9] add windows snapshots --- ...ion__backup-tar-summary-third-windows.snap | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 crates/core/tests/snapshots/integration__backup-tar-summary-third-windows.snap diff --git a/crates/core/tests/snapshots/integration__backup-tar-summary-third-windows.snap b/crates/core/tests/snapshots/integration__backup-tar-summary-third-windows.snap new file mode 100644 index 00000000..1d3972fe --- /dev/null +++ b/crates/core/tests/snapshots/integration__backup-tar-summary-third-windows.snap @@ -0,0 +1,47 @@ +--- +source: crates/core/tests/integration.rs +expression: snap +--- +SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "[hostname]", + username: "", + uid: 0, + gid: 0, + tags: StringList([ + "a", + "b", + ]), + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125674, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "[command]", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", +) From e6ca28679b5dbaf258ce3f475b066f0b7903d947 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Tue, 10 Sep 2024 22:26:28 +0200 Subject: [PATCH 8/9] add windows snapshots --- ...ntegration__backup-tar-groups-windows.snap | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 crates/core/tests/snapshots/integration__backup-tar-groups-windows.snap diff --git a/crates/core/tests/snapshots/integration__backup-tar-groups-windows.snap b/crates/core/tests/snapshots/integration__backup-tar-groups-windows.snap new file mode 100644 index 00000000..5e2bb401 --- /dev/null +++ b/crates/core/tests/snapshots/integration__backup-tar-groups-windows.snap @@ -0,0 +1,142 @@ +--- +source: crates/core/tests/integration.rs +expression: snap +--- +[ + (SnapshotGroup( + tags: Some(StringList([])), + ), [ + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "[hostname]", + username: "", + uid: 0, + gid: 0, + tags: StringList([]), + original: "[original]", + summary: Some(SnapshotSummary( + files_new: 73, + files_changed: 0, + files_unmodified: 0, + total_files_processed: 73, + total_bytes_processed: 1125674, + dirs_new: 6, + dirs_changed: 0, + dirs_unmodified: 0, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 70, + tree_blobs: 6, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 1125653, + data_added_files_packed: 78740, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "[command]", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "[hostname]", + username: "", + uid: 0, + gid: 0, + tags: StringList([]), + original: "[original]", + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125674, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "[command]", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), + ]), + (SnapshotGroup( + tags: Some(StringList([ + "a", + "b", + ])), + ), [ + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "[hostname]", + username: "", + uid: 0, + gid: 0, + tags: StringList([ + "a", + "b", + ]), + original: "[original]", + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125674, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "[command]", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), + ]), +] From e3e0a54bd8cf558d97fe3a16bc6c43c20ae0839e Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Tue, 10 Sep 2024 22:42:04 +0200 Subject: [PATCH 9/9] add windows snapshots --- ...on__backup-tar-matching-snaps-windows.snap | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 crates/core/tests/snapshots/integration__backup-tar-matching-snaps-windows.snap diff --git a/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-windows.snap b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-windows.snap new file mode 100644 index 00000000..1e331878 --- /dev/null +++ b/crates/core/tests/snapshots/integration__backup-tar-matching-snaps-windows.snap @@ -0,0 +1,50 @@ +--- +source: crates/core/tests/integration.rs +expression: snap +--- +[ + SnapshotFile( + time: "[time]", + program_version: "rustic [rustic_core_version]", + parent: "[some]", + tree: "[tree_id]", + paths: StringList([ + "test", + ]), + hostname: "[hostname]", + username: "", + uid: 0, + gid: 0, + tags: StringList([ + "a", + "b", + ]), + original: "[original]", + summary: Some(SnapshotSummary( + files_new: 0, + files_changed: 0, + files_unmodified: 73, + total_files_processed: 73, + total_bytes_processed: 1125674, + dirs_new: 0, + dirs_changed: 0, + dirs_unmodified: 6, + total_dirs_processed: 6, + total_dirsize_processed: "[total_dirsize_processed]", + data_blobs: 0, + tree_blobs: 0, + data_added: "[data_added]", + data_added_packed: "[data_added_packed]", + data_added_files: 0, + data_added_files_packed: 0, + data_added_trees: "[data_added_trees]", + data_added_trees_packed: "[data_added_trees_packed]", + command: "[command]", + backup_start: "[backup_start]", + backup_end: "[backup_end]", + backup_duration: "[backup_duration]", + total_duration: "[total_duration]", + )), + id: "[id]", + ), +]