mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00

% find -name '*.go' -o -name '*.md' -o -name '*.sh' | xargs sed -i --follow-symlinks 's|etcd/v3/raft|etcd/raft/v3|g'
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
// Copyright 2015 The etcd Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package rafttest
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"go.etcd.io/etcd/raft/v3/raftpb"
|
|
)
|
|
|
|
func TestNetworkDrop(t *testing.T) {
|
|
// drop around 10% messages
|
|
sent := 1000
|
|
droprate := 0.1
|
|
nt := newRaftNetwork(1, 2)
|
|
nt.drop(1, 2, droprate)
|
|
for i := 0; i < sent; i++ {
|
|
nt.send(raftpb.Message{From: 1, To: 2})
|
|
}
|
|
|
|
c := nt.recvFrom(2)
|
|
|
|
received := 0
|
|
done := false
|
|
for !done {
|
|
select {
|
|
case <-c:
|
|
received++
|
|
default:
|
|
done = true
|
|
}
|
|
}
|
|
|
|
drop := sent - received
|
|
if drop > int((droprate+0.1)*float64(sent)) || drop < int((droprate-0.1)*float64(sent)) {
|
|
t.Errorf("drop = %d, want around %.2f", drop, droprate*float64(sent))
|
|
}
|
|
}
|
|
|
|
func TestNetworkDelay(t *testing.T) {
|
|
sent := 1000
|
|
delay := time.Millisecond
|
|
delayrate := 0.1
|
|
nt := newRaftNetwork(1, 2)
|
|
|
|
nt.delay(1, 2, delay, delayrate)
|
|
var total time.Duration
|
|
for i := 0; i < sent; i++ {
|
|
s := time.Now()
|
|
nt.send(raftpb.Message{From: 1, To: 2})
|
|
total += time.Since(s)
|
|
}
|
|
|
|
w := time.Duration(float64(sent)*delayrate/2) * delay
|
|
// there is some overhead in the send call since it generates random numbers.
|
|
if total < w {
|
|
t.Errorf("total = %v, want > %v", total, w)
|
|
}
|
|
}
|