github.com/onsi/ginkgo@v1.16.6-0.20211118180735-4e1925ba4c95/internal/parallel_support/client_server.go (about)

     1  package parallel_support
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  	"time"
     8  
     9  	"github.com/onsi/ginkgo/reporters"
    10  	"github.com/onsi/ginkgo/types"
    11  )
    12  
    13  type BeforeSuiteState struct {
    14  	Data  []byte
    15  	State types.SpecState
    16  }
    17  
    18  type ParallelIndexCounter struct {
    19  	Index int
    20  }
    21  
    22  var ErrorGone = fmt.Errorf("gone")
    23  var ErrorFailed = fmt.Errorf("failed")
    24  var ErrorEarly = fmt.Errorf("early")
    25  
    26  var POLLING_INTERVAL = 50 * time.Millisecond
    27  
    28  type Server interface {
    29  	Start()
    30  	Close()
    31  	Address() string
    32  	RegisterAlive(node int, alive func() bool)
    33  	GetSuiteDone() chan interface{}
    34  	GetOutputDestination() io.Writer
    35  	SetOutputDestination(io.Writer)
    36  }
    37  
    38  type Client interface {
    39  	Connect() bool
    40  	Close() error
    41  
    42  	PostSuiteWillBegin(report types.Report) error
    43  	PostDidRun(report types.SpecReport) error
    44  	PostSuiteDidEnd(report types.Report) error
    45  	PostSynchronizedBeforeSuiteCompleted(state types.SpecState, data []byte) error
    46  	BlockUntilSynchronizedBeforeSuiteData() (types.SpecState, []byte, error)
    47  	BlockUntilNonprimaryProcsHaveFinished() error
    48  	BlockUntilAggregatedNonprimaryProcsReport() (types.Report, error)
    49  	FetchNextCounter() (int, error)
    50  	PostAbort() error
    51  	ShouldAbort() bool
    52  	Write(p []byte) (int, error)
    53  }
    54  
    55  func NewServer(parallelTotal int, reporter reporters.Reporter) (Server, error) {
    56  	if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" {
    57  		return newHttpServer(parallelTotal, reporter)
    58  	} else {
    59  		return newRPCServer(parallelTotal, reporter)
    60  	}
    61  }
    62  
    63  func NewClient(serverHost string) Client {
    64  	if os.Getenv("GINKGO_PARALLEL_PROTOCOL") == "HTTP" {
    65  		return newHttpClient(serverHost)
    66  	} else {
    67  		return newRPCClient(serverHost)
    68  	}
    69  }