93 lines
2.5 KiB
Go
93 lines
2.5 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))
|
|
}
|
|
|
|
if t.IsParamSet("bandwidth") {
|
|
ls.Bandwidth = t.SizeParam("bandwidth")
|
|
t.D().RecordPoint("bandwidth_bytes", float64(ls.Bandwidth))
|
|
}
|
|
|
|
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,
|
|
RoutingPolicy: network.AllowAll,
|
|
})
|
|
|
|
t.DumpJSON("network-link-shape.json", ls)
|
|
}
|