1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.example;
18 
19 import com.android.tradefed.config.Option;
20 import com.android.tradefed.device.DeviceNotAvailableException;
21 import com.android.tradefed.device.IManagedTestDevice;
22 import com.android.tradefed.device.ITestDevice;
23 import com.android.tradefed.metrics.proto.MetricMeasurement.Metric;
24 import com.android.tradefed.result.ITestInvocationListener;
25 import com.android.tradefed.result.TestDescription;
26 import com.android.tradefed.testtype.IDeviceTest;
27 import com.android.tradefed.testtype.IRemoteTest;
28 
29 import java.util.HashMap;
30 
31 /**
32  * Reboots the device and verifies it comes back online.
33  * This simple reboot tests acts as an example integration test.
34  */
35 public class RebootTest implements IRemoteTest, IDeviceTest {
36     private ITestDevice mDevice = null;
37 
38     @Option(name = "num-of-reboots", description = "Number of times to reboot the device.")
39     private int mNumDeviceReboots = 1;
40 
41     /**
42      * {@inheritDoc}
43      */
44     @Override
run(ITestInvocationListener listener)45     public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
46         long start;
47         HashMap<String, Metric> emptyMap = new HashMap<>();
48         TestDescription testId;
49         start = System.currentTimeMillis();
50         listener.testRunStarted(String.format("#%d device reboots", mNumDeviceReboots),
51                                 mNumDeviceReboots);
52         try {
53             for (int testCount = 0; testCount < mNumDeviceReboots; testCount++) {
54                 testId = new TestDescription("RebootTest",
55                                             String.format("RebootLoop #%d", testCount));
56                 listener.testStarted(testId);
57                 try {
58                     getDevice().nonBlockingReboot();
59                     if (((IManagedTestDevice) getDevice()).getMonitor().waitForDeviceOnline()
60                             == null) {
61                         listener.testFailed(testId, "Reboot failed");
62                         ((IManagedTestDevice) getDevice()).recoverDevice();
63                     }
64                 }
65                 finally {
66                     listener.testEnded(testId, emptyMap);
67                 }
68             }
69         }
70         finally {
71             listener.testRunEnded(System.currentTimeMillis() - start, emptyMap);
72         }
73     }
74 
75     /**
76      * {@inheritDoc}
77      */
78     @Override
setDevice(ITestDevice device)79     public void setDevice(ITestDevice device) {
80         mDevice = device;
81     }
82 
83     /**
84      * {@inheritDoc}
85      */
86     @Override
getDevice()87     public ITestDevice getDevice() {
88         return mDevice;
89     }
90 }
91