MCPcopy
hub / github.com/tsenart/vegeta / attack

Function attack

attack.go:117–233  ·  view source on GitHub ↗

attack validates the attack arguments, sets up the required resources, launches the attack and writes the results

(opts *attackOpts)

Source from the content-addressed store, hash-verified

115// attack validates the attack arguments, sets up the
116// required resources, launches the attack and writes the results
117func attack(opts *attackOpts) (err error) {
118 if opts.maxWorkers == vegeta.DefaultMaxWorkers && opts.rate.Freq == 0 {
119 return fmt.Errorf("-rate=0 requires setting -max-workers")
120 }
121
122 if len(opts.resolvers) > 0 {
123 res, err := resolver.NewResolver(opts.resolvers)
124 if err != nil {
125 return err
126 }
127 net.DefaultResolver = res
128 }
129
130 net.DefaultResolver.PreferGo = true
131
132 files := map[string]io.Reader{}
133 for _, filename := range []string{opts.targetsf, opts.bodyf} {
134 if filename == "" {
135 continue
136 }
137 f, err := file(filename, false)
138 if err != nil {
139 return fmt.Errorf("error opening %s: %s", filename, err)
140 }
141 defer f.Close()
142 files[filename] = f
143 }
144
145 var body []byte
146 if bodyf, ok := files[opts.bodyf]; ok {
147 if body, err = io.ReadAll(bodyf); err != nil {
148 return fmt.Errorf("error reading %s: %s", opts.bodyf, err)
149 }
150 }
151
152 var (
153 tr vegeta.Targeter
154 src = files[opts.targetsf]
155 hdr = opts.headers.Header
156 proxyHdr = opts.proxyHeaders.Header
157 )
158
159 switch opts.format {
160 case vegeta.JSONTargetFormat:
161 tr = vegeta.NewJSONTargeter(src, body, hdr)
162 case vegeta.HTTPTargetFormat:
163 tr = vegeta.NewHTTPTargeter(src, body, hdr)
164 default:
165 return fmt.Errorf("format %q isn't one of [%s]",
166 opts.format, strings.Join(vegeta.TargetFormats, ", "))
167 }
168
169 if !opts.lazy {
170 targets, err := vegeta.ReadAllTargets(tr)
171 if err != nil {
172 return err
173 }
174 tr = vegeta.NewStaticTargeter(targets...)

Callers 1

attackCmdFunction · 0.70

Calls 9

RegisterMethod · 0.95
AttackMethod · 0.95
NewResolverFunction · 0.92
NewMetricsFunction · 0.92
NewHandlerFunction · 0.92
fileFunction · 0.85
tlsConfigFunction · 0.85
processAttackFunction · 0.85
CloseMethod · 0.65

Tested by

no test coverage detected