mirror of
https://github.com/kopia/kopia.git
synced 2026-03-29 03:21:32 -04:00
* epoch: misc fixes and logging * blob: misc helpers * cli: removed useless 'repository upgrade', replaced by 'repository set-parameters' * content: implemented indexBlobManagerV1 which uses epoch manager * cli: commands to manipulate repository epoch parameters * cli: commands to examine epoch-based indexes * content: added test suite that uses epoch-based index manager * content: fixed a ton of test data races caused by sharing blobtesting.DataMap * cli: additional tests and validation for 'repository set-params' * testing: replaced the use of suite with our own, since suite is not parallelizable
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package epoch
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLongestRangeCheckpoint(t *testing.T) {
|
|
m0_9 := newEpochRangeMetadataForTesting(0, 9)
|
|
m0_29 := newEpochRangeMetadataForTesting(0, 29)
|
|
m10_19 := newEpochRangeMetadataForTesting(10, 19)
|
|
m20_29 := newEpochRangeMetadataForTesting(20, 29)
|
|
m30_39 := newEpochRangeMetadataForTesting(30, 39)
|
|
m40_49 := newEpochRangeMetadataForTesting(40, 49)
|
|
m50_59 := newEpochRangeMetadataForTesting(50, 59)
|
|
m10_59 := newEpochRangeMetadataForTesting(10, 59)
|
|
|
|
cases := []struct {
|
|
input []*RangeMetadata
|
|
want []*RangeMetadata
|
|
}{
|
|
{
|
|
input: nil,
|
|
want: nil,
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_9, m10_19, m20_29},
|
|
want: []*RangeMetadata{m0_9, m10_19, m20_29},
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_9, m10_19, m20_29, m50_59},
|
|
want: []*RangeMetadata{m0_9, m10_19, m20_29},
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_9, m20_29, m50_59},
|
|
want: []*RangeMetadata{m0_9},
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_29, m20_29, m30_39},
|
|
want: []*RangeMetadata{m0_29, m30_39},
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_9, m0_29, m10_19, m30_39},
|
|
want: []*RangeMetadata{m0_29, m30_39},
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_9, m0_29, m10_59, m30_39},
|
|
want: []*RangeMetadata{m0_9, m10_59},
|
|
},
|
|
{
|
|
input: []*RangeMetadata{m0_9, m0_9, m0_29, m10_59, m30_39},
|
|
want: []*RangeMetadata{m0_9, m10_59},
|
|
},
|
|
{
|
|
// two equivalent sequences, shorter one wins
|
|
input: []*RangeMetadata{m10_59, m30_39, m50_59, m40_49, m0_9, m0_29},
|
|
want: []*RangeMetadata{m0_9, m10_59},
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
require.Equal(t, tc.want, findLongestRangeCheckpoint(tc.input))
|
|
}
|
|
}
|
|
|
|
func newEpochRangeMetadataForTesting(min, max int) *RangeMetadata {
|
|
return &RangeMetadata{MinEpoch: min, MaxEpoch: max}
|
|
}
|