Use separate availability slots for rescheduling test Choose random slots as before, but add slot before and after (where possible) so we get a slot with the same merchant/service/staff/room
diff --git a/testclient/bookingClient.go b/testclient/bookingClient.go index e77546c..efc8cb3 100644 --- a/testclient/bookingClient.go +++ b/testclient/bookingClient.go
@@ -200,16 +200,22 @@ } var av []*fpb.Availability + var avForRescheduling []*fpb.Availability if !*cancelAllBookings { // Build availablility records. if *availabilityFeed == "" { log.Fatal("please set availability_feed flag if you wish to test additional flows") } - av, err = utils.AvailabilityFrom(*availabilityFeed, *testSlots) + av, err = utils.AvailabilityFrom(*availabilityFeed, *testSlots, false) if err != nil { - log.Fatal(err.Error()) + log.Fatalf("Failed to get availability: %v", err.Error()) } stats.TotalSlotsProcessed += len(av) + + avForRescheduling, err = utils.AvailabilityFrom(*availabilityFeed, *testSlots, true) + if err != nil { + log.Fatalf("Failed to get availability for rescheduling test: %v", err.Error()) + } } // AvailabilityCheck Flow @@ -305,7 +311,7 @@ if *rescheduleFlow || *allFlows { utils.LogFlow("Rescheduling", "Start") stats.ReschedulingSuccess = true - if err = api.Rescheduling(av, conn); err != nil { + if err = api.Rescheduling(avForRescheduling, conn); err != nil { log.Println(err.Error()) stats.ReschedulingSuccess = false }
diff --git a/utils/utils.go b/utils/utils.go index c95e198..fa87aa6 100644 --- a/utils/utils.go +++ b/utils/utils.go
@@ -164,7 +164,7 @@ return nil, errors.New("no valid ticket types found in service feed, please update service feed and retry") } - availabilities, err := AvailabilityFrom(availabilityFeed, testSlots) + availabilities, err := AvailabilityFrom(availabilityFeed, testSlots, false) if err != nil { return nil, err } @@ -186,7 +186,7 @@ } // AvailabilityFrom parses the file specified in availabilityFeed, returning a random permutation of availability data, maximum entries specified in testSlots -func AvailabilityFrom(availabilityFeed string, testSlots int) ([]*fpb.Availability, error) { +func AvailabilityFrom(availabilityFeed string, testSlots int, forRescheduling bool) ([]*fpb.Availability, error) { LogFlow("Parse Input Feed", "Start") defer LogFlow("Parse Input Feed", "End") @@ -220,6 +220,15 @@ nums := rand.Perm(len(rawAvailability))[0:testSlots] for _, n := range nums { finalAvailability = append(finalAvailability, rawAvailability[n]) + if !forRescheduling { + continue + } + if n > 0 { + finalAvailability = append(finalAvailability, rawAvailability[n-1]) + } + if n < testSlots-1 { + finalAvailability = append(finalAvailability, rawAvailability[n+1]) + } } } log.Printf("Selected %d slots out of a possible %d", len(finalAvailability), len(rawAvailability))