acvptool: factor out getResultsWithRetry

Change-Id: Iae74a5d82715e16eacfc73e02a1b8190d06cdbc8
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/55607
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: Adam Langley <agl@google.com>
diff --git a/util/fipstools/acvp/acvptool/acvp.go b/util/fipstools/acvp/acvptool/acvp.go
index aa1fd77..ecfe088 100644
--- a/util/fipstools/acvp/acvptool/acvp.go
+++ b/util/fipstools/acvp/acvptool/acvp.go
@@ -428,6 +428,32 @@
 	return server, nil
 }
 
+func getResultsWithRetry(server *acvp.Server, url string) (bool, error) {
+FetchResults:
+	for {
+		var results acvp.SessionResults
+		if err := server.Get(&results, trimLeadingSlash(url)+"/results"); err != nil {
+			return false, errors.New("failed to fetch session results: " + err.Error())
+		}
+
+		if results.Passed {
+			log.Print("Test passed")
+			return true, nil
+		}
+
+		for _, result := range results.Results {
+			if result.Status == "incomplete" {
+				log.Print("Server hasn't finished processing results. Waiting 10 seconds.")
+				time.Sleep(10 * time.Second)
+				continue FetchResults
+			}
+		}
+
+		log.Printf("Server did not accept results: %#v", results)
+		return false, nil
+	}
+}
+
 func main() {
 	flag.Parse()
 
@@ -683,26 +709,9 @@
 		os.Exit(0)
 	}
 
-FetchResults:
-	for {
-		var results acvp.SessionResults
-		if err := server.Get(&results, trimLeadingSlash(url)+"/results"); err != nil {
-			log.Fatalf("Failed to fetch session results: %s", err)
-		}
-
-		if results.Passed {
-			log.Print("Test passed")
-			break
-		}
-
-		for _, result := range results.Results {
-			if result.Status == "incomplete" {
-				log.Print("Server hasn't finished processing results. Waiting 10 seconds.")
-				time.Sleep(10 * time.Second)
-				continue FetchResults
-			}
-		}
-
-		log.Fatalf("Server did not accept results: %#v", results)
+	if ok, err := getResultsWithRetry(server, url); err != nil {
+		log.Fatal(err)
+	} else if !ok {
+		os.Exit(1)
 	}
 }