Files
kopia/internal/epoch/epoch_range_test.go
Jarek Kowalski 62ad437bb6 Implemented epoch-based index manager (#1174)
* 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
2021-07-06 21:38:08 -07:00

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}
}