diff options
Diffstat (limited to 'apps/test/chqts/src/general_test/version_sanity_test.cc')
-rw-r--r-- | apps/test/chqts/src/general_test/version_sanity_test.cc | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/apps/test/chqts/src/general_test/version_sanity_test.cc b/apps/test/chqts/src/general_test/version_sanity_test.cc new file mode 100644 index 00000000..4584e5ac --- /dev/null +++ b/apps/test/chqts/src/general_test/version_sanity_test.cc @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <general_test/version_sanity_test.h> + +#include <cstddef> + +#include <shared/send_message.h> + +#include <chre.h> + +using nanoapp_testing::sendFatalFailureToHost; +using nanoapp_testing::sendSuccessToHost; + +namespace general_test { + +VersionSanityTest::VersionSanityTest() : Test(CHRE_API_VERSION_1_0) {} + +void VersionSanityTest::setUp(uint32_t messageSize, + const void * /* message */) { + if (messageSize != 0) { + sendFatalFailureToHost( + "VersionSanity message expects 0 additional bytes, got ", &messageSize); + } + + if (mApiVersion < CHRE_API_VERSION_1_0) { + sendFatalFailureToHost("API version less than 1.0", &mApiVersion); + } + if ((mApiVersion & UINT32_C(0xFFFF)) != 0) { + sendFatalFailureToHost("API version has two LSB set", &mApiVersion); + } + uint32_t platformVersion = chreGetVersion(); + constexpr uint32_t kMajorMinorMask = UINT32_C(0xFFFF0000); + // Both mApiVersion and platformVersion refer to what the CHRE was + // built against, so they must agree in major and minor version. + if ((platformVersion & kMajorMinorMask) != (mApiVersion & kMajorMinorMask)) { + sendFatalFailureToHost("API and platform version mismatch", + &platformVersion); + } + + // Confirm that our app (CHRE_API_VERSION) and CHRE (mApiVersion) were + // both compiled against the same major version. They're allowed to + // differ in minor version. + constexpr uint32_t kMajorMask = UINT32_C(0xFF000000); + if ((mApiVersion & kMajorMask) != (CHRE_API_VERSION & kMajorMask)) { + uint32_t appVersion = CHRE_API_VERSION; + sendFatalFailureToHost("App built against different major version", + &appVersion); + } + + uint64_t platformId = chreGetPlatformId(); + if ((platformId == UINT64_C(0)) || (platformId == UINT64_C(-1))) { + sendFatalFailureToHost("Bogus platform ID"); + } + // TODO(b/30077401): We should send the Platform ID back to the Host, and + // have the Host confirm this is the Platform ID we used for loading + // the nanoapp. + + sendSuccessToHost(); +} + +void VersionSanityTest::handleEvent(uint32_t senderInstanceId, + uint16_t eventType, const void *eventData) { + unexpectedEvent(eventType); +} + +} // namespace general_test |