diff options
Diffstat (limited to 'src/components/utils/test/generated_code_with_sqlite_test.cc')
-rw-r--r-- | src/components/utils/test/generated_code_with_sqlite_test.cc | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/src/components/utils/test/generated_code_with_sqlite_test.cc b/src/components/utils/test/generated_code_with_sqlite_test.cc new file mode 100644 index 0000000000..0feb040f49 --- /dev/null +++ b/src/components/utils/test/generated_code_with_sqlite_test.cc @@ -0,0 +1,217 @@ +/* Copyright (c) 2014, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sqlite3.h> +#include "gtest/gtest.h" +#include "utils/generated_code_with_sqlite_test.h" + +namespace rpc { + +class GeneratedCodeTest : public ::testing::Test { + public: + static void SetUpTestCase() { + sqlite3* conn; + sqlite3_open((kDatabaseName + ".sqlite").c_str(), &conn); + sqlite3_exec(conn, kEndpointsCreation.c_str(), NULL, NULL, NULL); + sqlite3_exec(conn, kEndpointsContent.c_str(), NULL, NULL, NULL); + sqlite3_exec(conn, kAppPoliciesCreation.c_str(), NULL, NULL, NULL); + sqlite3_exec(conn, kGroupsCreation.c_str(), NULL, NULL, NULL); + sqlite3_close(conn); + } + + static void TearDownTestCase() { + remove((kDatabaseName + ".sqlite").c_str()); + } + + static const std::string kDatabaseName; + static const std::string kEndpointsCreation; + static const std::string kEndpointsContent; + static const std::string kAppPoliciesCreation; + static const std::string kGroupsCreation; +}; + +const std::string GeneratedCodeTest::kDatabaseName = "test_db"; + +const std::string GeneratedCodeTest::kEndpointsCreation = + "CREATE TABLE Endpoints (" + "endpoint_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + "service_id VARCHAR(45) NOT NULL," + "application_id VARCHAR(45)," + "url VARCHAR(45) NOT NULL," + "is_default INTEGER NOT NULL CHECK(is_default>=0))"; + +const std::string GeneratedCodeTest::kEndpointsContent = + "INSERT INTO Endpoints " + "VALUES (1, '0x07', null, 'http://url.example.com', 1)"; + +const std::string GeneratedCodeTest::kAppPoliciesCreation = + "CREATE TABLE AppPolicies (" + "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + "application_id VARCHAR(45)," + "priority VARCHAR(45)," + "is_default INTEGER NOT NULL CHECK(is_default>=0))"; + +const std::string GeneratedCodeTest::kGroupsCreation = + "CREATE TABLE Groups (" + "id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + "application_id VARCHAR(45) NOT NULL," + "group_name VARCHAR(45) NOT NULL )"; + +TEST_F(GeneratedCodeTest, + FindSectionEndpoints_OpenDBSetDefaultUrl_ExpectDefaultUrl) { + // arrange + dbms::SQLDatabase db(GeneratedCodeTest::kDatabaseName); + + // assert + EXPECT_TRUE(db.Open()); + policy_table::ServiceEndpoints ep; + + // assert + EXPECT_TRUE(policy_table::FindSection(&db, ep)); + EXPECT_EQ(1u, ep.size()); + + // act + std::string url = ep["0x07"]["default"].front(); + + // assert + EXPECT_EQ("http://url.example.com", url); +} + +TEST_F(GeneratedCodeTest, + RemoveSectionEndpoints_RemoveSectionEndpoints_Expect0EndPoints) { + // arrange + dbms::SQLDatabase db(GeneratedCodeTest::kDatabaseName); + + // assert + EXPECT_TRUE(db.Open()); + + // act + policy_table::ServiceEndpoints ep; + + // assert + EXPECT_TRUE(policy_table::RemoveSection(&db, ep)); + dbms::SQLQuery sqlquery(&db); + + // act + std::string check_query = "select count (*) from endpoints"; + + // assert + EXPECT_TRUE(sqlquery.Prepare(check_query)); + EXPECT_TRUE(sqlquery.Exec()); + // Index for binding starts from 1, index for results starts from 0 + EXPECT_EQ(0, sqlquery.GetInteger(0)); +} + +TEST_F(GeneratedCodeTest, + UpdateSectionEndpoints_SetUrlPoint_ExpectPointEqualsUrl) { + // arrange + dbms::SQLDatabase db(GeneratedCodeTest::kDatabaseName); + + // assert + EXPECT_TRUE(db.Open()); + + // act + std::string test_url = "http://url.example.com"; + + policy_table::URL urls; + urls.push_back(test_url); + + policy_table::URLList urllist; + urllist["default"] = urls; + + policy_table::ServiceEndpoints ep; + ep["0x07"] = urllist; + + // assert + EXPECT_TRUE(policy_table::UpdateSection(&db, ep)); + + dbms::SQLQuery sqlquery(&db); + std::string num_of_records_check = "select count (*) from endpoints"; + + // assert + EXPECT_TRUE(sqlquery.Prepare(num_of_records_check)); + EXPECT_TRUE(sqlquery.Exec()); + // Index for binding starts from 1, index for results starts from 0 + EXPECT_EQ(1, sqlquery.GetInteger(0)); + EXPECT_TRUE(sqlquery.Reset()); + + // act + std::string url_check_query = "select * from endpoints"; + + // assert + EXPECT_TRUE(sqlquery.Prepare(url_check_query)); + EXPECT_TRUE(sqlquery.Exec()); + // Index for binding starts from 1, index for results starts from 0 + EXPECT_EQ(test_url, sqlquery.GetString(3)); +} + +TEST_F(GeneratedCodeTest, + UpdateSectionAppPolicies_SetAppParams_ExpectDBHasThem) { + // arrange + dbms::SQLDatabase db(GeneratedCodeTest::kDatabaseName); + + // assert + EXPECT_TRUE(db.Open()); + + // act + policy_table::ApplicationPolicies ap; + const std::string application_id = "12345678"; + ap[application_id].groups.push_back("Base-4"); + ap[application_id].priority = policy_table::P_NORMAL; + + // assert + EXPECT_TRUE(policy_table::UpdateSection(&db, ap)); + + // act + dbms::SQLQuery sqlquery(&db); + + // assert + EXPECT_TRUE(sqlquery.Prepare("select count (*) from AppPolicies")); + EXPECT_TRUE(sqlquery.Exec()); + // Index for binding starts from 1, index for results starts from 0 + EXPECT_EQ(1, sqlquery.GetInteger(0)); + EXPECT_TRUE(sqlquery.Reset()); + + EXPECT_TRUE(sqlquery.Prepare("select count (*) from Groups")); + EXPECT_TRUE(sqlquery.Exec()); + // Index for binding starts from 1, index for results starts from 0 + EXPECT_EQ(1, sqlquery.GetInteger(0)); + EXPECT_TRUE(sqlquery.Reset()); + + EXPECT_TRUE(sqlquery.Prepare( + "select application_id from Groups where group_name='Base-4'")); + EXPECT_TRUE(sqlquery.Exec()); + // Index for binding starts from 1, index for results starts from 0 + EXPECT_EQ(application_id, sqlquery.GetString(0)); + EXPECT_TRUE(sqlquery.Reset()); +} + +} // namespace rpc |