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  }