Home | History | Annotate | Download | only in tests
      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 
     17 #include "gtest/gtest.h"
     18 
     19 #include "chre/core/sensor_request.h"
     20 
     21 using chre::Nanoseconds;
     22 using chre::SensorMode;
     23 using chre::SensorRequest;
     24 using chre::SensorType;
     25 using chre::kMaxIntervalLatencyNs;
     26 
     27 TEST(SensorType, LosslessSensorHandleToSensorTypeAndBack) {
     28   // Verify that converting a sensor to a handle and from a handle back to a
     29   // sensor is a lossless conversion. The specific value of the handle is
     30   // unimportant, as long as it can be consistently converted back and forth.
     31   SensorType sensorType = SensorType::Pressure;
     32   uint32_t sensorHandle = getSensorHandleFromSensorType(sensorType);
     33   sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
     34   EXPECT_EQ(sensorType, SensorType::Pressure);
     35 
     36   sensorType = SensorType::Proximity;
     37   sensorHandle = getSensorHandleFromSensorType(sensorType);
     38   sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
     39   EXPECT_EQ(sensorType, SensorType::Proximity);
     40 }
     41 
     42 TEST(SensorType, SensorHandleToSensorTypeUnknownHandles) {
     43   EXPECT_EQ(chre::getSensorTypeFromSensorHandle(0), SensorType::Unknown);
     44   EXPECT_EQ(chre::getSensorTypeFromSensorHandle(10000), SensorType::Unknown);
     45 }
     46 
     47 TEST(SensorRequest, DefaultMinimalPriority) {
     48   SensorRequest request;
     49   EXPECT_EQ(request.getInterval(), Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
     50   EXPECT_EQ(request.getLatency(), Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
     51   EXPECT_EQ(request.getMode(), SensorMode::Off);
     52 }
     53 
     54 TEST(SensorRequest, ActiveContinuousIsHigherPriorityThanActiveOneShot) {
     55   SensorRequest activeContinuous(SensorMode::ActiveContinuous,
     56                                  Nanoseconds(0), Nanoseconds(0));
     57   SensorRequest activeOneShot(SensorMode::ActiveOneShot,
     58                               Nanoseconds(0), Nanoseconds(0));
     59   SensorRequest mergedRequest;
     60   EXPECT_TRUE(mergedRequest.mergeWith(activeContinuous));
     61   EXPECT_FALSE(mergedRequest.mergeWith(activeOneShot));
     62   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
     63   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
     64   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
     65 }
     66 
     67 TEST(SensorRequest, ActiveOneShotIsHigherPriorityThanPassiveContinuous) {
     68   SensorRequest activeOneShot(SensorMode::ActiveOneShot,
     69                               Nanoseconds(0), Nanoseconds(0));
     70   SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
     71                                   Nanoseconds(0), Nanoseconds(0));
     72   SensorRequest mergedRequest;
     73   EXPECT_TRUE(mergedRequest.mergeWith(activeOneShot));
     74   EXPECT_FALSE(mergedRequest.mergeWith(passiveContinuous));
     75   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
     76   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
     77   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveOneShot);
     78 
     79 }
     80 
     81 TEST(SensorRequest, PassiveContinuousIsHigherPriorityThanPassiveOneShot) {
     82   SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
     83                                   Nanoseconds(0), Nanoseconds(0));
     84   SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
     85                                Nanoseconds(0), Nanoseconds(0));
     86   SensorRequest mergedRequest;
     87   EXPECT_TRUE(mergedRequest.mergeWith(passiveContinuous));
     88   EXPECT_FALSE(mergedRequest.mergeWith(passiveOneShot));
     89   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
     90   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
     91   EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveContinuous);
     92 }
     93 
     94 TEST(SensorRequest, PassiveOneShotIsHigherPriorityThanOff) {
     95   SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
     96                                Nanoseconds(0), Nanoseconds(0));
     97   SensorRequest off(SensorMode::Off, Nanoseconds(0), Nanoseconds(0));
     98   SensorRequest mergedRequest;
     99   EXPECT_TRUE(mergedRequest.mergeWith(passiveOneShot));
    100   EXPECT_FALSE(mergedRequest.mergeWith(off));
    101   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
    102   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
    103   EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveOneShot);
    104 }
    105 
    106 TEST(SensorRequest, LowerLatencyIsHigherPriorityThanHigherLatency) {
    107   SensorRequest lowLatencyRequest(SensorMode::ActiveContinuous,
    108                                   Nanoseconds(10), Nanoseconds(10));
    109   SensorRequest highLatencyRequest(SensorMode::ActiveOneShot,
    110                                    Nanoseconds(10), Nanoseconds(100));
    111   SensorRequest mergedRequest;
    112   EXPECT_TRUE(mergedRequest.mergeWith(lowLatencyRequest));
    113   EXPECT_FALSE(mergedRequest.mergeWith(highLatencyRequest));
    114   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    115   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
    116   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    117 }
    118 
    119 TEST(SensorRequest, HigherFrequencyIsHigherPriorityThanLowerFrequency) {
    120   SensorRequest lowFreqRequest(SensorMode::ActiveOneShot,
    121                                Nanoseconds(100), Nanoseconds(10));
    122   SensorRequest highFreqRequest(SensorMode::ActiveContinuous,
    123                                 Nanoseconds(10), Nanoseconds(10));
    124   SensorRequest mergedRequest;
    125   EXPECT_TRUE(mergedRequest.mergeWith(lowFreqRequest));
    126   EXPECT_TRUE(mergedRequest.mergeWith(highFreqRequest));
    127   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    128   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
    129   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    130 }
    131 
    132 TEST(SensorRequest, OnlyDefaultFrequency) {
    133   SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
    134                                    Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
    135                                    Nanoseconds(0));
    136   SensorRequest mergedRequest;
    137   EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
    138   EXPECT_EQ(mergedRequest.getInterval(),
    139             Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
    140   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
    141   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    142 }
    143 
    144 TEST(SensorRequest, NonDefaultAndDefaultFrequency) {
    145   SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
    146                                    Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
    147                                    Nanoseconds(0));
    148   SensorRequest nonDefaultFreqRequest(SensorMode::ActiveContinuous,
    149                                       Nanoseconds(20000000), Nanoseconds(0));
    150   SensorRequest mergedRequest;
    151   EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
    152   EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultFreqRequest));
    153   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(20000000));
    154   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
    155   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    156 }
    157 
    158 TEST(SensorRequest, OnlyAsapLatency) {
    159   SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
    160                                    Nanoseconds(10),
    161                                    Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
    162   SensorRequest mergedRequest;
    163   EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
    164   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    165   EXPECT_EQ(mergedRequest.getLatency(),
    166             Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
    167   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    168 }
    169 
    170 TEST(SensorRequest, NonAsapAndAsapLatency) {
    171   SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
    172                                    Nanoseconds(10),
    173                                    Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
    174   SensorRequest nonAsapLatencyRequest(SensorMode::ActiveContinuous,
    175                                       Nanoseconds(10),
    176                                       Nanoseconds(2000));
    177   SensorRequest mergedRequest;
    178   EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
    179   EXPECT_FALSE(mergedRequest.mergeWith(nonAsapLatencyRequest));
    180   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    181   EXPECT_EQ(mergedRequest.getLatency(),
    182             Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
    183   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    184 }
    185 
    186 TEST(SensorRequest, OnlyDefaultLatency) {
    187   SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
    188                                       Nanoseconds(10),
    189                                       Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
    190   SensorRequest mergedRequest;
    191   EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
    192   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    193   EXPECT_EQ(mergedRequest.getLatency(),
    194             Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
    195   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    196 }
    197 
    198 TEST(SensorRequest, NonDefaultAndDefaultLatency) {
    199   SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
    200                                       Nanoseconds(10),
    201                                       Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
    202   SensorRequest nonDefaultLatencyRequest(SensorMode::ActiveContinuous,
    203                                          Nanoseconds(10),
    204                                          Nanoseconds(2000));
    205   SensorRequest mergedRequest;
    206   EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
    207   EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultLatencyRequest));
    208   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    209   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000));
    210   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    211 }
    212 
    213 TEST(SensorRequest, MergeWithOff) {
    214   SensorRequest request(SensorMode::ActiveContinuous,
    215                         Nanoseconds(10),
    216                         Nanoseconds(100));
    217   SensorRequest otherRequest(SensorMode::Off,
    218                              Nanoseconds(1),
    219                              Nanoseconds(1));
    220   EXPECT_FALSE(request.mergeWith(otherRequest));
    221   EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous);
    222   EXPECT_EQ(request.getInterval(), Nanoseconds(10));
    223   EXPECT_EQ(request.getLatency(), Nanoseconds(100));
    224 }
    225 
    226 TEST(SensorRequest, MaxNonDefaultIntervalAndLatency) {
    227   SensorRequest request(SensorMode::ActiveContinuous,
    228                         Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT - 1),
    229                         Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT - 1));
    230   EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous);
    231   EXPECT_EQ(request.getInterval(), Nanoseconds(kMaxIntervalLatencyNs));
    232   EXPECT_EQ(request.getLatency(), Nanoseconds(kMaxIntervalLatencyNs));
    233 }
    234 
    235 TEST(SensorRequest, HighRateLowLatencyAndLowRateHighLatency) {
    236   SensorRequest Request0(SensorMode::ActiveContinuous,
    237                          Nanoseconds(100), Nanoseconds(0));
    238   SensorRequest Request1(SensorMode::ActiveContinuous,
    239                          Nanoseconds(10), Nanoseconds(2000));
    240   SensorRequest mergedRequest;
    241   EXPECT_TRUE(mergedRequest.mergeWith(Request0));
    242   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(100));
    243   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
    244   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    245 
    246   EXPECT_TRUE(mergedRequest.mergeWith(Request1));
    247   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    248   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90));
    249   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    250 }
    251 
    252 TEST(SensorRequest, LowRateHighLatencyAndHighRateLowLatency) {
    253   SensorRequest Request0(SensorMode::ActiveContinuous,
    254                          Nanoseconds(100), Nanoseconds(0));
    255   SensorRequest Request1(SensorMode::ActiveContinuous,
    256                          Nanoseconds(10), Nanoseconds(2000));
    257   SensorRequest mergedRequest;
    258   EXPECT_TRUE(mergedRequest.mergeWith(Request1));
    259   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    260   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000));
    261   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    262 
    263   EXPECT_TRUE(mergedRequest.mergeWith(Request0));
    264   EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
    265   EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90));
    266   EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
    267 }
    268