Skip to content

Commit 13dfa55

Browse files
committed
test(snapshots): factorize repository setup for all get_snapshots tests
1 parent e29906d commit 13dfa55

File tree

4 files changed

+70
-224
lines changed

4 files changed

+70
-224
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ simplelog = "0.12.2"
137137
tar = "0.4.44"
138138
tempfile = { workspace = true }
139139
toml = "0.8.20"
140+
once_cell = "1.21.3"
140141

141142
[lints]
142143
workspace = true

crates/core/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ pub use crate::{
153153
PathList, SnapshotGroup, SnapshotGroupCriterion, SnapshotOptions, StringList,
154154
},
155155
repository::{
156-
FullIndex, IndexedFull, IndexedIds, IndexedStatus, IndexedTree, Open, OpenStatus,
156+
FullIndex, IdIndex, IndexedFull, IndexedIds, IndexedStatus, IndexedTree, Open, OpenStatus,
157157
Repository, RepositoryOptions,
158158
command_input::{CommandInput, CommandInputErrorKind},
159159
},

crates/core/tests/integration/snapshots.rs

Lines changed: 67 additions & 223 deletions
Original file line numberDiff line numberDiff line change
@@ -3,78 +3,70 @@
33
use std::path::PathBuf;
44
use std::str::FromStr;
55

6-
use crate::{RepoOpen, TestSource, tar_gz_testdata};
6+
use crate::tar_gz_testdata;
77

88
use super::set_up_repo;
99
use anyhow::Result;
1010
use chrono::DateTime;
1111
use rstest::rstest;
1212
use rustic_core::repofile::SnapshotFile;
13-
use rustic_core::{BackupOptions, SnapshotGroupCriterion};
14-
15-
#[rstest]
16-
fn test_get_snapshot_group_no_ids(
17-
tar_gz_testdata: Result<TestSource>,
18-
set_up_repo: Result<RepoOpen>,
19-
) -> Result<()> {
20-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
21-
22-
let paths = &source.path_list();
13+
use rustic_core::{
14+
BackupOptions, IdIndex, IndexedStatus, NoProgressBars, OpenStatus, Repository,
15+
SnapshotGroupCriterion,
16+
};
17+
18+
use once_cell::sync::Lazy;
19+
20+
/// This lazy static initialize once a `(Repository, Vec<SnapshotFile>)`
21+
/// Which is shared in the different tests in this module
22+
static REPOSITORY_RESOURCE: Lazy<(
23+
Repository<NoProgressBars, IndexedStatus<IdIndex, OpenStatus>>,
24+
Vec<SnapshotFile>,
25+
)> = Lazy::new(|| {
26+
let repo = set_up_repo().unwrap().to_indexed_ids().unwrap();
27+
let source = tar_gz_testdata().unwrap();
28+
29+
let snapshot_timestamp = [
30+
DateTime::from_timestamp(1_752_483_600, 0).unwrap().into(),
31+
DateTime::from_timestamp(1_752_483_700, 0).unwrap().into(),
32+
DateTime::from_timestamp(1_752_483_800, 0).unwrap().into(),
33+
];
34+
let mut snapshot_files = Vec::new();
2335

2436
// we use as_path to not depend on the actual tempdir
25-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
37+
let backup_options = BackupOptions::default().as_path(PathBuf::from_str("test").unwrap());
38+
for snap_ts in &snapshot_timestamp {
39+
let snapshot_file = repo
40+
.backup(
41+
&backup_options,
42+
&source.path_list(),
43+
SnapshotFile {
44+
time: *snap_ts,
45+
..Default::default()
46+
},
47+
)
48+
.unwrap();
49+
snapshot_files.push(snapshot_file);
50+
}
51+
52+
return (repo, snapshot_files);
53+
});
2654

27-
// first backup
28-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
29-
let _ = repo.backup(
30-
&opts,
31-
paths,
32-
SnapshotFile {
33-
time: snap1_ts,
34-
..Default::default()
35-
},
36-
)?;
55+
#[rstest]
56+
fn test_get_snapshot_group_no_ids() -> Result<()> {
57+
let (repo, snapshots) = &*REPOSITORY_RESOURCE;
3758

38-
// second backup
39-
let snap2_ts = DateTime::from_timestamp(1_752_483_700, 0).unwrap().into();
40-
let _ = repo.backup(
41-
&opts,
42-
paths,
43-
SnapshotFile {
44-
time: snap2_ts,
45-
..Default::default()
46-
},
47-
)?;
4859
let res = repo.get_snapshot_group(&[], SnapshotGroupCriterion::default(), |_| true)?;
4960

5061
assert_eq!(res.len(), 1);
51-
assert_eq!(res[0].1.len(), 2);
62+
assert_eq!(res[0].1.len(), snapshots.len());
5263

5364
Ok(())
5465
}
5566

5667
#[rstest]
57-
fn test_get_snapshot_group_wrong_id(
58-
tar_gz_testdata: Result<TestSource>,
59-
set_up_repo: Result<RepoOpen>,
60-
) -> Result<()> {
61-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
62-
63-
let paths = &source.path_list();
64-
65-
// we use as_path to not depend on the actual tempdir
66-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
67-
68-
// first backup
69-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
70-
let _ = repo.backup(
71-
&opts,
72-
paths,
73-
SnapshotFile {
74-
time: snap1_ts,
75-
..Default::default()
76-
},
77-
)?;
68+
fn test_get_snapshot_group_wrong_id() -> Result<()> {
69+
let (repo, _snapshots) = &*REPOSITORY_RESOURCE;
7870

7971
let res = repo.get_snapshot_group(
8072
&[String::from("wrong_id_that_is_out_of_format")],
@@ -91,94 +83,25 @@ fn test_get_snapshot_group_wrong_id(
9183
}
9284

9385
#[rstest]
94-
fn test_get_snapshot_group_latest_id(
95-
tar_gz_testdata: Result<TestSource>,
96-
set_up_repo: Result<RepoOpen>,
97-
) -> Result<()> {
98-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
86+
fn test_get_snapshot_group_latest_id() -> Result<()> {
87+
let (repo, snapshots) = &*REPOSITORY_RESOURCE;
9988

100-
let paths = &source.path_list();
101-
102-
// we use as_path to not depend on the actual tempdir
103-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
104-
105-
// first backup
106-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
107-
let _ = repo.backup(
108-
&opts,
109-
paths,
110-
SnapshotFile {
111-
time: snap1_ts,
112-
..Default::default()
113-
},
114-
)?;
115-
116-
// second backup
117-
let snap2_ts = DateTime::from_timestamp(1_752_483_700, 0).unwrap().into();
118-
let _ = repo.backup(
119-
&opts,
120-
paths,
121-
SnapshotFile {
122-
time: snap2_ts,
123-
..Default::default()
124-
},
125-
)?;
12689
let res = repo.get_snapshot_group(
12790
&[String::from("latest")],
12891
SnapshotGroupCriterion::default(),
12992
|_| true,
13093
)?;
13194
assert_eq!(res.len(), 1);
13295
assert_eq!(res[0].1.len(), 1);
96+
13397
// latest => most recent
134-
assert_eq!(res[0].1[0].time, snap2_ts);
98+
assert_eq!(res[0].1[0], snapshots[2]);
13599
Ok(())
136100
}
137101

138102
#[rstest]
139-
fn test_get_snapshot_group_latest_n_id(
140-
tar_gz_testdata: Result<TestSource>,
141-
set_up_repo: Result<RepoOpen>,
142-
) -> Result<()> {
143-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
144-
145-
let paths = &source.path_list();
146-
147-
// we use as_path to not depend on the actual tempdir
148-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
149-
150-
// first backup
151-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
152-
let _ = repo.backup(
153-
&opts,
154-
paths,
155-
SnapshotFile {
156-
time: snap1_ts,
157-
..Default::default()
158-
},
159-
)?;
160-
161-
// second backup
162-
let snap2_ts = DateTime::from_timestamp(1_752_483_700, 0).unwrap().into();
163-
let _ = repo.backup(
164-
&opts,
165-
paths,
166-
SnapshotFile {
167-
time: snap2_ts,
168-
..Default::default()
169-
},
170-
)?;
171-
172-
// third backup
173-
let snap3_ts = DateTime::from_timestamp(1_752_483_800, 0).unwrap().into();
174-
let _ = repo.backup(
175-
&opts,
176-
paths,
177-
SnapshotFile {
178-
time: snap3_ts,
179-
..Default::default()
180-
},
181-
)?;
103+
fn test_get_snapshot_group_latest_n_id() -> Result<()> {
104+
let (repo, snapshots) = &*REPOSITORY_RESOURCE;
182105

183106
let res = repo.get_snapshot_group(
184107
&[String::from("latest~2")],
@@ -187,8 +110,8 @@ fn test_get_snapshot_group_latest_n_id(
187110
)?;
188111
assert_eq!(res.len(), 1);
189112
assert_eq!(res[0].1.len(), 1);
190-
// latest~2 is "third" oldest
191-
assert_eq!(res[0].1[0].time, snap1_ts);
113+
// latest~2 is oldest
114+
assert_eq!(res[0].1[0], snapshots[0]);
192115

193116
let res = repo.get_snapshot_group(
194117
&[String::from("latest~2"), String::from("latest~0")],
@@ -197,35 +120,16 @@ fn test_get_snapshot_group_latest_n_id(
197120
)?;
198121
assert_eq!(res.len(), 1);
199122
assert_eq!(res[0].1.len(), 2);
200-
// latest~2 is "third" oldest
201-
assert_eq!(res[0].1[0].time, snap1_ts);
123+
// latest~2 is oldest
124+
assert_eq!(res[0].1[0], snapshots[0]);
202125
// latest~0 is latest
203-
assert_eq!(res[0].1[1].time, snap3_ts);
126+
assert_eq!(res[0].1[1], snapshots[2]);
204127
Ok(())
205128
}
206129

207130
#[rstest]
208-
fn test_get_snapshot_from_str_short_id(
209-
tar_gz_testdata: Result<TestSource>,
210-
set_up_repo: Result<RepoOpen>,
211-
) -> Result<()> {
212-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
213-
214-
let paths = &source.path_list();
215-
216-
// we use as_path to not depend on the actual tempdir
217-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
218-
219-
// first backup
220-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
221-
let _ = repo.backup(
222-
&opts,
223-
paths,
224-
SnapshotFile {
225-
time: snap1_ts,
226-
..Default::default()
227-
},
228-
)?;
131+
fn test_get_snapshot_from_str_short_id() -> Result<()> {
132+
let (repo, _snapshots) = &*REPOSITORY_RESOURCE;
229133

230134
let snap_original = repo.get_all_snapshots()?[0].clone();
231135

@@ -239,82 +143,22 @@ fn test_get_snapshot_from_str_short_id(
239143
}
240144

241145
#[rstest]
242-
fn test_get_snapshot_from_str_latest(
243-
tar_gz_testdata: Result<TestSource>,
244-
set_up_repo: Result<RepoOpen>,
245-
) -> Result<()> {
246-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
247-
248-
let paths = &source.path_list();
249-
250-
// we use as_path to not depend on the actual tempdir
251-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
252-
253-
// first backup
254-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
255-
let snap1 = repo.backup(
256-
&opts,
257-
paths,
258-
SnapshotFile {
259-
time: snap1_ts,
260-
..Default::default()
261-
},
262-
)?;
263-
264-
// second backup
265-
let snap2_ts = DateTime::from_timestamp(1_752_483_700, 0).unwrap().into();
266-
let snap2 = repo.backup(
267-
&opts,
268-
paths,
269-
SnapshotFile {
270-
time: snap2_ts,
271-
..Default::default()
272-
},
273-
)?;
146+
fn test_get_snapshot_from_str_latest() -> Result<()> {
147+
let (repo, snapshots) = &*REPOSITORY_RESOURCE;
274148

275149
let snap_latest = repo.get_snapshot_from_str("latest", |_| true)?;
276-
assert_eq!(snap_latest, snap2);
150+
assert_eq!(snap_latest, snapshots[2]);
277151
let snap_latest_1 = repo.get_snapshot_from_str("latest~1", |_| true)?;
278-
assert_eq!(snap_latest_1, snap1);
152+
assert_eq!(snap_latest_1, snapshots[1]);
279153
Ok(())
280154
}
281155

282156
#[rstest]
283-
fn test_get_snapshots_from_strs_latest(
284-
tar_gz_testdata: Result<TestSource>,
285-
set_up_repo: Result<RepoOpen>,
286-
) -> Result<()> {
287-
let (source, repo) = (tar_gz_testdata?, set_up_repo?.to_indexed_ids()?);
288-
289-
let paths = &source.path_list();
290-
291-
// we use as_path to not depend on the actual tempdir
292-
let opts = BackupOptions::default().as_path(PathBuf::from_str("test")?);
293-
294-
// first backup
295-
let snap1_ts = DateTime::from_timestamp(1_752_483_600, 0).unwrap().into();
296-
let snap1 = repo.backup(
297-
&opts,
298-
paths,
299-
SnapshotFile {
300-
time: snap1_ts,
301-
..Default::default()
302-
},
303-
)?;
304-
305-
// second backup
306-
let snap2_ts = DateTime::from_timestamp(1_752_483_700, 0).unwrap().into();
307-
let snap2 = repo.backup(
308-
&opts,
309-
paths,
310-
SnapshotFile {
311-
time: snap2_ts,
312-
..Default::default()
313-
},
314-
)?;
157+
fn test_get_snapshots_from_strs_latest() -> Result<()> {
158+
let (repo, snapshots) = &*REPOSITORY_RESOURCE;
315159

316160
let snap_latest = repo.get_snapshots_from_strs(&["latest", "latest~1"], |_| true)?;
317-
assert_eq!(snap_latest[0], snap2);
318-
assert_eq!(snap_latest[1], snap1);
161+
assert_eq!(snap_latest[0], snapshots[2]);
162+
assert_eq!(snap_latest[1], snapshots[1]);
319163
Ok(())
320164
}

0 commit comments

Comments
 (0)