98 lines
2.5 KiB
Go
98 lines
2.5 KiB
Go
package coordinator
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/services/meta"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSgList_ShardGroupAt(t *testing.T) {
|
|
base := time.Date(2016, 10, 19, 0, 0, 0, 0, time.UTC)
|
|
day := func(n int) time.Time {
|
|
return base.Add(time.Duration(24*n) * time.Hour)
|
|
}
|
|
|
|
items := meta.ShardGroupInfos{
|
|
{ID: 1, StartTime: day(0), EndTime: day(1)},
|
|
{ID: 2, StartTime: day(1), EndTime: day(2)},
|
|
{ID: 3, StartTime: day(2), EndTime: day(3)},
|
|
// SG day 3 to day 4 missing...
|
|
{ID: 4, StartTime: day(4), EndTime: day(5)},
|
|
{ID: 5, StartTime: day(5), EndTime: day(6)},
|
|
}
|
|
var list sgList
|
|
for _, i := range items {
|
|
list.Add(i)
|
|
}
|
|
|
|
examples := []struct {
|
|
T time.Time
|
|
ShardGroupID uint64 // 0 will indicate we don't expect a shard group
|
|
}{
|
|
{T: base.Add(-time.Minute), ShardGroupID: 0}, // Before any SG
|
|
{T: day(0), ShardGroupID: 1},
|
|
{T: day(0).Add(time.Minute), ShardGroupID: 1},
|
|
{T: day(1), ShardGroupID: 2},
|
|
{T: day(3).Add(time.Minute), ShardGroupID: 0}, // No matching SG
|
|
{T: day(5).Add(time.Hour), ShardGroupID: 5},
|
|
}
|
|
|
|
for i, example := range examples {
|
|
sg := list.ShardGroupAt(example.T)
|
|
var id uint64
|
|
if sg != nil {
|
|
id = sg.ID
|
|
}
|
|
|
|
if got, exp := id, example.ShardGroupID; got != exp {
|
|
t.Errorf("[Example %d] got %v, expected %v", i+1, got, exp)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSgList_ShardGroupAtOverlapping(t *testing.T) {
|
|
base := time.Date(2016, 10, 19, 0, 0, 0, 0, time.UTC)
|
|
hour := func(n int) time.Time {
|
|
return base.Add(time.Duration(n) * time.Hour)
|
|
}
|
|
day := func(n int) time.Time {
|
|
return base.Add(time.Duration(24*n) * time.Hour)
|
|
}
|
|
|
|
items := meta.ShardGroupInfos{
|
|
{ID: 1, StartTime: hour(5), EndTime: hour(6)},
|
|
{ID: 2, StartTime: hour(6), EndTime: hour(7)},
|
|
// Day-long shard overlaps with the two hour-long shards.
|
|
{ID: 3, StartTime: base, EndTime: day(1)},
|
|
}
|
|
var list sgList
|
|
for _, i := range items {
|
|
list.Add(i)
|
|
}
|
|
|
|
examples := []struct {
|
|
T time.Time
|
|
ShardGroupID uint64 // 0 will indicate we don't expect a shard group
|
|
}{
|
|
{T: base.Add(-time.Minute), ShardGroupID: 0}, // Before any SG
|
|
{T: base, ShardGroupID: 3},
|
|
{T: hour(5), ShardGroupID: 1},
|
|
{T: hour(7).Add(-time.Minute), ShardGroupID: 2},
|
|
{T: hour(8), ShardGroupID: 3},
|
|
{T: day(2), ShardGroupID: 0}, // No matching SG
|
|
}
|
|
|
|
for _, example := range examples {
|
|
t.Run(example.T.String(), func(t *testing.T) {
|
|
sg := list.ShardGroupAt(example.T)
|
|
var id uint64
|
|
if sg != nil {
|
|
id = sg.ID
|
|
}
|
|
require.Equal(t, example.ShardGroupID, id)
|
|
})
|
|
}
|
|
}
|