lotus/lotus-soup/testkit/net.go
Yusef Napora 0d0fc2d433
randomized network params & batch runner (#142)
Co-authored-by: Anton Evangelatov <anton.evangelatov@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
2020-07-27 14:58:27 +01:00

87 lines
2.4 KiB
Go

package testkit
import (
"context"
"fmt"
"time"
"github.com/testground/sdk-go/network"
"github.com/testground/sdk-go/sync"
)
func ApplyNetworkParameters(t *TestEnvironment) {
if !t.TestSidecar {
t.RecordMessage("no test sidecar, skipping network config")
return
}
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
ls := network.LinkShape{}
if t.IsParamSet("latency_range") {
r := t.DurationRangeParam("latency_range")
ls.Latency = r.ChooseRandom()
t.D().RecordPoint("latency_ms", float64(ls.Latency.Milliseconds()))
}
if t.IsParamSet("jitter_range") {
r := t.DurationRangeParam("jitter_range")
ls.Jitter = r.ChooseRandom()
t.D().RecordPoint("jitter_ms", float64(ls.Jitter.Milliseconds()))
}
if t.IsParamSet("loss_range") {
r := t.FloatRangeParam("loss_range")
ls.Loss = r.ChooseRandom()
t.D().RecordPoint("packet_loss", float64(ls.Loss))
}
if t.IsParamSet("corrupt_range") {
r := t.FloatRangeParam("corrupt_range")
ls.Corrupt = r.ChooseRandom()
t.D().RecordPoint("corrupt_packet_probability", float64(ls.Corrupt))
}
if t.IsParamSet("corrupt_corr_range") {
r := t.FloatRangeParam("corrupt_corr_range")
ls.CorruptCorr = r.ChooseRandom()
t.D().RecordPoint("corrupt_packet_correlation", float64(ls.CorruptCorr))
}
if t.IsParamSet("reorder_range") {
r := t.FloatRangeParam("reorder_range")
ls.Reorder = r.ChooseRandom()
t.D().RecordPoint("reordered_packet_probability", float64(ls.Reorder))
}
if t.IsParamSet("reorder_corr_range") {
r := t.FloatRangeParam("reorder_corr_range")
ls.ReorderCorr = r.ChooseRandom()
t.D().RecordPoint("reordered_packet_correlation", float64(ls.ReorderCorr))
}
if t.IsParamSet("duplicate_range") {
r := t.FloatRangeParam("duplicate_range")
ls.Duplicate = r.ChooseRandom()
t.D().RecordPoint("duplicate_packet_probability", float64(ls.Duplicate))
}
if t.IsParamSet("duplicate_corr_range") {
r := t.FloatRangeParam("duplicate_corr_range")
ls.DuplicateCorr = r.ChooseRandom()
t.D().RecordPoint("duplicate_packet_correlation", float64(ls.DuplicateCorr))
}
t.NetClient.MustConfigureNetwork(ctx, &network.Config{
Network: "default",
Enable: true,
Default: ls,
CallbackState: sync.State(fmt.Sprintf("latency-configured-%s", t.TestGroupID)),
CallbackTarget: t.TestGroupInstanceCount,
})
t.DumpJSON("network-link-shape.json", ls)
}