b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech/*
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech Authors:
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech Petr Čech <pcech@redhat.com>
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech Copyright (C) 2015 Red Hat
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech This program is free software; you can redistribute it and/or modify
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech it under the terms of the GNU General Public License as published by
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech the Free Software Foundation; either version 3 of the License, or
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech (at your option) any later version.
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech This program is distributed in the hope that it will be useful,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech but WITHOUT ANY WARRANTY; without even the implied warranty of
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech GNU General Public License for more details.
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech You should have received a copy of the GNU General Public License
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech along with this program. If not, see <http://www.gnu.org/licenses/>.
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech*/
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#include <talloc.h>
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#include <errno.h>
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#include <popt.h>
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#include "tests/cmocka/common_mock.h"
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#include "src/tools/common/sss_colondb.h"
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#define TESTS_PATH "tp_" BASE_FILE_STEM
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech#define TESTS_FILE "test_colondb.ldb"
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechconst char *TEST_STRING1 = "white";
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechconst int TEST_INT1 = 12;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechconst char *TEST_STRING2 = "black";
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechconst int TEST_INT2 = 34;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic void create_dir(const char *path)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno = 0;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = mkdir(path, 0775);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_return_code(ret, errno);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic void create_empty_file(TALLOC_CTX *test_ctx, const char *path,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech const char *name)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *tmp_ctx = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech char *file_name = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech FILE *fp = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech tmp_ctx = talloc_new(test_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(tmp_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech create_dir(path);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech file_name = talloc_asprintf(tmp_ctx, "%s/%s", path, name);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(file_name);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech fp = fopen(file_name, "w");
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(fp);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech fclose(fp);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(tmp_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic void create_nonempty_file(TALLOC_CTX *test_ctx,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech const char *path, const char *name)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *tmp_ctx = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_write_field table[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = TEST_STRING2 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = TEST_INT2 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech tmp_ctx = talloc_new(test_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(tmp_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech create_empty_file(test_ctx, TESTS_PATH, TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(tmp_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_writeline(db, table);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, EOK);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(tmp_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic int setup(void **state, int file_state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_true(leak_check_setup());
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech test_ctx = talloc_new(global_talloc_context);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(test_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech switch (file_state) {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech case 0:
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech break;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech case 1:
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech create_empty_file(test_ctx, TESTS_PATH, TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech break;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech case 2:
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech create_nonempty_file(test_ctx, TESTS_PATH, TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech break;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech default:
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech break;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech check_leaks_push(test_ctx);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech *state = test_ctx;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return 0;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic int without_file_setup(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return setup(state, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic int with_empty_file_setup(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return setup(state, 1);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic int with_nonempty_file_setup(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return setup(state, 2);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechstatic int teardown(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno = 0;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = unlink(TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech if (ret != 0) {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(errno, ENOENT);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_true(check_leaks_pop(*state));
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_zfree(*state);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech test_dom_suite_cleanup(TESTS_PATH, NULL, NULL);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_true(leak_check_teardown());
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return 0;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_open_nonexist_for_read(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_READ,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_open_nonexist_for_write(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_open_exist_for_read(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_READ,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_open_exist_for_write(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_open_nonempty_for_read(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_READ,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_open_nonempty_for_write(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_write_to_empty(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_write_field table[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = TEST_STRING1 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = TEST_INT1 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_writeline(db, table);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_write_to_nonempty(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_write_field table[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = TEST_STRING1 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = TEST_INT1 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_writeline(db, table);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_read_from_nonempty(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech const char *string = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech uint32_t number;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_read_field table[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = &string } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = &number } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_READ,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_readline(test_ctx, db, table);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_string_equal(string, TEST_STRING2);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(number, TEST_INT2);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_zfree(string);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_read_from_empty(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech const char *string;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech uint32_t number;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_read_field table[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = &string } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = &number } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_READ,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_readline(test_ctx, db, table);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, EOF);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechvoid test_write_read(void **state)
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TALLOC_CTX *test_ctx = *state;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb *db = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech errno_t ret;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech const char *string = NULL;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech uint32_t number;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_write_field table_in[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = TEST_STRING2 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = TEST_INT2 } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct sss_colondb_read_field table_out[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_STRING, { .str = &string } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_UINT32, { .uint32 = &number } },
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech { SSS_COLONDB_SENTINEL, { 0 } }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_WRITE,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_writeline(db, table_in);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech db = sss_colondb_open(test_ctx, SSS_COLONDB_READ,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech TESTS_PATH "/" TESTS_FILE);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_non_null(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech ret = sss_colondb_readline(test_ctx, db, table_out);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(ret, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_string_equal(string, TEST_STRING2);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech assert_int_equal(number, TEST_INT2);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_zfree(string);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech talloc_free(db);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cechint main(int argc, const char *argv[])
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech{
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech poptContext pc;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech int opt;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech struct poptOption long_options[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech POPT_AUTOHELP
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech SSSD_DEBUG_OPTS
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech POPT_TABLEEND
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech const struct CMUnitTest tests[] = {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_open_nonexist_for_read,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech without_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_open_nonexist_for_write,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech without_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_open_exist_for_read,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_empty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_open_exist_for_write,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_empty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_open_nonempty_for_read,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_nonempty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_open_nonempty_for_write,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_nonempty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_write_to_empty,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_empty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_write_to_nonempty,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_nonempty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_read_from_empty,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_empty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_read_from_nonempty,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_nonempty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech cmocka_unit_test_setup_teardown(test_write_read,
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech with_empty_file_setup, teardown),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech };
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech /* Set debug level to invalid value so we can decide if -d 0 was used. */
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech debug_level = SSSDBG_INVALID;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech pc = poptGetContext(argv[0], argc, argv, long_options, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech while ((opt = poptGetNextOpt(pc)) != -1) {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech switch (opt) {
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech default:
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech fprintf(stderr, "\nInvalid option %s: %s\n\n", poptBadOption(pc, 0),
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech poptStrerror(opt));
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech poptPrintUsage(pc, stderr, 0);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return 1;
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech }
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech poptFreeContext(pc);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech DEBUG_CLI_INIT(debug_level);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech /* Even though normally the tests should clean up after themselves
57c5ea8825c7179fd93382dbcbb07e828e5aec19René Genz * they might not after a failed run. Remove the old DB to be sure */
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech tests_set_cwd();
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech test_dom_suite_cleanup(TESTS_PATH, NULL, NULL);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech return cmocka_run_group_tests(tests, NULL, NULL);
b590f44c06158485357d69cc5b24d5af05f1bb95Petr Cech}