1 /*
2  * Copyright (C) 2014 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.helper;
18 
19 import java.io.File;
20 import java.io.FileInputStream;
21 import java.io.FileNotFoundException;
22 import java.io.FileWriter;
23 import java.io.IOException;
24 import java.util.List;
25 import java.util.Properties;
26 import android.os.Bundle;
27 import android.os.Environment;
28 
29 import android.os.SystemClock;
30 import android.support.test.uiautomator.UiAutomatorTestCase;
31 import android.test.InstrumentationTestRunner;
32 import android.util.Log;
33 
34 public class PowerTestHelper extends UiAutomatorTestCase {
35     private final static String PARAM_CONFIG = "conf";
36     private final static String SD_CARD_PATH =
37         Environment.getExternalStorageDirectory().getAbsolutePath() + "/";
38     private final static String POWER_OUTPUT = SD_CARD_PATH + "autotester.log";
39     private final static String PROPERTY_FILE_NAME = SD_CARD_PATH + "PowerTests.conf";
40     private final static long SYNC_DELAY = 10 * 1000; // 10 secs
41     private final static String TAG = "PowerTestHelper";
42 
43     private Bundle mParams;
44 
45     @Override
getParams()46     public Bundle getParams() {
47         if (mParams == null) {
48             mParams = ((InstrumentationTestRunner) getInstrumentation()).getArguments();
49         }
50         return mParams;
51     }
52 
53     @Override
setUp()54     protected void setUp() throws Exception {
55         super.setUp();
56         mParams = getParams();
57         assertNotNull("mParams is null", mParams);
58 
59         // Wait for USB to be disconnected by the test harness
60         SystemClock.sleep(SYNC_DELAY);
61     }
62 
63     /**
64      * Expects a file from the command line via conf param or default following
65      * format each on its own line. <code>
66      *    key=Value
67      *    Browser_URL1=cnn.com
68      *    Browser_URL2=google.com
69      *    Camera_ShutterDelay=1000
70      *    etc...
71      * </code>
72      * @param Bundle params
73      * @param key
74      * @return the value of the property else defaultValue
75      * @throws FileNotFoundException
76      * @throws IOException
77      */
getPropertyString(String key)78     protected String getPropertyString(String key)
79             throws FileNotFoundException, IOException {
80         String value = getProperty(key);
81         if (value != null && !value.isEmpty())
82             return value;
83         return null;
84     }
85 
86     /**
87      * Expects a file from the command line via conf param or default following
88      * format each on its own line. <code>
89      *    key=Value
90      *    Browser_URL1=cnn.com
91      *    Browser_URL2=google.com
92      *    Camera_ShutterDelay=1000
93      *    etc...
94      * </code>
95      * @param Bundle params
96      * @param key
97      * @return the value of the property else defaultValue
98      * @throws FileNotFoundException
99      * @throws IOException
100      */
getPropertyLong(String key)101     protected long getPropertyLong(String key)
102             throws FileNotFoundException, IOException {
103         String value = getProperty(key);
104         if (value != null && !value.trim().isEmpty())
105             return Long.valueOf(value.trim());
106         return 0;
107     }
108 
getProperty(String key)109     private String getProperty(String key)
110             throws FileNotFoundException, IOException {
111         String value;
112 
113         Properties prop = new Properties();
114         FileInputStream inputStream = new FileInputStream(mParams.getString(PARAM_CONFIG,
115                 PROPERTY_FILE_NAME));
116         prop.load(inputStream);
117         value = prop.getProperty(key);
118         inputStream.close();
119 
120         return value;
121     }
122 
123     /**
124      * The power log capture when the measuremnt start and end. It will be
125      * merged with the monsoon raw power data to get the average power usage in
126      * that particular time frame.
127      * @param logType
128      * @param testCase
129      * @param delay
130      * @throws IOException
131      */
writePowerLog(String logType, String testCase, long delay)132     protected void writePowerLog(String logType, String testCase, long delay)
133             throws IOException {
134         writePowerLog(logType, testCase, System.currentTimeMillis(), delay);
135     }
136 
137     /**
138      * Power log capture the time when the measurement start and end. It will be
139      * merged with the monsoon raw power data to get the average power usage in
140      * that particular time frame.
141      * @param logType
142      * @param testCase : Test case name
143      * @param time : Specific time stamp
144      * @param delay : Delay for the actual log time.
145      * @throws IOException
146      */
writePowerLog(String logType, String testCase, long time, long delay)147     protected void writePowerLog(String logType, String testCase, long time,
148             long delay) throws IOException {
149         FileWriter outputWriter = new FileWriter(new File(POWER_OUTPUT), true);
150         outputWriter.write(String.format("%d %s %s\n", (time + delay),
151                 logType, testCase));
152         outputWriter.close();
153     }
154 
writePowerLogStart(String testCase)155     protected void writePowerLogStart(String testCase) throws IOException {
156         writePowerLog("AUTOTEST_TEST_BEGIN", testCase, 5 * 1000);
157     }
158 
writePowerLogEnd(String testCase)159     protected void writePowerLogEnd(String testCase) throws IOException {
160         writePowerLog("AUTOTEST_TEST_SUCCESS", testCase, 0);
161     }
162 
writePowerLogIdleStart(String testCase, long delay)163     protected void writePowerLogIdleStart(String testCase, long delay) throws IOException {
164         writePowerLog("AUTOTEST_TEST_BEGIN", testCase, delay);
165     }
166 
writePowerLogIdleEnd(String testCase, long delay)167     protected void writePowerLogIdleEnd(String testCase, long delay) throws IOException {
168         writePowerLog("AUTOTEST_TEST_SUCCESS", testCase, delay);
169     }
170 }
171