github.com/nya3jp/tast@v0.0.0-20230601000426-85c8e4d83a9b/src/go.chromium.org/tast/core/internal/crosbundle/features.go (about) 1 // Copyright 2021 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 crosbundle 6 7 import ( 8 "context" 9 "fmt" 10 11 "go.chromium.org/tast/core/internal/protocol" 12 "go.chromium.org/tast/core/lsbrelease" 13 14 frameworkprotocol "go.chromium.org/tast/core/framework/protocol" 15 ) 16 17 // GetDUTInfo implements the GetDUTInfo RPC method for ChromeOS. 18 func GetDUTInfo(ctx context.Context, req *protocol.GetDUTInfoRequest) (*protocol.GetDUTInfoResponse, error) { 19 kvs, err := lsbrelease.Load() 20 if err != nil { 21 return nil, err 22 } 23 24 var osVersion, defaultBuildArtifactsURL string 25 if bp := kvs[lsbrelease.BuilderPath]; bp != "" { 26 osVersion = bp 27 defaultBuildArtifactsURL = "gs://chromeos-image-archive/" + bp + "/" 28 } else { 29 // Sometimes CHROMEOS_RELEASE_BUILDER_PATH is not in /etc/lsb-release. 30 // Make up the string in this case. 31 board := kvs[lsbrelease.Board] 32 version := kvs[lsbrelease.Version] 33 milestone := kvs[lsbrelease.Milestone] 34 buildType := kvs[lsbrelease.BuildType] 35 osVersion = fmt.Sprintf("%vR%v-%v (%v)", board, milestone, version, buildType) 36 } 37 38 var softwareFeatures *frameworkprotocol.SoftwareFeatures 39 var hardwareFeatures *frameworkprotocol.HardwareFeatures 40 41 if req.GetFeatures() { 42 softwareFeatures, err = detectSoftwareFeatures(ctx, req.GetExtraUseFlags()) 43 if err != nil { 44 return nil, err 45 } 46 hardwareFeatures, err = detectHardwareFeatures(ctx) 47 if err != nil { 48 return nil, err 49 } 50 } 51 52 return &protocol.GetDUTInfoResponse{ 53 DutInfo: &protocol.DUTInfo{ 54 Features: &frameworkprotocol.DUTFeatures{ 55 Software: softwareFeatures, 56 Hardware: hardwareFeatures, 57 }, 58 OsVersion: osVersion, 59 DefaultBuildArtifactsUrl: defaultBuildArtifactsURL, 60 }, 61 }, nil 62 }