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