1d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#include <gtest/gtest.h> 2d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 3d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavatiextern "C" { 4d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#include "config.h" 5d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 6d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 7d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavatistatic const char CONFIG_FILE[] = "/data/local/tmp/config_test.conf"; 8d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavatistatic const char CONFIG_FILE_CONTENT[] = 9d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati" \n\ 10d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavatifirst_key=value \n\ 11d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 12d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Device ID (DID) configuration \n\ 13d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati[DID] \n\ 14d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 15d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Record Number: 1, 2 or 3 - maximum of 3 records \n\ 16d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatirecordNumber = 1 \n\ 17d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 18d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Primary Record - true or false (default) \n\ 19d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# There can be only one primary record \n\ 20d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiprimaryRecord = true \n\ 21d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 22d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Vendor ID '0xFFFF' indicates no Device ID Service Record is present in the device \n\ 23d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# 0x000F = Broadcom Corporation (default) \n\ 24d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#vendorId = 0x000F \n\ 25d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 26d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Vendor ID Source \n\ 27d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# 0x0001 = Bluetooth SIG assigned Device ID Vendor ID value (default) \n\ 28d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# 0x0002 = USB Implementer's Forum assigned Device ID Vendor ID value \n\ 29d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#vendorIdSource = 0x0001 \n\ 30d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 31d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Product ID & Product Version \n\ 32d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Per spec DID v1.3 0xJJMN for version is interpreted as JJ.M.N \n\ 33d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# JJ: major version number, M: minor version number, N: sub-minor version number \n\ 34d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# For example: 1200, v14.3.6 \n\ 35d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiproductId = 0x1200 \n\ 36d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavativersion = 0x1111 \n\ 37d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 38d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Optional attributes \n\ 39d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#clientExecutableURL = \n\ 40d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#serviceDescription = \n\ 41d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati#documentationURL = \n\ 42d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati \n\ 43d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati# Additional optional DID records. Bluedroid supports up to 3 records. \n\ 44d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati[DID] \n\ 45d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati[DID] \n\ 46d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavativersion = 0x1436 \n\ 47d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati"; 48d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 49d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavaticlass ConfigTest : public ::testing::Test { 50d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati protected: 51d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati virtual void SetUp() { 52d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati FILE *fp = fopen(CONFIG_FILE, "wt"); 53d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati fwrite(CONFIG_FILE_CONTENT, 1, sizeof(CONFIG_FILE_CONTENT), fp); 54d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati fclose(fp); 55d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati } 56d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati}; 57d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 58d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_new_no_file) { 59d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new("/meow"); 60d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config == NULL); 61d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 62d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 63d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_new) { 64d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 65d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config != NULL); 66d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 67d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 68d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 69d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_free_null) { 70d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(NULL); 71d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 72d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 73d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_has_section) { 74d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 75d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_section(config, "DID")); 76d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 77d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 78d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 79d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_has_key_in_default_section) { 80d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 81d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, CONFIG_DEFAULT_SECTION, "first_key")); 82d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_STREQ(config_get_string(config, CONFIG_DEFAULT_SECTION, "first_key", "meow"), "value"); 83d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 84d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 85d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 86d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_has_keys) { 87d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 88d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "recordNumber")); 89d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "primaryRecord")); 90d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "productId")); 91d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "version")); 92d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 93d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 94d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 95d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_no_bad_keys) { 96d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 97d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_FALSE(config_has_key(config, "DID_BAD", "primaryRecord")); 98d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_FALSE(config_has_key(config, "DID", "primaryRecord_BAD")); 99d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_FALSE(config_has_key(config, CONFIG_DEFAULT_SECTION, "primaryRecord")); 100d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 101d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 102d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 103d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_get_int_version) { 104d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 105d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "version", 0), 0x1436); 106d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 107d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 108d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 109d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_get_int_default) { 110d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 111d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "primaryRecord", 123), 123); 112d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 113d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 114