config_test.cc revision 7f280eb2f5f674e0329e21e0babe459a8b205b3f
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 587f280eb2f5f674e0329e21e0babe459a8b205b3fSharvil NanavatiTEST_F(ConfigTest, config_new_empty) { 597f280eb2f5f674e0329e21e0babe459a8b205b3fSharvil Nanavati config_t *config = config_new_empty(); 607f280eb2f5f674e0329e21e0babe459a8b205b3fSharvil Nanavati EXPECT_TRUE(config != NULL); 617f280eb2f5f674e0329e21e0babe459a8b205b3fSharvil Nanavati config_free(config); 627f280eb2f5f674e0329e21e0babe459a8b205b3fSharvil Nanavati} 637f280eb2f5f674e0329e21e0babe459a8b205b3fSharvil Nanavati 64d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_new_no_file) { 65d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new("/meow"); 66d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config == NULL); 67d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 68d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 69d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_new) { 70d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 71d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config != NULL); 72d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 73d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 74d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 75d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_free_null) { 76d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(NULL); 77d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 78d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 79d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_has_section) { 80d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 81d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_section(config, "DID")); 82d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 83d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 84d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 85d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_has_key_in_default_section) { 86d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 87d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, CONFIG_DEFAULT_SECTION, "first_key")); 88d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_STREQ(config_get_string(config, CONFIG_DEFAULT_SECTION, "first_key", "meow"), "value"); 89d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 90d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 91d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 92d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_has_keys) { 93d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 94d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "recordNumber")); 95d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "primaryRecord")); 96d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "productId")); 97d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_TRUE(config_has_key(config, "DID", "version")); 98d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 99d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 100d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 101d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_no_bad_keys) { 102d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 103d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_FALSE(config_has_key(config, "DID_BAD", "primaryRecord")); 104d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_FALSE(config_has_key(config, "DID", "primaryRecord_BAD")); 105d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_FALSE(config_has_key(config, CONFIG_DEFAULT_SECTION, "primaryRecord")); 106d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 107d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 108d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 109d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_get_int_version) { 110d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 111d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "version", 0), 0x1436); 112d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 113d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 114d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati 115d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil NanavatiTEST_F(ConfigTest, config_get_int_default) { 116d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 117d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "primaryRecord", 123), 123); 118d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati config_free(config); 119d1c453f4f9648bb5eef80df106e79e3f916f301cSharvil Nanavati} 12036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 12136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_remove_section) { 12236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 12336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(config_remove_section(config, "DID")); 12436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_FALSE(config_has_section(config, "DID")); 12536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_FALSE(config_has_key(config, "DID", "productId")); 12636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 12736c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 12836c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 12936c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_remove_section_missing) { 13036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 13136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_FALSE(config_remove_section(config, "not a section")); 13236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 13336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 13436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 13536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_remove_key) { 13636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 13736c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "productId", 999), 0x1200); 13836c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(config_remove_key(config, "DID", "productId")); 13936c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_FALSE(config_has_key(config, "DID", "productId")); 14036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 14136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 14236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 14336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_remove_key_missing) { 14436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 14536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "productId", 999), 0x1200); 14636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(config_remove_key(config, "DID", "productId")); 14736c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_EQ(config_get_int(config, "DID", "productId", 999), 999); 14836c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 14936c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 15036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 15136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_section_begin) { 15236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 15336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati const config_section_node_t *section = config_section_begin(config); 15436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(section != NULL); 15536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati const char *section_name = config_section_name(section); 15636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(section != NULL); 15736c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(!strcmp(section_name, CONFIG_DEFAULT_SECTION)); 15836c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 15936c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 16036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 16136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_section_next) { 16236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 16336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati const config_section_node_t *section = config_section_begin(config); 16436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(section != NULL); 16536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati section = config_section_next(section); 16636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(section != NULL); 16736c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati const char *section_name = config_section_name(section); 16836c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(section != NULL); 16936c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(!strcmp(section_name, "DID")); 17036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 17136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 17236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 17336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_section_end) { 17436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 17536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati const config_section_node_t * section = config_section_begin(config); 17636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati section = config_section_next(section); 17736c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati section = config_section_next(section); 17836c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_EQ(section, config_section_end(config)); 17936c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 18036c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 18136c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati 18236c1c09593a58717c78497cd55c4ed1dcf52183eSharvil NanavatiTEST_F(ConfigTest, config_save_basic) { 18336c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_t *config = config_new(CONFIG_FILE); 18436c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati EXPECT_TRUE(config_save(config, CONFIG_FILE)); 18536c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati config_free(config); 18636c1c09593a58717c78497cd55c4ed1dcf52183eSharvil Nanavati} 187