| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // Copyright (C) 2020 The Syncthing Authors.
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
- // You can obtain one at https://mozilla.org/MPL/2.0/.
- package versioner
- import (
- "context"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "testing"
- "time"
- "github.com/syncthing/syncthing/lib/config"
- "github.com/syncthing/syncthing/lib/fs"
- )
- func TestVersionerCleanOut(t *testing.T) {
- cfg := config.FolderConfiguration{
- FilesystemType: fs.FilesystemTypeBasic,
- Path: "testdata",
- Versioning: config.VersioningConfiguration{
- Params: map[string]string{
- "cleanoutDays": "7",
- },
- },
- }
- testCasesVersioner := map[string]Versioner{
- "simple": newSimple(cfg),
- "trashcan": newTrashcan(cfg),
- }
- var testcases = map[string]bool{
- "testdata/.stversions/file1": false,
- "testdata/.stversions/file2": true,
- "testdata/.stversions/keep1/file1": false,
- "testdata/.stversions/keep1/file2": false,
- "testdata/.stversions/keep2/file1": false,
- "testdata/.stversions/keep2/file2": true,
- "testdata/.stversions/keep3/keepsubdir/file1": false,
- "testdata/.stversions/remove/file1": true,
- "testdata/.stversions/remove/file2": true,
- "testdata/.stversions/remove/removesubdir/file1": true,
- }
- for versionerType, versioner := range testCasesVersioner {
- t.Run(fmt.Sprintf("%v versioner trashcan clean up", versionerType), func(t *testing.T) {
- os.RemoveAll("testdata")
- defer os.RemoveAll("testdata")
- oldTime := time.Now().Add(-8 * 24 * time.Hour)
- for file, shouldRemove := range testcases {
- os.MkdirAll(filepath.Dir(file), 0777)
- if err := ioutil.WriteFile(file, []byte("data"), 0644); err != nil {
- t.Fatal(err)
- }
- if shouldRemove {
- if err := os.Chtimes(file, oldTime, oldTime); err != nil {
- t.Fatal(err)
- }
- }
- }
- if err := versioner.Clean(context.Background()); err != nil {
- t.Fatal(err)
- }
- for file, shouldRemove := range testcases {
- _, err := os.Lstat(file)
- if shouldRemove && !os.IsNotExist(err) {
- t.Error(file, "should have been removed")
- } else if !shouldRemove && err != nil {
- t.Error(file, "should not have been removed")
- }
- }
- if _, err := os.Lstat("testdata/.stversions/keep3"); os.IsNotExist(err) {
- t.Error("directory with non empty subdirs should not be removed")
- }
- if _, err := os.Lstat("testdata/.stversions/remove"); !os.IsNotExist(err) {
- t.Error("empty directory should have been removed")
- }
- })
- }
- }
|