Просмотр исходного кода

Run CAVP tests in parallel.

Change-Id: I11810afab77469e3a346954085b3b4db1ef9ed14
Reviewed-on: https://boringssl-review.googlesource.com/15905
Reviewed-by: Martin Kreichgauer <martinkr@google.com>
Reviewed-by: Adam Langley <agl@google.com>
kris/onging/CECPQ3_patch15
Adam Langley 7 лет назад
Родитель
Сommit
02690f7583
1 измененных файлов: 45 добавлений и 13 удалений
  1. +45
    -13
      fipsoracle/run_cavp.go

+ 45
- 13
fipsoracle/run_cavp.go Просмотреть файл

@@ -9,7 +9,10 @@ import (
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"sync"
"time"
)

var (
@@ -287,6 +290,32 @@ var allTestSuites = []*testSuite{
&tdesTests,
}

// testInstance represents a specific test in a testSuite.
type testInstance struct {
suite *testSuite
testIndex int
}

func worker(wg *sync.WaitGroup, work <-chan testInstance) {
defer wg.Done()

for ti := range work {
test := ti.suite.tests[ti.testIndex]

if err := doTest(ti.suite, test); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(2)
}

if !test.noFAX {
if err := compareFAX(ti.suite, test); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(3)
}
}
}
}

func main() {
flag.Parse()

@@ -295,21 +324,22 @@ func main() {
os.Exit(1)
}

for _, suite := range allTestSuites {
for _, test := range suite.tests {
if err := doTest(suite, test); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(2)
}
work := make(chan testInstance)
var wg sync.WaitGroup

if !test.noFAX {
if err := compareFAX(suite, test); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err)
os.Exit(3)
}
}
for i := 0; i < runtime.NumCPU(); i++ {
wg.Add(1)
go worker(&wg, work)
}

for _, suite := range allTestSuites {
for i := range suite.tests {
work <- testInstance{suite, i}
}
}

close(work)
wg.Wait()
}

func doTest(suite *testSuite, test test) error {
@@ -329,11 +359,13 @@ func doTest(suite *testSuite, test test) error {
cmd.Stderr = os.Stderr

cmdLine := strings.Join(append([]string{*oraclePath}, args...), " ")
fmt.Println("Running", cmdLine)
startTime := time.Now()
if err := cmd.Run(); err != nil {
return fmt.Errorf("cannot run command for %q %q (%s): %s", suite.getDirectory(), test.inFile, cmdLine, err)
}

fmt.Printf("%s (%ds)\n", cmdLine, int(time.Since(startTime).Seconds()))

return nil
}



Загрузка…
Отмена
Сохранить