|
@@ -1,90 +0,0 @@
|
|
|
-// 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"
|
|
|
- "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 := os.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")
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
-}
|