blob: c04b3a22ec9922b23fe5baab6396801cde1059c3 [file] [log] [blame]
// Copyright 2022 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package hps
import (
"context"
"time"
"github.com/golang/protobuf/ptypes/empty"
wrappers "github.com/golang/protobuf/ptypes/wrappers"
"google.golang.org/grpc"
"chromiumos/tast/common/hps/hpsutil"
"chromiumos/tast/common/media/caps"
"chromiumos/tast/ctxutil"
"chromiumos/tast/remote/bundles/cros/hps/utils"
"chromiumos/tast/rpc"
pb "chromiumos/tast/services/cros/hps"
"chromiumos/tast/testing"
)
func init() {
testing.AddTest(&testing.Test{
Func: CameraboxLoLOff,
LacrosStatus: testing.LacrosVariantUnneeded,
Desc: "Verify that the HPS can dim the screen within the right time range when LoL is off",
Data: []string{hpsutil.PersonPresentPageArchiveFilename},
Contacts: []string{
"eunicesun@google.com",
"mblsha@google.com",
"chromeos-hps-swe@google.com",
},
Attr: []string{"group:camerabox", "group:hps", "hps_perbuild"},
Timeout: 6 * time.Minute,
SoftwareDeps: []string{"hps", "chrome", caps.BuiltinCamera},
ServiceDeps: []string{"tast.cros.browser.ChromeService", "tast.cros.hps.HpsService"},
Vars: []string{"tablet", "grpcServerPort"},
})
}
func CameraboxLoLOff(ctx context.Context, s *testing.State) {
dut := s.DUT()
// Creating hps context.
hctx, err := hpsutil.NewHpsContext(ctx, "", hpsutil.DeviceTypeBuiltin, s.OutDir(), dut.Conn())
if err != nil {
s.Fatal("Error creating HpsContext: ", err)
}
// Connecting to the other tablet that will render the picture.
hostPaths, displayChart, err := utils.SetupDisplay(ctx, s)
if err != nil {
s.Fatal("Error setting up display: ", err)
}
displayChart.Display(ctx, hostPaths[utils.ZeroPresence])
// Connecting to Taeko.
cleanupCtx, cancel := ctxutil.Shorten(ctx, time.Minute)
defer cancel()
cl, err := rpc.Dial(ctx, dut, s.RPCHint())
if err != nil {
s.Fatal("Failed to setup grpc: ", err)
}
defer cl.Close(cleanupCtx)
// Wait for Dbus to be available.
client := pb.NewHpsServiceClient(cl.Conn)
if _, err := client.WaitForDbus(ctx, &empty.Empty{}); err != nil {
s.Fatal("Failed to wait for dbus command to be available: ", err)
}
req := &pb.StartUIWithCustomScreenPrivacySettingRequest{
Setting: utils.LockOnLeave,
Enable: true,
}
// Change the setting to true so that we can get the quickdim delay time.
if _, err := client.StartUIWithCustomScreenPrivacySetting(hctx.Ctx, req, grpc.WaitForReady(true)); err != nil {
s.Fatal("Failed to change setting: ", err)
}
// Get the delays for the quick dim.
delayReq := &wrappers.BoolValue{
Value: true,
}
quickDimMetrics, err := client.RetrieveDimMetrics(hctx.Ctx, delayReq)
if err != nil {
s.Fatal("Error getting delay settings: ", err)
}
req.Enable = false
if _, err := client.StartUIWithCustomScreenPrivacySetting(hctx.Ctx, req, grpc.WaitForReady(true)); err != nil {
s.Fatal("Failed to change setting: ", err)
}
brightness, err := utils.GetBrightness(hctx.Ctx, dut.Conn())
if err != nil {
s.Fatal("Error failed to get brightness: ", err)
}
// Render hps-internal page for debugging before waiting for dim.
if _, err := client.OpenHPSInternalsPage(hctx.Ctx, &empty.Empty{}); err != nil {
s.Fatal("Error open hps-internals")
}
// It should not dim after 10s.
testing.Sleep(ctx, quickDimMetrics.DimDelay.AsDuration())
newBrightness, err := utils.GetBrightness(hctx.Ctx, dut.Conn())
if err != nil {
s.Fatal("Error when getting brightness: ", err)
}
if newBrightness != brightness {
s.Fatal("Unexpected brightness change")
}
// It should not lock after quick dim delay.
testing.Sleep(ctx, quickDimMetrics.ScreenOffDelay.AsDuration())
newBrightness, err = utils.GetBrightness(hctx.Ctx, dut.Conn())
if err != nil {
s.Fatal("Error when getting brightness: ", err)
}
if newBrightness != brightness {
s.Fatal("Unexpected brightness change")
}
}