github.com/nya3jp/tast@v0.0.0-20230601000426-85c8e4d83a9b/src/go.chromium.org/tast/core/internal/devserver/devserver.go (about)

     1  // Copyright 2020 The ChromiumOS Authors
     2  // Use of this source code is governed by a BSD-style license that can be
     3  // found in the LICENSE file.
     4  
     5  package devserver
     6  
     7  import (
     8  	"context"
     9  	"fmt"
    10  	"time"
    11  
    12  	"go.chromium.org/tast/core/internal/logging"
    13  )
    14  
    15  // NewClient creates a Client from a list of devservers, DUT server or a TLW server.
    16  // If dutServer is non-empty, DUTServiceClient is returned.
    17  // If tlwServer is non-empty, TLWClient is returned.
    18  // If devserver contains 1 or more element, RealClient is returned.
    19  // If the oth are empty, PseudoClient is returned.
    20  func NewClient(ctx context.Context, devservers []string,
    21  	tlwServer, dutName, dutServer, swarmingTaskID, buildBucketID string) (Client, error) {
    22  	if dutServer != "" {
    23  		if len(devservers) > 0 {
    24  			return nil, fmt.Errorf("both dutServer (%q) and devservers (%v) are set", dutServer, devservers)
    25  		}
    26  		cl, err := NewDUTServiceClient(ctx, dutServer)
    27  		if err != nil {
    28  			return nil, err
    29  		}
    30  		logging.Info(ctx, "Devserver status: using DUT service client")
    31  		return cl, nil
    32  	}
    33  	if tlwServer != "" {
    34  		if len(devservers) > 0 {
    35  			return nil, fmt.Errorf("both tlwServer (%q) and devservers (%v) are set", tlwServer, devservers)
    36  		}
    37  		cl, err := NewTLWClient(ctx, tlwServer, dutName)
    38  		if err != nil {
    39  			return nil, err
    40  		}
    41  		logging.Info(ctx, "Devserver status: using TLW client")
    42  		return cl, nil
    43  	}
    44  	if len(devservers) == 0 {
    45  		logging.Info(ctx, "Devserver status: using pseudo client")
    46  		return NewPseudoClient(), nil
    47  	}
    48  
    49  	const timeout = 3 * time.Second
    50  	ctx, cancel := context.WithTimeout(ctx, timeout)
    51  	defer cancel()
    52  
    53  	cl := NewRealClient(ctx, devservers,
    54  		&RealClientOptions{
    55  			SwarmingTaskID: swarmingTaskID,
    56  			BuildBucketID:  buildBucketID,
    57  		})
    58  	logging.Infof(ctx, "Devserver status: %s", cl.Status())
    59  	return cl, nil
    60  }