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)}, )) })