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