a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina/*
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina Authors:
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina Jakub Hrozek <jhrozek@redhat.com>
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina Copyright (C) 2014 Red Hat
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina SSSD tests: User utilities
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina This program is free software; you can redistribute it and/or modify
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina it under the terms of the GNU General Public License as published by
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina the Free Software Foundation; either version 3 of the License, or
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina (at your option) any later version.
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina This program is distributed in the hope that it will be useful,
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina GNU General Public License for more details.
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina You should have received a copy of the GNU General Public License
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina*/
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina#include <sys/types.h>
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina#include <sys/stat.h>
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina#include <fcntl.h>
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina#include <popt.h>
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina#include "util/util.h"
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina#include "tests/cmocka/common_mock.h"
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březinavoid test_get_user_num(void **state)
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina{
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina uid_t uid;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina gid_t gid;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina errno_t ret;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina ret = sss_user_by_name_or_uid("123", &uid, &gid);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(ret, EOK);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(uid, 123);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(gid, 456);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina}
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březinavoid test_get_user_str(void **state)
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina{
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina uid_t uid;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina gid_t gid;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina errno_t ret;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina ret = sss_user_by_name_or_uid("sssd", &uid, &gid);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(ret, EOK);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(uid, 123);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(gid, 456);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina}
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březinavoid test_get_user_nullparm(void **state)
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina{
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina uid_t uid;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina gid_t gid;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina errno_t ret;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina ret = sss_user_by_name_or_uid("sssd", &uid, NULL);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(ret, EOK);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(uid, 123);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina ret = sss_user_by_name_or_uid("sssd", NULL, &gid);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(ret, EOK);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina assert_int_equal(gid, 456);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina}
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březinaint main(int argc, const char *argv[])
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina{
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina poptContext pc;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina int opt;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina struct poptOption long_options[] = {
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina POPT_AUTOHELP
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina SSSD_DEBUG_OPTS
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina POPT_TABLEEND
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina };
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina const struct CMUnitTest tests[] = {
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina cmocka_unit_test(test_get_user_num),
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina cmocka_unit_test(test_get_user_str),
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina cmocka_unit_test(test_get_user_nullparm),
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina };
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina /* Set debug level to invalid value so we can decide if -d 0 was used. */
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina debug_level = SSSDBG_INVALID;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina pc = poptGetContext(argv[0], argc, argv, long_options, 0);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina while((opt = poptGetNextOpt(pc)) != -1) {
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina switch(opt) {
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina default:
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina fprintf(stderr, "\nInvalid option %s: %s\n\n",
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina poptBadOption(pc, 0), poptStrerror(opt));
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina poptPrintUsage(pc, stderr, 0);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina return 1;
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina }
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina }
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina poptFreeContext(pc);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina DEBUG_CLI_INIT(debug_level);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina tests_set_cwd();
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina return cmocka_run_group_tests(tests, NULL, NULL);
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina}
a7e27c11866a48742bb70564b88e15bf15e9367dPavel Březina