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 }