2015-08-18 09:52:34 +02:00
|
|
|
// Copyright (C) 2014 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,
|
2017-02-09 07:52:18 +01:00
|
|
|
// You can obtain one at https://mozilla.org/MPL/2.0/.
|
2015-08-18 09:52:34 +02:00
|
|
|
|
|
|
|
package versioner
|
|
|
|
|
|
|
|
import (
|
2016-08-08 20:27:55 +02:00
|
|
|
"os"
|
2016-04-15 16:26:39 +02:00
|
|
|
"sort"
|
|
|
|
"strconv"
|
2015-08-18 09:52:34 +02:00
|
|
|
"testing"
|
|
|
|
"time"
|
2016-04-15 16:26:39 +02:00
|
|
|
|
|
|
|
"github.com/d4l3k/messagediff"
|
2015-08-18 09:52:34 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestStaggeredVersioningVersionCount(t *testing.T) {
|
2016-04-15 16:26:39 +02:00
|
|
|
/* Default settings:
|
2015-08-18 09:52:34 +02:00
|
|
|
|
2016-04-15 16:26:39 +02:00
|
|
|
{30, 3600}, // first hour -> 30 sec between versions
|
|
|
|
{3600, 86400}, // next day -> 1 h between versions
|
|
|
|
{86400, 592000}, // next 30 days -> 1 day between versions
|
|
|
|
{604800, maxAge}, // next year -> 1 week between versions
|
|
|
|
*/
|
2015-08-18 09:52:34 +02:00
|
|
|
|
2016-04-15 16:26:39 +02:00
|
|
|
loc, _ := time.LoadLocation("Local")
|
|
|
|
now, _ := time.ParseInLocation(TimeFormat, "20160415-140000", loc)
|
|
|
|
files := []string{
|
|
|
|
// 14:00:00 is "now"
|
|
|
|
"test~20160415-140000", // 0 seconds ago
|
|
|
|
"test~20160415-135959", // 1 second ago
|
|
|
|
"test~20160415-135958", // 2 seconds ago
|
|
|
|
"test~20160415-135900", // 1 minute ago
|
|
|
|
"test~20160415-135859", // 1 minute 1 second ago
|
|
|
|
"test~20160415-135830", // 1 minute 30 seconds ago
|
|
|
|
"test~20160415-135829", // 1 minute 31 seconds ago
|
|
|
|
"test~20160415-135700", // 3 minutes ago
|
|
|
|
"test~20160415-135630", // 3 minutes 30 seconds ago
|
|
|
|
"test~20160415-133000", // 30 minutes ago
|
|
|
|
"test~20160415-132900", // 31 minutes ago
|
|
|
|
"test~20160415-132500", // 35 minutes ago
|
|
|
|
"test~20160415-132000", // 40 minutes ago
|
|
|
|
"test~20160415-130000", // 60 minutes ago
|
|
|
|
"test~20160415-124000", // 80 minutes ago
|
|
|
|
"test~20160415-122000", // 100 minutes ago
|
|
|
|
"test~20160415-110000", // 120 minutes ago
|
2015-08-18 09:52:34 +02:00
|
|
|
}
|
2016-04-15 16:26:39 +02:00
|
|
|
sort.Strings(files)
|
2015-08-18 09:52:34 +02:00
|
|
|
|
2016-04-15 16:26:39 +02:00
|
|
|
delete := []string{
|
|
|
|
"test~20160415-140000", // 0 seconds ago
|
|
|
|
"test~20160415-135959", // 1 second ago
|
|
|
|
"test~20160415-135900", // 1 minute ago
|
|
|
|
"test~20160415-135830", // 1 minute 30 second ago
|
|
|
|
"test~20160415-130000", // 60 minutes ago
|
|
|
|
"test~20160415-124000", // 80 minutes ago
|
|
|
|
}
|
|
|
|
sort.Strings(delete)
|
2015-08-18 09:52:34 +02:00
|
|
|
|
2016-08-08 20:27:55 +02:00
|
|
|
os.MkdirAll("testdata/.stversions", 0755)
|
|
|
|
defer os.RemoveAll("testdata")
|
|
|
|
|
2017-02-07 14:31:13 +01:00
|
|
|
v := NewStaggered("", "testdata", map[string]string{"maxAge": strconv.Itoa(365 * 86400)}).(*Staggered)
|
|
|
|
v.testCleanDone = make(chan struct{})
|
|
|
|
defer v.Stop()
|
|
|
|
go v.Serve()
|
|
|
|
|
|
|
|
<-v.testCleanDone
|
2016-08-08 20:27:55 +02:00
|
|
|
|
2016-04-15 16:26:39 +02:00
|
|
|
rem := v.toRemove(files, now)
|
|
|
|
if diff, equal := messagediff.PrettyDiff(delete, rem); !equal {
|
|
|
|
t.Errorf("Incorrect deleted files; got %v, expected %v\n%v", rem, delete, diff)
|
2015-08-18 09:52:34 +02:00
|
|
|
}
|
|
|
|
}
|