1 /* 2 * Copyright (C) 2016 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 package com.google.android.chre.test.chqts; 17 18 import org.junit.Assert; 19 20 /** 21 * These values come from nanoapps/general_test/test_names.h and 22 * nanoapps/shared/send_message.h. 23 * 24 * TODO: This is very fragile. We should try to automate keeping this 25 * in sync. That's made mildly more challenging by different 26 * language constructs and naming conventions. 27 */ 28 public class ContextHubTestConstants { 29 /** 30 * Names of the tests we support. 31 */ 32 public enum TestNames { 33 /** 34 * Value which should never be used. 35 */ 36 INVALID_TEST(0x0400), 37 38 /** 39 * Test: ContextHubSimpleGeneralNanoAppTests[HelloWorld] 40 */ 41 HELLO_WORLD(0x0401), 42 43 /** 44 * Test: ContextHubSimpleHeapAllocNanoAppTest 45 */ 46 SIMPLE_HEAP_ALLOC(0x0402), 47 48 /** 49 * Test: ContextHubSimpleGeneralNanoAppTests[HeapAllocStress] 50 */ 51 HEAP_ALLOC_STRESS(0x0403), 52 53 /** 54 * Test: ContextHubGetTimeNanoAppTest 55 */ 56 GET_TIME(0x0404), 57 58 /** 59 * Test: ContextHubEventBetweenAppsNanoAppTest 60 */ 61 EVENT_BETWEEN_APPS0(0x0405), 62 63 /** 64 * Test: ContextHubEventBetweenAppsNanoAppTest 65 */ 66 EVENT_BETWEEN_APPS1(0x0406), 67 68 /** 69 * Test: ContextHubSimpleGeneralNanoAppTests[SendEvent] 70 */ 71 SEND_EVENT(0x0407), 72 73 /** 74 * Test: ContextHubSimpleGeneralNanoAppTests[BasicAccelerometer] 75 */ 76 BASIC_ACCELEROMETER(0x0408), 77 78 /** 79 * Test: ContextHubSimpleGeneralNanoAppTests[BasicInstantMotionDetect] 80 */ 81 BASIC_INSTANT_MOTION_DETECT(0x0409), 82 83 /** 84 * Test: ContextHubSimpleGeneralNanoAppTests[BasicStationaryDetect] 85 */ 86 BASIC_STATIONARY_DETECT(0x040A), 87 88 /** 89 * Test: ContextHubSimpleGeneralNanoAppTests[BasicGyroscope] 90 */ 91 BASIC_GYROSCOPE(0x040B), 92 93 /** 94 * Test: ContextHubSimpleGeneralNanoAppTests[BasicMagnetometer] 95 */ 96 BASIC_MAGNETOMETER(0x040C), 97 98 /** 99 * Test: ContextHubSimpleGeneralNanoAppTests[BasicBarometer] 100 */ 101 BASIC_BAROMETER(0x040D), 102 103 /** 104 * Test: ContextHubSimpleGeneralNanoAppTests[BasicLightSensor] 105 */ 106 BASIC_LIGHT_SENSOR(0x040E), 107 108 /** 109 * Test: ContextHubSimpleGeneralNanoAppTests[BasicProximity] 110 */ 111 BASIC_PROXIMITY(0x040F), 112 113 /** 114 * Test: ContextHubSimpleGeneralNanoAppTests[VersionConsistency] 115 */ 116 VERSION_CONSISTENCY(0x0410), 117 118 /** 119 * Test: ContextHubSimpleGeneralNanoAppTests[LoggingConsistency] 120 */ 121 LOGGING_CONSISTENCY(0x0411), 122 123 /** 124 * Test: ContextHubSendMessageToHostNanoAppTest 125 */ 126 SEND_MESSAGE_TO_HOST(0x0412), 127 128 /** 129 * Test: ContextHubSimpleGeneralNanoAppTests[TimerSet] 130 */ 131 TIMER_SET(0x0413), 132 133 /** 134 * Test: ContextHubSimpleGeneralNanoAppTests[TimerCancel] 135 */ 136 TIMER_CANCEL(0x0414), 137 138 /** 139 * Test: ContextHubSimpleGeneralNanoAppTests[TimerStress] 140 */ 141 TIMER_STRESS(0x0415), 142 143 /** 144 * Test: ContextHubSimpleGeneralNanoAppTests[SendEventStress] 145 */ 146 SEND_EVENT_STRESS(0x0416), 147 148 /** 149 * Test: ContextHubSimpleGeneralNanoAppTests[HeapExhaustionStability] 150 */ 151 HEAP_EXHAUSTION_STABILITY(0x0417), 152 153 /** 154 * Test: ContextHubSimpleGeneralNanoAppTests[GnssCapabilities] 155 */ 156 GNSS_CAPABILITIES(0x0418), 157 158 /** 159 * Test: ContextHubSimpleGeneralNanoAppTests[WifiCapabilities] 160 */ 161 WIFI_CAPABILITIES(0x0419), 162 163 /** 164 * Test: ContextHubSimpleGeneralNanoAppTests[WwanCapabilities] 165 */ 166 WWAN_CAPABILITIES(0x041A), 167 168 /** 169 * Test: ContextHubSimpleGeneralNanoAppTests[SensorInfoTest] 170 */ 171 SENSOR_INFO(0x041B), 172 173 /** 174 * Test: ContextHubSimpleGeneralNanoAppTests[WwanCellInfo] 175 */ 176 WWAN_CELL_INFO(0x041C), 177 178 /** 179 * Test: ContextHubEstimatedHostTimeTest 180 */ 181 ESTIMATED_HOST_TIME(0x041D), 182 183 /** 184 * Test: ContextHubNanoAppInfoByIdTests[NanoappInfoByAppId] 185 */ 186 NANOAPP_INFO_BY_APP_ID(0x041E), 187 188 /** 189 * Test: ContextHubNanoAppInfoByIdTests[NanoappInfoByInstanceId] 190 */ 191 NANOAPP_INFO_BY_INSTANCE_ID(0x041F), 192 193 /** 194 * Test: ContextHubNanoAppInfoEventsTest (Performer) 195 */ 196 NANO_APP_INFO_EVENTS_PERFORMER(0x0420), 197 198 /** 199 * Test: ContextHubNanoAppInfoEventsTest (Observer) 200 */ 201 NANO_APP_INFO_EVENTS_OBSERVER(0x0421), 202 203 /** 204 * Test: ContextHubSimpleGeneralNanoAppTests[BasicAudioTest] 205 */ 206 BASIC_AUDIO_TEST(0x0422), 207 208 /** 209 * Test: ContextHubSimpleGeneralNanoAppTests[HostAwakeSuspend] 210 */ 211 HOST_AWAKE_SUSPEND(0x0423), 212 213 /** 214 * Test: ContextHubSimpleGeneralNanoAppTests[BasicGnssTest] 215 */ 216 BASIC_GNSS_TEST(0x0424), 217 218 /** 219 * Test: ContextHubSimpleGeneralNanoAppTests[BasicWifiTest] 220 */ 221 BASIC_WIFI_TEST(0x0425), 222 223 /** 224 * Test: ContextHubSimpleGeneralNanoAppTests[BasicSensorFlushAsyncTest] 225 */ 226 BASIC_SENSOR_FLUSH_ASYNC_TEST(0x0426); 227 228 private final int mValue; TestNames(int value)229 TestNames(int value) { 230 this.mValue = value; 231 } 232 233 /** 234 * Get the integer value for this TestNames. 235 * 236 * This is very efficient, O(1). 237 * 238 * @return integer value 239 */ asInt()240 public int asInt() { 241 return mValue; 242 } 243 } 244 245 /** 246 * Messages types which are sent between Nanoapps and the Java Host testing 247 * code. 248 */ 249 public enum MessageType { 250 /** 251 * Value which should never be used. 252 * 253 * This type should never be sent by Host or Nanoapp code. 254 */ 255 INVALID_MESSAGE_TYPE(0x0400), 256 257 /** 258 * Test has completed in success. 259 * 260 * Upon receiving this message type, the infrastructure considers 261 * the test a success and concludes testing. 262 * 263 * This type should only be sent by the Nanoapp code. 264 */ 265 SUCCESS(0x0401), 266 267 /** 268 * Test has failed. 269 * 270 * Upon receiving this message type, the infrastructure considers 271 * the test to be a failure, and concludes testing. The presumption 272 * is that the failure is due to an issue in the CHRE implementation 273 * and/or Context Hub HAL implementation. 274 * 275 * This type should only be sent by the Nanoapp code. 276 */ 277 FAILURE(0x0402), 278 279 /** 280 * Test has failed due to an issue within the testing framework. 281 * 282 * Upon receiving this message type, the infrastructure considers 283 * the test to be a failure, and concludes testing. The presumption 284 * is that the failure is due to an issue in the test itself, or 285 * the testing framework code, and that the CHRE and/or Context Hub HAL 286 * implementations may not have any issues. 287 * 288 * This type should only be sent by the Nanoapp code. 289 */ 290 INTERNAL_FAILURE(0x0403), 291 292 /** 293 * Test is being skipped because it is not relevant. 294 * 295 * Upon receiving this message type, the infrastructure considers 296 * the test to be "skipped". That is, this test is not considered 297 * relevant, and shouldn't considered a failure, but it never 298 * executed. 299 * 300 * This type should only be send by the Nanoapp code. 301 */ 302 SKIPPED(0x0404), 303 304 /** 305 * A generic message indicating that the test should continue. 306 * 307 * The meaning of this generic message depends on the specific test. 308 * In general, it means something along the lines of "The test is 309 * successful thus far, please proceed to the next stage." 310 * 311 * This type can be sent by the Host or Nanoapp code. 312 */ 313 CONTINUE(0x0405), 314 315 /** 316 * A message type to be used to test sending messages through the ContextHubClient. 317 * 318 * This message type should be used only for tests under the ContextHubServiceTestBase 319 * framework. 320 */ 321 SERVICE_MESSAGE(0x0406); 322 323 private final int mValue; MessageType(int value)324 MessageType(int value) { 325 this.mValue = value; 326 } 327 328 /** 329 * Get the integer value for this message type. 330 * 331 * This is very efficient, O(1). 332 * 333 * @return integer value 334 */ asInt()335 public int asInt() { 336 return mValue; 337 } 338 339 /** 340 * Get the MessageType for a given integer value. 341 * 342 * This method will abort the running test if the given value does 343 * not correspond to any MessageType. 344 * 345 * This is inefficient: O(N). 346 * 347 * @param value The value we're finding the MessageType for. 348 * @param errorMessage In the case 'value' does not match any 349 * MessageType, our test failure message will include this. 350 * @return The matching MessageType. 351 */ fromInt(int value, String errorMessage)352 public static MessageType fromInt(int value, String errorMessage) { 353 for (MessageType type : MessageType.values()) { 354 if (value == type.asInt()) { 355 return type; 356 } 357 } 358 359 Assert.fail("Unknown MessageType (" + value + ") from " 360 + errorMessage); 361 // Will never get here. 362 return MessageType.INVALID_MESSAGE_TYPE; 363 } 364 } 365 } 366