15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Android Open Source Project 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This software is licensed under the terms of the GNU General Public 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License version 2, as published by the Free Software Foundation, and 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// may be copied, distributed, and modified under those terms. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This program is distributed in the hope that it will be useful, 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// but WITHOUT ANY WARRANTY; without even the implied warranty of 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// GNU General Public License for more details. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android/avd/util.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android/utils/file_data.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include <gtest/gtest.h> 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AvdUtil, emulator_getBackendSuffix) { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("arm", emulator_getBackendSuffix("arm")); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("x86", emulator_getBackendSuffix("x86")); 202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_STREQ("x86", emulator_getBackendSuffix("x86_64")); 21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EXPECT_STREQ("mips", emulator_getBackendSuffix("mips")); 222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_STREQ("arm", emulator_getBackendSuffix("arm64")); 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(digit): Add support for these CPU architectures to the emulator 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to change these to EXPECT_STREQ() calls. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(emulator_getBackendSuffix("mips64")); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(emulator_getBackendSuffix(NULL)); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(emulator_getBackendSuffix("dummy")); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AvdUtil, propertyFile_getInt) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FileData fd; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* testFile = 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "nineteen=19\n" 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "int_min=-2147483648\n" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "int_max=2147483647\n" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "invalid=2147483648\n" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "invalid2=-2147483649\n" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "invalid3=bar\n" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "empty=\n"; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0,fileData_initFromMemory(&fd, testFile, strlen(testFile))); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const int kDefault = 1138; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchResult kSearchResultGarbage = (SearchResult)0xdeadbeef; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchResult searchResult = kSearchResultGarbage; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "invalid", kDefault, &searchResult)); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(RESULT_INVALID,searchResult); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) searchResult = kSearchResultGarbage; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "invalid2", kDefault, &searchResult)); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(RESULT_INVALID,searchResult); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) searchResult = kSearchResultGarbage; 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "invalid3", kDefault, &searchResult)); 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(RESULT_INVALID,searchResult); 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) searchResult = kSearchResultGarbage; 620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "bar", kDefault, &searchResult)); 630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_EQ(RESULT_NOT_FOUND,searchResult); 640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) searchResult = kSearchResultGarbage; 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "empty", kDefault, &searchResult)); 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(RESULT_INVALID,searchResult); 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) searchResult = kSearchResultGarbage; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(19,propertyFile_getInt(&fd, "nineteen", kDefault, &searchResult)); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(RESULT_FOUND,searchResult); 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // check that null "searchResult" parameter is supported 74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "bar", kDefault, NULL)); 75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(kDefault,propertyFile_getInt(&fd, "invalid", kDefault, NULL)); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(19,propertyFile_getInt(&fd, "nineteen", kDefault, NULL)); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(AvdUtil, propertyFile_getApiLevel) { 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FileData fd; 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const char* emptyFile = 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\n"; 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const char* testFile19 = 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch "ro.build.version.sdk=19\n"; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* testFileBogus = 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "ro.build.version.sdk=bogus\n"; 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0,fileData_initFromMemory(&fd, emptyFile, strlen(emptyFile))); 92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(10000,propertyFile_getApiLevel(&fd)); 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(0,fileData_initFromMemory(&fd, testFile19, strlen(testFile19))); 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(19,propertyFile_getApiLevel(&fd)); 960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(0,fileData_initFromMemory(&fd, testFileBogus, strlen(testFileBogus))); 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch EXPECT_EQ(3,propertyFile_getApiLevel(&fd)); 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 100ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(AvdUtil, propertyFile_getAdbdCommunicationMode) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FileData fd; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* emptyFile = 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "\n"; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* valueIsZero = 108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) "ro.adb.qemud=0"; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* valueIsOne = 1112385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch "ro.adb.qemud=1"; 1122385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1132385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch const char* valueIsBogus = 1142385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch "ro.adb.qemud=bogus"; 1152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch // Empty file -> assume 1 1172385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_EQ(0, fileData_initFromMemory(&fd, emptyFile, strlen(emptyFile))); 1182385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_EQ(1, propertyFile_getAdbdCommunicationMode(&fd)); 1192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1202385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_EQ(0, fileData_initFromMemory(&fd, valueIsZero, strlen(valueIsZero))); 1212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch EXPECT_EQ(0, propertyFile_getAdbdCommunicationMode(&fd)); 1222385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, fileData_initFromMemory(&fd, valueIsOne, strlen(valueIsOne))); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, propertyFile_getAdbdCommunicationMode(&fd)); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BOGUS -> 1 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, fileData_initFromMemory(&fd, valueIsBogus, strlen(valueIsBogus))); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, propertyFile_getAdbdCommunicationMode(&fd)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)