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, RoutingPolicy: network.AllowAll, }) t.DumpJSON("network-link-shape.json", ls) }