mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests: Add integration tests for compact hash
Signed-off-by: Marek Siarkowicz <siarkowicz@google.com>
This commit is contained in:
parent
1200b1006d
commit
d3db3bc454
@ -25,6 +25,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"go.uber.org/zap/zaptest"
|
"go.uber.org/zap/zaptest"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
||||||
@ -36,6 +37,11 @@ import (
|
|||||||
"go.etcd.io/etcd/tests/v3/integration"
|
"go.etcd.io/etcd/tests/v3/integration"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Use high prime
|
||||||
|
compactionCycle = 71
|
||||||
|
)
|
||||||
|
|
||||||
func TestMaintenanceHashKV(t *testing.T) {
|
func TestMaintenanceHashKV(t *testing.T) {
|
||||||
integration.BeforeTest(t)
|
integration.BeforeTest(t)
|
||||||
|
|
||||||
@ -69,6 +75,74 @@ func TestMaintenanceHashKV(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCompactionHash(t *testing.T) {
|
||||||
|
integration.BeforeTest(t)
|
||||||
|
|
||||||
|
clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1})
|
||||||
|
defer clus.Terminate(t)
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
cc, err := clus.ClusterClient()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var totalRevisions int64 = 1210
|
||||||
|
assert.Less(t, int64(1000), totalRevisions)
|
||||||
|
assert.Less(t, int64(compactionCycle*10), totalRevisions)
|
||||||
|
var rev int64
|
||||||
|
for ; rev < totalRevisions; rev += compactionCycle {
|
||||||
|
testCompactionHash(ctx, t, cc, clus.Members[0].GRPCURL(), rev, rev+compactionCycle)
|
||||||
|
}
|
||||||
|
testCompactionHash(ctx, t, cc, clus.Members[0].GRPCURL(), rev, rev+totalRevisions)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCompactionHash(ctx context.Context, t *testing.T, cc *clientv3.Client, url string, start, stop int64) {
|
||||||
|
for i := start; i <= stop; i++ {
|
||||||
|
cc.Put(ctx, pickKey(i), fmt.Sprint(i))
|
||||||
|
}
|
||||||
|
hash1, err := cc.HashKV(ctx, url, stop)
|
||||||
|
assert.NoError(t, err, "error on rev %v", stop)
|
||||||
|
|
||||||
|
_, err = cc.Compact(ctx, stop)
|
||||||
|
assert.NoError(t, err, "error on compact rev %v", stop)
|
||||||
|
|
||||||
|
// Wait for compaction to be compacted
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
|
||||||
|
hash2, err := cc.HashKV(ctx, url, stop)
|
||||||
|
assert.NoError(t, err, "error on rev %v", stop)
|
||||||
|
assert.Equal(t, hash1, hash2, "hashes do not match on rev %v", stop)
|
||||||
|
}
|
||||||
|
|
||||||
|
func pickKey(i int64) string {
|
||||||
|
if i%(compactionCycle*2) == 30 {
|
||||||
|
return "zenek"
|
||||||
|
}
|
||||||
|
if i%compactionCycle == 30 {
|
||||||
|
return "xavery"
|
||||||
|
}
|
||||||
|
// Use low prime number to ensure repeats without alignment
|
||||||
|
switch i % 7 {
|
||||||
|
case 0:
|
||||||
|
return "alice"
|
||||||
|
case 1:
|
||||||
|
return "bob"
|
||||||
|
case 2:
|
||||||
|
return "celine"
|
||||||
|
case 3:
|
||||||
|
return "dominik"
|
||||||
|
case 4:
|
||||||
|
return "eve"
|
||||||
|
case 5:
|
||||||
|
return "frederica"
|
||||||
|
case 6:
|
||||||
|
return "gorge"
|
||||||
|
default:
|
||||||
|
panic("Can't count")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestMaintenanceMoveLeader(t *testing.T) {
|
func TestMaintenanceMoveLeader(t *testing.T) {
|
||||||
integration.BeforeTest(t)
|
integration.BeforeTest(t)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user