Files
old-vegeta/lib/targets.go

71 lines
1.7 KiB
Go
Raw Normal View History

package vegeta
2013-08-13 18:51:00 +02:00
import (
"bufio"
"fmt"
"io"
"math/rand"
"net/http"
"strings"
)
// Targets represents the http.Requests which will be issued during the test
2013-08-13 18:51:00 +02:00
type Targets []*http.Request
// NewTargetsFrom reads targets out of a line separated source skipping empty lines
func NewTargetsFrom(source io.Reader) (Targets, error) {
2013-08-16 19:46:40 +02:00
scanner := bufio.NewScanner(source)
lines := make([]string, 0)
2013-08-16 19:46:40 +02:00
for scanner.Scan() {
line := scanner.Text()
2013-09-08 03:27:33 +01:00
if line = strings.TrimSpace(line); line != "" && line[0:2] != "//" {
// Skipping comments or blank lines
2013-08-21 13:04:52 -04:00
lines = append(lines, line)
2013-08-13 18:51:00 +02:00
}
}
if err := scanner.Err(); err != nil {
return Targets{}, err
}
return NewTargets(lines)
}
// NewTargets instantiates Targets from a slice of strings
func NewTargets(lines []string) (Targets, error) {
targets := make([]*http.Request, 0)
for _, line := range lines {
2013-08-13 18:51:00 +02:00
parts := strings.SplitN(line, " ", 2)
if len(parts) != 2 {
return targets, fmt.Errorf("Invalid request format: `%s`", line)
}
// Build request
req, err := http.NewRequest(parts[0], parts[1], nil)
if err != nil {
return targets, fmt.Errorf("Failed to build request: %s", err)
}
targets = append(targets, req)
}
return targets, nil
}
// Shuffle randomly alters the order of Targets with the provided seed
2013-08-16 19:38:57 +02:00
func (t Targets) Shuffle(seed int64) {
rand.Seed(seed)
for i, rnd := range rand.Perm(len(t)) {
2013-09-09 03:07:04 +01:00
t[i], t[rnd] = t[rnd], t[i]
2013-08-13 18:51:00 +02:00
}
}
2013-09-20 18:17:29 +02:00
// SetHeader sets the passed request header in all Targets
// by making a copy for each
2013-09-20 18:17:29 +02:00
func (t Targets) SetHeader(header http.Header) {
for _, target := range t {
target.Header = make(http.Header, len(header))
for k, vs := range header {
target.Header[k] = make([]string, len(vs))
copy(target.Header[k], vs)
}
2013-09-20 18:17:29 +02:00
}
}