Hello everybody,
I am trying to get to know restic’s codebase (and maybe to contribute at some point in time, but currently I am doing this just out of curiosity).
Inspired by this issue I’m trying to allow rewriting the time field of a snapshot.
Ideally, I would like to start with a simple test, something like this:
// pseudo code
func testRewriteTime(){
oldTime = "1900-01-01 00:00:00"
newTime = 2000-01-01 01:00:00"
id = setupTestRepoWithSingleSnapshot(oldTime)
rewriteTime(id, newTime)
Assert(TimeOf(id) == newTime)
}
In the test file cmd/restic/cmd_rewrite_integration_test.go I found the function TestRewriteReplace, which looks to me like a good template for my new test.
So my question to the experts: is this more or less the right approach or is there a better way?
I would be also grateful for any tips / best practices for writing tests for restic (which helper functions to use etc).
Thanks for your help!
So, after a bit of trial and error I actually got a working test:
func testRewriteMetadata(t *testing.T, metadata SnapshotMetadataArgs) {
env, cleanup := withTestEnvironment(t)
env.gopts.backendTestHook = nil
defer cleanup()
createBasicRewriteRepo(t, env)
repo, _ := OpenRepository(context.TODO(), env.gopts)
testRunRewriteExclude(t, env.gopts, []string{}, true, &metadata)
snapshots := FindFilteredSnapshots(context.TODO(), repo, repo, &restic.SnapshotFilter{}, []string{})
newSnapshot := <-snapshots
if metadata.Time != "" {
rtest.Assert(t, newSnapshot.Time.Format(TimeFormat) == metadata.Time, "New snapshot should have time %s", metadata.Time)
}
if metadata.Hostname != "" {
rtest.Assert(t, newSnapshot.Hostname == metadata.Hostname, "New snapshot should have host %s", metadata.Hostname)
}
}
func TestRewriteMetadata(t *testing.T) {
new_host := "new_host"
new_time := "1999-01-01 11:11:11"
for _, metadata := range []SnapshotMetadataArgs{
{Hostname: "", Time: new_time},
{Hostname: new_host, Time: ""},
{Hostname: new_host, Time: new_time},
} {
testRewriteMetadata(t, metadata)
}
}
1 Like