From e246add2ca1c029ea927be7c0370f53405f02a86 Mon Sep 17 00:00:00 2001 From: Billy Lau Date: Tue, 15 Nov 2016 11:53:00 +0000 Subject: Added a retry clause when doing battery check in adb.go Some devices may not boot up fast enough when battery check is done as it currently is in adb.go. Therefore, getBatteryLevel() is modified to take in a parameter to determine the number of times to retry before giving up. --- vm/adb/adb.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/vm/adb/adb.go b/vm/adb/adb.go index 49a29d418..4d5bacb6d 100644 --- a/vm/adb/adb.go +++ b/vm/adb/adb.go @@ -259,7 +259,7 @@ func (inst *instance) checkBatteryLevel() error { minLevel = 20 requiredLevel = 30 ) - val, err := inst.getBatteryLevel() + val, err := inst.getBatteryLevel(3) if err != nil { return err } @@ -272,7 +272,7 @@ func (inst *instance) checkBatteryLevel() error { if !vm.SleepInterruptible(time.Minute) { return nil } - val, err = inst.getBatteryLevel() + val, err = inst.getBatteryLevel(0) if err != nil { return err } @@ -283,10 +283,20 @@ func (inst *instance) checkBatteryLevel() error { return nil } -func (inst *instance) getBatteryLevel() (int, error) { +func (inst *instance) getBatteryLevel(numRetry int) (int, error) { out, err := inst.adb("shell", "dumpsys battery | grep level:") - if err != nil { - return 0, err + + // allow for retrying for devices that does not boot up so fast + for ; numRetry >= 0 && err != nil; numRetry-- { + if numRetry > 0 { + // sleep for 5 seconds before retrying + time.Sleep(5 * time.Second) + out, err = inst.adb("shell", "dumpsys battery | grep level:") + } else { + if err != nil { + return 0, err + } + } } val := 0 for _, c := range out { -- cgit mrf-deployment