func run(url, proxy string, numRequests, concurrentRequests, rateLimit int) ([]*data.Point, error) {
	fmt.Fprintf(os.Stderr, "Running benchmark with %d requests, %d concurrency, and %d rate limit\n", numRequests, concurrentRequests, rateLimit)
	args := []string{
		"-x", proxy,
		"-n", strconv.Itoa(numRequests),
		"-c", strconv.Itoa(concurrentRequests),
		"-q", strconv.Itoa(rateLimit),
		"-o", "csv",
		url,
	}

	heyData, err := exec.Command("hey", args...).Output()
	if err != nil {
		return nil, fmt.Errorf("hey error: %s\nData:\n%s", err, string(heyData))
	}

	dataPoints, err := data.Parse(string(heyData))
	if err != nil {
		return nil, fmt.Errorf("parse error: %s\nData:\n%s", err, string(heyData))
	}

	return dataPoints, nil
}
var extraColumnInput string = `start-time,response-time,dummy-header
2016-11-01T21:04:42.760279114Z,0.0280,0.123`

var badHeadersInput string = `dummy-header,dummy-header-2
2016-11-01T21:04:42.760279114Z,0.0280`

var missingColumnInput string = `start-time
2016-11-01T21:04:42.760279114Z`

var badValuesInput string = `start-time,response-time
2016-11-01T21:04:42.760279114Z`

var _ = Describe("Data", func() {
	Describe("Parse", func() {
		It("unmarshals the input correctly", func() {
			dataPoints, err := data.Parse(input)
			Expect(err).NotTo(HaveOccurred())
			Expect(dataPoints).To(ConsistOf(
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 760279114, time.UTC), time.Duration(28000000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 760213269, time.UTC), time.Duration(28000000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 760373651, time.UTC), time.Duration(27900000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 760159771, time.UTC), time.Duration(28200000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 760090065, time.UTC), time.Duration(29100000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 788256168, time.UTC), time.Duration(13800000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 788331398, time.UTC), time.Duration(13700000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 788291332, time.UTC), time.Duration(13800000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 788256153, time.UTC), time.Duration(14100000)},
				&data.Point{time.Date(2016, 11, 1, 21, 04, 42, 789231777, time.UTC), time.Duration(13600000)},
			))
		})