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)