diff options
Diffstat (limited to 'run_request.go')
| -rw-r--r-- | run_request.go | 108 |
1 files changed, 61 insertions, 47 deletions
diff --git a/run_request.go b/run_request.go index bbb4f2d..174781d 100644 --- a/run_request.go +++ b/run_request.go @@ -12,79 +12,93 @@ import ( vegeta "github.com/tsenart/vegeta/v12/lib" ) +// +// RunRequest define the request to run HTTP or WebSocket target. +// type RunRequest struct { - Locker sync.Mutex - Target *Target - HttpTarget *HttpTarget - WebSocketTarget *WebSocketTarget + Locker sync.Mutex `json:"-"` + Target Target + HttpTarget HttpTarget + WebSocketTarget WebSocketTarget result *AttackResult } -func (rr *RunRequest) String() string { - return fmt.Sprintf("Target:%v HttpTarget:%v\n", rr.Target, rr.HttpTarget) -} - // -// mergeHttpTarget merge the request parameter into original target and HTTP -// target. +// generateRunRequest merge the run request with original target and HTTP +// target into new RunRequest. // -func (rr *RunRequest) mergeHttpTarget(env *Environment, origTarget *Target, origHttpTarget *HttpTarget) { - if rr.Target.Opts.Duration > 0 && rr.Target.Opts.Duration <= env.MaxAttackDuration { - origTarget.Opts.Duration = rr.Target.Opts.Duration +func generateRunRequest( + env *Environment, + req *RunRequest, + origTarget *Target, + origHttpTarget *HttpTarget, +) (outrr *RunRequest) { + if req.Target.Opts.Duration > 0 && req.Target.Opts.Duration <= env.MaxAttackDuration { + origTarget.Opts.Duration = req.Target.Opts.Duration } - - if rr.Target.Opts.RatePerSecond > 0 && rr.Target.Opts.RatePerSecond <= env.MaxAttackRate { - origTarget.Opts.RatePerSecond = rr.Target.Opts.RatePerSecond + if req.Target.Opts.RatePerSecond > 0 && req.Target.Opts.RatePerSecond <= env.MaxAttackRate { + origTarget.Opts.RatePerSecond = req.Target.Opts.RatePerSecond origTarget.Opts.ratePerSecond = vegeta.Rate{ - Freq: rr.Target.Opts.RatePerSecond, + Freq: req.Target.Opts.RatePerSecond, Per: time.Second, } } + if req.Target.Opts.Timeout > 0 && req.Target.Opts.Timeout <= DefaultAttackTimeout { + origTarget.Opts.Timeout = req.Target.Opts.Timeout + } + if origHttpTarget.IsCustomizable { + origHttpTarget.Method = req.HttpTarget.Method + origHttpTarget.Path = req.HttpTarget.Path + origHttpTarget.RequestType = req.HttpTarget.RequestType + } - if rr.Target.Opts.Timeout > 0 && rr.Target.Opts.Timeout <= DefaultAttackTimeout { - origTarget.Opts.Timeout = rr.Target.Opts.Timeout + outrr = &RunRequest{ + Target: *origTarget, + HttpTarget: *origHttpTarget, } - origTarget.Vars = rr.Target.Vars - rr.Target = origTarget + outrr.Target.Vars = req.Target.Vars + outrr.HttpTarget.Headers = req.HttpTarget.Headers + outrr.HttpTarget.Params = req.HttpTarget.Params - if origHttpTarget.IsCustomizable { - origHttpTarget.Method = rr.HttpTarget.Method - origHttpTarget.Path = rr.HttpTarget.Path - origHttpTarget.RequestType = rr.HttpTarget.RequestType - } - origHttpTarget.Headers = rr.HttpTarget.Headers - origHttpTarget.Params = rr.HttpTarget.Params - rr.HttpTarget = origHttpTarget + return outrr } // -// mergeWebSocketTarget merge the request parameter into original target and -// WebSocket target. +// generateWebSocketTarget merge the run request with original target and +// WebSocket target into new RunRequest // -func (rr *RunRequest) mergeWebSocketTarget(env *Environment, - origTarget *Target, origWebSocketTarget *WebSocketTarget, -) { - if rr.Target.Opts.Duration > 0 && rr.Target.Opts.Duration <= env.MaxAttackDuration { - origTarget.Opts.Duration = rr.Target.Opts.Duration +func generateWebSocketTarget( + env *Environment, + req *RunRequest, + origTarget *Target, + origWebSocketTarget *WebSocketTarget, +) (outrr *RunRequest) { + if req.Target.Opts.Duration > 0 && req.Target.Opts.Duration <= env.MaxAttackDuration { + origTarget.Opts.Duration = req.Target.Opts.Duration } - - if rr.Target.Opts.RatePerSecond > 0 && rr.Target.Opts.RatePerSecond <= env.MaxAttackRate { - origTarget.Opts.RatePerSecond = rr.Target.Opts.RatePerSecond + if req.Target.Opts.RatePerSecond > 0 && req.Target.Opts.RatePerSecond <= env.MaxAttackRate { + origTarget.Opts.RatePerSecond = req.Target.Opts.RatePerSecond origTarget.Opts.ratePerSecond = vegeta.Rate{ - Freq: rr.Target.Opts.RatePerSecond, + Freq: req.Target.Opts.RatePerSecond, Per: time.Second, } } + if req.Target.Opts.Timeout > 0 && req.Target.Opts.Timeout <= DefaultAttackTimeout { + origTarget.Opts.Timeout = req.Target.Opts.Timeout + } - if rr.Target.Opts.Timeout > 0 && rr.Target.Opts.Timeout <= DefaultAttackTimeout { - origTarget.Opts.Timeout = rr.Target.Opts.Timeout + outrr = &RunRequest{ + Target: *origTarget, + WebSocketTarget: *origWebSocketTarget, } + outrr.Target.Vars = req.Target.Vars + outrr.WebSocketTarget.Headers = req.WebSocketTarget.Headers + outrr.WebSocketTarget.Params = req.WebSocketTarget.Params - origTarget.Vars = rr.Target.Vars - rr.Target = origTarget + return outrr +} - origWebSocketTarget.Headers = rr.WebSocketTarget.Headers - origWebSocketTarget.Params = rr.WebSocketTarget.Params - rr.WebSocketTarget = origWebSocketTarget +func (rr *RunRequest) String() string { + return fmt.Sprintf("Target:%v HttpTarget:%v\n", rr.Target, rr.HttpTarget) } |
