product_database_test.c revision bdd62c531bbdea115a3a7e71bba91c19dd319cc4
19085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org/*
29085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * Copyright 2008 Google Inc.
39085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org *
45ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * Licensed under the Apache License, Version 2.0 (the "License");
55ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * you may not use this file except in compliance with the License.
65ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org * You may obtain a copy of the License at
75ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org *
89085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * http://www.apache.org/licenses/LICENSE-2.0
99085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org *
109085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * Unless required by applicable law or agreed to in writing, software
119085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * distributed under the License is distributed on an "AS IS" BASIS,
129085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * See the License for the specific language governing permissions and
149085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * limitations under the License.
159085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org */
169085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <stdarg.h>
179085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <stddef.h>
189085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <setjmp.h>
199085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <cmockery.h>
209085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org#include <database.h>
219085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
229085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgextern DatabaseConnection* connect_to_product_database();
239085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
249085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org/* Mock connect to database function.
259085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * NOTE: This mock function is very general could be shared between tests
269085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * that use the imaginary database.h module. */
279085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgDatabaseConnection* connect_to_database(const char * const url,
289085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org                                        const unsigned int port) {
299085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    check_expected(url);
309085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    check_expected(port);
319085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    return (DatabaseConnection*)mock();
329085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
3356454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org
349085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgvoid test_connect_to_product_database(void **state) {
359085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    expect_string(connect_to_database, url, "products.abcd.org");
369085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    expect_value(connect_to_database, port, 322);
379085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    will_return(connect_to_database, 0xDA7ABA53);
389085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert_int_equal((int)connect_to_product_database(), 0xDA7ABA53);
399085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
40196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org
41c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org/* This test will fail since the expected URL is different to the URL that is
4271affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org * passed to connect_to_database() by connect_to_product_database(). */
4371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgvoid test_connect_to_product_database_bad_url(void **state) {
449085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    expect_string(connect_to_database, url, "products.abcd.com");
45e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org    expect_value(connect_to_database, port, 322);
46e2902be65446e26fd63a3b4eab2f14257cf4ebafager@chromium.org    will_return(connect_to_database, 0xDA7ABA53);
479085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert_int_equal((int)connect_to_product_database(), 0xDA7ABA53);
489085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
499085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
509085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org/* This test will fail since the mock connect_to_database() will attempt to
519085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * retrieve a value for the parameter port which isn't specified by this
529085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org * test function. */
539085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgvoid test_connect_to_product_database_missing_parameter(void **state) {
549085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    expect_string(connect_to_database, url, "products.abcd.org");
559085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    will_return(connect_to_database, 0xDA7ABA53);
569085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    assert_int_equal((int)connect_to_product_database(), 0xDA7ABA53);
579085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
589085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org
599085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgint main(int argc, char* argv[]) {
609085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    const UnitTest tests[] = {
619085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org        unit_test(test_connect_to_product_database),
629085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org        unit_test(test_connect_to_product_database_bad_url),
639085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org        unit_test(test_connect_to_product_database_missing_parameter),
649085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    };
659085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org    return run_tests(tests);
669085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}
679085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org