test_main.cpp revision 0a35139d24ae0071475adeae3e1370b8f8617f8f
1b93f0504e861885734d954f716da0331af4aa438Yifan Hong/* 2b93f0504e861885734d954f716da0331af4aa438Yifan Hong * Copyright (C) 2016 The Android Open Source Project 3b93f0504e861885734d954f716da0331af4aa438Yifan Hong * 4b93f0504e861885734d954f716da0331af4aa438Yifan Hong * Licensed under the Apache License, Version 2.0 (the "License"); 5b93f0504e861885734d954f716da0331af4aa438Yifan Hong * you may not use this file except in compliance with the License. 6b93f0504e861885734d954f716da0331af4aa438Yifan Hong * You may obtain a copy of the License at 7b93f0504e861885734d954f716da0331af4aa438Yifan Hong * 8b93f0504e861885734d954f716da0331af4aa438Yifan Hong * http://www.apache.org/licenses/LICENSE-2.0 9b93f0504e861885734d954f716da0331af4aa438Yifan Hong * 10b93f0504e861885734d954f716da0331af4aa438Yifan Hong * Unless required by applicable law or agreed to in writing, software 11b93f0504e861885734d954f716da0331af4aa438Yifan Hong * distributed under the License is distributed on an "AS IS" BASIS, 12b93f0504e861885734d954f716da0331af4aa438Yifan Hong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b93f0504e861885734d954f716da0331af4aa438Yifan Hong * See the License for the specific language governing permissions and 14b93f0504e861885734d954f716da0331af4aa438Yifan Hong * limitations under the License. 15b93f0504e861885734d954f716da0331af4aa438Yifan Hong */ 16b93f0504e861885734d954f716da0331af4aa438Yifan Hong 17602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#define LOG_TAG "LibHidlTest" 18602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 19602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <android-base/logging.h> 202be9418963c8d36bb1425093d224256e2a94b277Yifan Hong#include <gmock/gmock.h> 21602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <gtest/gtest.h> 22602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <hidl/HidlSupport.h> 232be9418963c8d36bb1425093d224256e2a94b277Yifan Hong#include <hidl/Status.h> 245e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong#include <hidl/TaskRunner.h> 25602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#include <vector> 26602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 27602b85a846834d466e1f545eace06df87cf94a1eYifan Hong#define EXPECT_ARRAYEQ(__a1__, __a2__, __size__) EXPECT_TRUE(isArrayEqual(__a1__, __a2__, __size__)) 2844ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong#define EXPECT_2DARRAYEQ(__a1__, __a2__, __size1__, __size2__) \ 2944ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong EXPECT_TRUE(is2dArrayEqual(__a1__, __a2__, __size1__, __size2__)) 30602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 31602b85a846834d466e1f545eace06df87cf94a1eYifan Hongtemplate<typename T, typename S> 32602b85a846834d466e1f545eace06df87cf94a1eYifan Hongstatic inline bool isArrayEqual(const T arr1, const S arr2, size_t size) { 33602b85a846834d466e1f545eace06df87cf94a1eYifan Hong for(size_t i = 0; i < size; i++) 34602b85a846834d466e1f545eace06df87cf94a1eYifan Hong if(arr1[i] != arr2[i]) 35602b85a846834d466e1f545eace06df87cf94a1eYifan Hong return false; 36602b85a846834d466e1f545eace06df87cf94a1eYifan Hong return true; 37602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 38602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 3944ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hongtemplate<typename T, typename S> 4044ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hongstatic inline bool is2dArrayEqual(const T arr1, const S arr2, size_t size1, size_t size2) { 4144ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong for(size_t i = 0; i < size1; i++) 4244ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong for (size_t j = 0; j < size2; j++) 4344ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong if(arr1[i][j] != arr2[i][j]) 4444ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong return false; 4544ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong return true; 4644ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong} 4744ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong 48602b85a846834d466e1f545eace06df87cf94a1eYifan Hongclass LibHidlTest : public ::testing::Test { 49602b85a846834d466e1f545eace06df87cf94a1eYifan Hongpublic: 50602b85a846834d466e1f545eace06df87cf94a1eYifan Hong virtual void SetUp() override { 51602b85a846834d466e1f545eace06df87cf94a1eYifan Hong } 52602b85a846834d466e1f545eace06df87cf94a1eYifan Hong virtual void TearDown() override { 53602b85a846834d466e1f545eace06df87cf94a1eYifan Hong } 54602b85a846834d466e1f545eace06df87cf94a1eYifan Hong}; 55602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 56602b85a846834d466e1f545eace06df87cf94a1eYifan HongTEST_F(LibHidlTest, StringTest) { 57602b85a846834d466e1f545eace06df87cf94a1eYifan Hong using android::hardware::hidl_string; 58602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s; // empty constructor 59602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s.c_str(), ""); 60602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s1 = "s1"; // copy = from cstr 61602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s1.c_str(), "s1"); 62602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s2("s2"); // copy constructor from cstr 63602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s2.c_str(), "s2"); 64a21d84f11f066315bd1476368d511286d129cb8aSteven Moreland hidl_string s2a(nullptr); // copy constructor from null cstr 65a21d84f11f066315bd1476368d511286d129cb8aSteven Moreland EXPECT_STREQ("", s2a); 66153f87a2fd2972f862a88976bb884a90a1f9fd7dSteven Moreland s2a = nullptr; // = from nullptr cstr 67153f87a2fd2972f862a88976bb884a90a1f9fd7dSteven Moreland EXPECT_STREQ(s2a.c_str(), ""); 68602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_string s3 = hidl_string("s3"); // move = 69602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s3.c_str(), "s3"); 7053120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland hidl_string s4 = hidl_string("12345", 3); // copy constructor from cstr w/ length 7153120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland EXPECT_STREQ(s4.c_str(), "123"); 7253120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland hidl_string s5(hidl_string(hidl_string("s5"))); // move constructor 7353120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland EXPECT_STREQ(s5.c_str(), "s5"); 7453120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland hidl_string s6(std::string("s6")); // copy constructor from std::string 75602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s6, "s6"); 7653120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland hidl_string s7 = std::string("s7"); // copy = from std::string 7753120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland EXPECT_STREQ(s7, "s7"); 7853120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland hidl_string s8(s7); // copy constructor 7953120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland EXPECT_STREQ(s8, "s7"); 8053120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland hidl_string s9 = s8; // copy = 8153120f70b7d429c81fe47718182e829660ed5ef9Steven Moreland EXPECT_STREQ(s9, "s7"); 82602b85a846834d466e1f545eace06df87cf94a1eYifan Hong char myCString[20] = "myCString"; 83602b85a846834d466e1f545eace06df87cf94a1eYifan Hong s.setToExternal(&myCString[0], strlen(myCString)); 84602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s, "myCString"); 85602b85a846834d466e1f545eace06df87cf94a1eYifan Hong myCString[2] = 'D'; 86602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(s, "myDString"); 87602b85a846834d466e1f545eace06df87cf94a1eYifan Hong s.clear(); // should not affect myCString 88602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(myCString, "myDString"); 89bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph 90602b85a846834d466e1f545eace06df87cf94a1eYifan Hong // casts 91602b85a846834d466e1f545eace06df87cf94a1eYifan Hong s = "great"; 92602b85a846834d466e1f545eace06df87cf94a1eYifan Hong std::string myString = s; 93602b85a846834d466e1f545eace06df87cf94a1eYifan Hong const char *anotherCString = s; 94602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_EQ(myString, "great"); 95602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_STREQ(anotherCString, "great"); 96bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph 97bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph // Comparisons 98bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph const char * cstr1 = "abc"; 99bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph std::string string1(cstr1); 100bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph hidl_string hs1(cstr1); 101bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph const char * cstrE = "abc"; 102bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph std::string stringE(cstrE); 103bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph hidl_string hsE(cstrE); 104bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph const char * cstrNE = "ABC"; 105bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph std::string stringNE(cstrNE); 106bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph hidl_string hsNE(cstrNE); 107551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland const char * cstr2 = "def"; 108551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland std::string string2(cstr2); 109551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland hidl_string hs2(cstr2); 110551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland 111bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_TRUE(hs1 == hsE); 112bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_FALSE(hs1 == hsNE); 113bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_TRUE(hs1 == cstrE); 114bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_FALSE(hs1 == cstrNE); 115bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_TRUE(hs1 == stringE); 116551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs1 == stringNE); 117551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs1 != hsE); 118551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs1 != hsNE); 119551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs1 != cstrE); 120551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs1 != cstrNE); 121bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_FALSE(hs1 != stringE); 122bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_TRUE(hs1 != stringNE); 123551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland 124551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs1 < hs2); 125551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs2 < hs1); 126551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs2 > hs1); 127551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs1 > hs2); 128551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs1 <= hs1); 129551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs1 <= hs2); 130551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs2 <= hs1); 131551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs1 >= hs1); 132551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_TRUE(hs2 >= hs1); 133551396afe50bb40b046e9f16b4501e6df055c88aSteven Moreland EXPECT_FALSE(hs2 <= hs1); 134602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 135602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 1360f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff TinkerTEST_F(LibHidlTest, MemoryTest) { 1370f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker using android::hardware::hidl_memory; 1380f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 1390f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker hidl_memory mem1 = hidl_memory(); // default constructor 1400f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker hidl_memory mem2 = mem1; // copy constructor (nullptr) 1410f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 1420f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_EQ(nullptr, mem2.handle()); 1430f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 1440f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker native_handle_t* testHandle = native_handle_create(0 /* numInts */, 0 /* numFds */); 1450f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 1460f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker hidl_memory mem3 = hidl_memory("foo", testHandle, 42 /* size */); // owns testHandle 1470f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker hidl_memory mem4 = mem3; // copy constructor (regular handle) 1480f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 1490f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_EQ(mem3.name(), mem4.name()); 1500f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_EQ(mem3.size(), mem4.size()); 1510f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_NE(nullptr, mem4.handle()); 1520f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_NE(mem3.handle(), mem4.handle()); // check handle cloned 1530f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 1540f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker hidl_memory mem5 = hidl_memory("foo", nullptr, 0); // hidl memory works with nullptr handle 1550f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker hidl_memory mem6 = mem5; 1560f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_EQ(nullptr, mem5.handle()); 1570f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker EXPECT_EQ(nullptr, mem6.handle()); 1580f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker} 1590f3461db91b75d9acd7e0bec8b1e97cbb3bafdf7Jeff Tinker 16064fdf4d1bdea86202c7526482d4d329724d33dcbYifan HongTEST_F(LibHidlTest, VecInitTest) { 161602b85a846834d466e1f545eace06df87cf94a1eYifan Hong using android::hardware::hidl_vec; 162602b85a846834d466e1f545eace06df87cf94a1eYifan Hong using std::vector; 163602b85a846834d466e1f545eace06df87cf94a1eYifan Hong int32_t array[] = {5, 6, 7}; 164602b85a846834d466e1f545eace06df87cf94a1eYifan Hong vector<int32_t> v(array, array + 3); 165602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 166602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_vec<int32_t> hv1 = v; // copy = 167602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(hv1, array, 3); 168602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(hv1, v, 3); 169602b85a846834d466e1f545eace06df87cf94a1eYifan Hong hidl_vec<int32_t> hv2(v); // copy constructor 170602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(hv2, v, 3); 171602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 172602b85a846834d466e1f545eace06df87cf94a1eYifan Hong vector<int32_t> v2 = hv1; // cast 173602b85a846834d466e1f545eace06df87cf94a1eYifan Hong EXPECT_ARRAYEQ(v2, v, 3); 1749fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland 1759fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland hidl_vec<int32_t> v3 = {5, 6, 7}; // initializer_list 176b69926a728aa472be47f51dc5fc374571d7da5a8Steven Moreland EXPECT_EQ(v3.size(), 3ul); 1779fbfe475d933ecd29c9c2af7e35e9b13fbdf905dSteven Moreland EXPECT_ARRAYEQ(v3, array, v3.size()); 17864fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong} 17964fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 18064fdf4d1bdea86202c7526482d4d329724d33dcbYifan HongTEST_F(LibHidlTest, VecIterTest) { 18164fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong int32_t array[] = {5, 6, 7}; 18264fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong android::hardware::hidl_vec<int32_t> hv1 = std::vector<int32_t>(array, array + 3); 183bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph 184bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph auto iter = hv1.begin(); // iterator begin() 18564fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*iter++, 5); 18664fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*iter, 6); 18764fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*++iter, 7); 18864fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*iter--, 7); 189bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_EQ(*iter, 6); 19064fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*--iter, 5); 19164fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 19264fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong iter += 2; 193bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_EQ(*iter, 7); 19464fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong iter -= 2; 19564fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*iter, 5); 19664fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 19764fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong iter++; 19864fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*(iter + 1), 7); 19964fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*(1 + iter), 7); 20064fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*(iter - 1), 5); 20164fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(*iter, 6); 20264fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 20364fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong auto five = iter - 1; 20464fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong auto seven = iter + 1; 20564fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(seven - five, 2); 20664fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(five - seven, -2); 20764fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 20864fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_LT(five, seven); 20964fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_LE(five, seven); 21064fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_GT(seven, five); 21164fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_GE(seven, five); 21264fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 21364fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(seven[0], 7); 21464fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(five[1], 6); 21564fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong} 21664fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 21764fdf4d1bdea86202c7526482d4d329724d33dcbYifan HongTEST_F(LibHidlTest, VecIterForTest) { 21864fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong using android::hardware::hidl_vec; 21964fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong int32_t array[] = {5, 6, 7}; 22064fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong hidl_vec<int32_t> hv1 = std::vector<int32_t>(array, array + 3); 221bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph 222bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph int32_t sum = 0; // range based for loop interoperability 223bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph for (auto &&i: hv1) { 224bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph sum += i; 225bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph } 226bb840f73dc33c5de153cc6959672cf05c55ae4e6Scott Randolph EXPECT_EQ(sum, 5+6+7); 22764fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong 22864fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong for (auto iter = hv1.begin(); iter < hv1.end(); ++iter) { 22964fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong *iter += 10; 23064fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong } 23164fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong const hidl_vec<int32_t> &v4 = hv1; 23264fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong sum = 0; 23364fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong for (const auto &i : v4) { 23464fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong sum += i; 23564fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong } 23664fdf4d1bdea86202c7526482d4d329724d33dcbYifan Hong EXPECT_EQ(sum, 15+16+17); 237602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 238602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 2399fcbb36250a4392b12012cf5177c4669ef10e654Yifan HongTEST_F(LibHidlTest, VecEqTest) { 2409fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong android::hardware::hidl_vec<int32_t> hv1{5, 6, 7}; 2419fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong android::hardware::hidl_vec<int32_t> hv2{5, 6, 7}; 2429fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong android::hardware::hidl_vec<int32_t> hv3{5, 6, 8}; 2439fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong 2449fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong // use the == and != operator intentionally here 2459fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong EXPECT_TRUE(hv1 == hv2); 2469fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong EXPECT_TRUE(hv1 != hv3); 2479fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong} 2489fcbb36250a4392b12012cf5177c4669ef10e654Yifan Hong 2493da68488e12ae8d487f43700582b775a4cdb6ec1Sasha LevitskiyTEST_F(LibHidlTest, ArrayTest) { 2503da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy using android::hardware::hidl_array; 2513da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy int32_t array[] = {5, 6, 7}; 2523da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy 2533da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy hidl_array<int32_t, 3> ha(array); 2543da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy EXPECT_ARRAYEQ(ha, array, 3); 2553da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy} 2563da68488e12ae8d487f43700582b775a4cdb6ec1Sasha Levitskiy 2575e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan HongTEST_F(LibHidlTest, TaskRunnerTest) { 2580a35139d24ae0071475adeae3e1370b8f8617f8fYifan Hong using android::hardware::details::TaskRunner; 2595e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong TaskRunner tr; 2605e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong bool flag = false; 2615e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong tr.push([&] { 2625e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong usleep(1000); 2635e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong flag = true; 2645e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong }); 2655e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong usleep(500); 2665e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong EXPECT_FALSE(flag); 2675e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong usleep(1000); 2685e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong EXPECT_TRUE(flag); 2695e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong} 2705e2318c9d54c3fe9454f2d79bc80ead3782658dbYifan Hong 2715708fb4e117f06f8b867eb623d73fd3e5d969155Yifan HongTEST_F(LibHidlTest, StringCmpTest) { 2725708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong using android::hardware::hidl_string; 2735708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong const char * s = "good"; 2745708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong hidl_string hs(s); 2755708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_NE(hs.c_str(), s); 2765708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong 2775708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_TRUE(hs == s); // operator == 2785708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_TRUE(s == hs); 2795708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong 2805708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_FALSE(hs != s); // operator == 2815708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong EXPECT_FALSE(s != hs); 2825708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong} 2835708fb4e117f06f8b867eb623d73fd3e5d969155Yifan Hong 284602b85a846834d466e1f545eace06df87cf94a1eYifan Hongtemplate <typename T> 285602b85a846834d466e1f545eace06df87cf94a1eYifan Hongvoid great(android::hardware::hidl_vec<T>) {} 286602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 287602b85a846834d466e1f545eace06df87cf94a1eYifan HongTEST_F(LibHidlTest, VecCopyTest) { 288602b85a846834d466e1f545eace06df87cf94a1eYifan Hong android::hardware::hidl_vec<int32_t> v; 289602b85a846834d466e1f545eace06df87cf94a1eYifan Hong great(v); 290602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 291602b85a846834d466e1f545eace06df87cf94a1eYifan Hong 29244ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan HongTEST_F(LibHidlTest, StdArrayTest) { 29344ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong using android::hardware::hidl_array; 29444ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong hidl_array<int32_t, 5> array{(int32_t[5]){1, 2, 3, 4, 5}}; 29544ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong std::array<int32_t, 5> stdArray = array; 29644ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong EXPECT_ARRAYEQ(array.data(), stdArray.data(), 5); 29744ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong hidl_array<int32_t, 5> array2 = stdArray; 29844ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong EXPECT_ARRAYEQ(array.data(), array2.data(), 5); 29944ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong} 30044ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong 30144ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan HongTEST_F(LibHidlTest, MultiDimStdArrayTest) { 30244ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong using android::hardware::hidl_array; 30344ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong hidl_array<int32_t, 2, 3> array; 30444ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong for (size_t i = 0; i < 2; i++) { 30544ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong for (size_t j = 0; j < 3; j++) { 30644ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong array[i][j] = i + j + i * j; 30744ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong } 30844ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong } 30944ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong std::array<std::array<int32_t, 3>, 2> stdArray = array; 31044ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong EXPECT_2DARRAYEQ(array, stdArray, 2, 3); 31144ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong hidl_array<int32_t, 2, 3> array2 = stdArray; 31244ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong EXPECT_2DARRAYEQ(array, array2, 2, 3); 31344ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong} 31444ab623ccf386f0e470bdc6aa22f261b7dc047cdYifan Hong 31519f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville TalvalaTEST_F(LibHidlTest, HidlVersionTest) { 31619f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala using android::hardware::hidl_version; 31719f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala hidl_version v1_0{1, 0}; 31819f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_EQ(1, v1_0.get_major()); 31919f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_EQ(0, v1_0.get_minor()); 32019f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala hidl_version v2_0{2, 0}; 32119f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala hidl_version v2_1{2, 1}; 32219f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala hidl_version v2_2{2, 2}; 32319f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala hidl_version v3_0{3, 0}; 32419f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala hidl_version v3_0b{3,0}; 32519f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala 32619f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v1_0 < v2_0); 32719f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v2_0 < v2_1); 32819f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v2_1 < v3_0); 32919f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v2_0 > v1_0); 33019f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v2_1 > v2_0); 33119f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v3_0 > v2_1); 33219f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v3_0 == v3_0b); 33319f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v3_0 <= v3_0b); 33419f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v2_2 <= v3_0); 33519f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v3_0 >= v3_0b); 33619f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala EXPECT_TRUE(v3_0 >= v2_2); 33719f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala} 33819f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala 339af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan HongTEST_F(LibHidlTest, ReturnMoveTest) { 340af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong using namespace ::android; 341af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong using ::android::hardware::Return; 342af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong using ::android::hardware::Status; 343af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong Return<void> ret{Status::fromStatusT(DEAD_OBJECT)}; 344af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong ret.isOk(); 345af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong ret = {Status::fromStatusT(DEAD_OBJECT)}; 346af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong ret.isOk(); 347af4e43cc5b2eacbfe600f9ab0e459f09c35c0c3fYifan Hong} 34819f4db58674560ebe6b85dad77af0155a3dddecfEino-Ville Talvala 3492be9418963c8d36bb1425093d224256e2a94b277Yifan Hongstd::string toString(const ::android::hardware::Status &s) { 3502be9418963c8d36bb1425093d224256e2a94b277Yifan Hong using ::android::hardware::operator<<; 3512be9418963c8d36bb1425093d224256e2a94b277Yifan Hong std::ostringstream oss; 3522be9418963c8d36bb1425093d224256e2a94b277Yifan Hong oss << s; 3532be9418963c8d36bb1425093d224256e2a94b277Yifan Hong return oss.str(); 3542be9418963c8d36bb1425093d224256e2a94b277Yifan Hong} 3552be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 3562be9418963c8d36bb1425093d224256e2a94b277Yifan HongTEST_F(LibHidlTest, StatusStringTest) { 3572be9418963c8d36bb1425093d224256e2a94b277Yifan Hong using namespace ::android; 3582be9418963c8d36bb1425093d224256e2a94b277Yifan Hong using ::android::hardware::Status; 3592be9418963c8d36bb1425093d224256e2a94b277Yifan Hong using ::testing::HasSubstr; 3602be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 3612be9418963c8d36bb1425093d224256e2a94b277Yifan Hong EXPECT_EQ(toString(Status::ok()), "No error"); 3622be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 3632be9418963c8d36bb1425093d224256e2a94b277Yifan Hong EXPECT_THAT(toString(Status::fromStatusT(DEAD_OBJECT)), HasSubstr("DEAD_OBJECT")); 3642be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 3652be9418963c8d36bb1425093d224256e2a94b277Yifan Hong EXPECT_THAT(toString(Status::fromStatusT(-EBUSY)), HasSubstr("busy")); 3662be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 3672be9418963c8d36bb1425093d224256e2a94b277Yifan Hong EXPECT_THAT(toString(Status::fromExceptionCode(Status::EX_NULL_POINTER)), 3682be9418963c8d36bb1425093d224256e2a94b277Yifan Hong HasSubstr("EX_NULL_POINTER")); 3692be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 3702be9418963c8d36bb1425093d224256e2a94b277Yifan Hong} 3712be9418963c8d36bb1425093d224256e2a94b277Yifan Hong 372602b85a846834d466e1f545eace06df87cf94a1eYifan Hongint main(int argc, char **argv) { 373602b85a846834d466e1f545eace06df87cf94a1eYifan Hong ::testing::InitGoogleTest(&argc, argv); 374602b85a846834d466e1f545eace06df87cf94a1eYifan Hong return RUN_ALL_TESTS(); 375602b85a846834d466e1f545eace06df87cf94a1eYifan Hong} 376