test_sbus_opath.c revision 10a28f461c25d788ff4dcffefa881e7aa724a25d
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen/*
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen Authors:
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen Jakub Hrozek <jhrozek@redhat.com>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen Pavel Březina <pbrezina@redhat.com>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen Copyright (C) 2014 Red Hat
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen This program is free software; you can redistribute it and/or modify
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen it under the terms of the GNU General Public License as published by
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen the Free Software Foundation; either version 3 of the License, or
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen (at your option) any later version.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen This program is distributed in the hope that it will be useful,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen but WITHOUT ANY WARRANTY; without even the implied warranty of
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen GNU General Public License for more details.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen You should have received a copy of the GNU General Public License
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen along with this program. If not, see <http://www.gnu.org/licenses/>.
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen*/
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include <talloc.h>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include <errno.h>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include <popt.h>
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include "sbus/sssd_dbus.h"
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include "tests/cmocka/common_mock.h"
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#include "tests/common.h"
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen#define BASE_PATH "/some/path"
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_strip_prefix(void **state)
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *prefix = "/org/freedesktop/sssd/";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/org/freedesktop/sssd/infopipe";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *strip;
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen strip = sbus_opath_strip_prefix(path, prefix);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(prefix);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(strip, "infopipe");
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen strip = sbus_opath_strip_prefix("/other/path", prefix);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(strip);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_escape_unescape(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *escaped;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *raw;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen TALLOC_CTX *mem_ctx;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_true(leak_check_setup());
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen mem_ctx = talloc_new(global_talloc_context);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen escaped = sbus_opath_escape_part(mem_ctx, "noescape");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(escaped, "noescape");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen raw = sbus_opath_unescape_part(mem_ctx, escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(raw, "noescape");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen escaped = sbus_opath_escape_part(mem_ctx, "redhat.com");
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen assert_non_null(escaped);
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen assert_string_equal(escaped, "redhat_2ecom"); /* dot is 0x2E in ASCII */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen raw = sbus_opath_unescape_part(mem_ctx, escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(raw, "redhat.com");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen escaped = sbus_opath_escape_part(mem_ctx, "path_with_underscore");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* underscore is 0x5F in ascii */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(escaped, "path_5fwith_5funderscore");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen raw = sbus_opath_unescape_part(mem_ctx, escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(raw, "path_with_underscore");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* empty string */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen escaped = sbus_opath_escape_part(mem_ctx, "");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(escaped, "_");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen raw = sbus_opath_unescape_part(mem_ctx, escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(raw, "");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* negative tests */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen escaped = sbus_opath_escape_part(mem_ctx, NULL);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(escaped);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen raw = sbus_opath_unescape_part(mem_ctx, "wrongpath_");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(raw);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_true(leak_check_teardown());
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_compose(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *path;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* Doesn't need escaping */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen path = sbus_opath_compose(NULL, BASE_PATH, "domname");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(path);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(path, BASE_PATH "/domname");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(path);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainenvoid test_sbus_opath_compose_escape(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char *path;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen /* A dot needs escaping */
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen path = sbus_opath_compose(NULL, BASE_PATH, "redhat.com", NULL);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(path);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(path, BASE_PATH "/redhat_2ecom");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(path);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenstatic void check_opath_components(char **input,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char **expected)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int i;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(input);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(expected);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen for (i = 0; input[i] != NULL; i++) {
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen assert_non_null(input[i]);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(expected[i]);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(input[i], expected[i]);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen }
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(input[i]);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(expected[i]);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenstatic void check_opath_components_and_length(char **input,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t input_len,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char **expected,
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t expected_len)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_true(input_len == expected_len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen check_opath_components(input, expected);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_decompose_noprefix(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/path/parts";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *expected[] = {"object", "path", "parts", NULL};
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t expected_len = sizeof(expected) / sizeof(char *) - 1;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char **components;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t len;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen errno_t ret;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ret = sbus_opath_decompose(NULL, path, NULL, &components, &len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_int_equal(ret, EOK);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen check_opath_components_and_length(components, len, expected, expected_len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(components);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_decompose_prefix(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/path/parts";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *expected[] = {"parts", NULL};
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t expected_len = sizeof(expected) / sizeof(char *) - 1;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char **components;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t len;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen errno_t ret;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ret = sbus_opath_decompose(NULL, path, "/object/path", &components, &len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_int_equal(ret, EOK);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen check_opath_components_and_length(components, len, expected, expected_len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(components);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainenvoid test_sbus_opath_decompose_prefix_slash(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/path/parts";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *expected[] = {"parts", NULL};
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t expected_len = sizeof(expected) / sizeof(char *) - 1;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char **components;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t len;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen errno_t ret;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ret = sbus_opath_decompose(NULL, path, "/object/path/", &components, &len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_int_equal(ret, EOK);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen check_opath_components_and_length(components, len, expected, expected_len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(components);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_decompose_wrong_prefix(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/path/parts";
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen char **components;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t len;
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen errno_t ret;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ret = sbus_opath_decompose(NULL, path, "/wrong/prefix", &components, &len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_int_equal(ret, ERR_SBUS_INVALID_PATH);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_decompose_escaped(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/redhat_2ecom";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *expected[] = {"object", "redhat.com", NULL};
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t expected_len = sizeof(expected) / sizeof(char *) - 1;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char **components;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen size_t len;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen errno_t ret;
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen ret = sbus_opath_decompose(NULL, path, NULL, &components, &len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_int_equal(ret, EOK);
55bc6a7a0940ec48a68558ef70838991c5d301d2Timo Sirainen check_opath_components_and_length(components, len, expected, expected_len);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(components);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_decompose_exact_correct(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/path/parts";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *expected[] = {"object", "path", "parts", NULL};
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char **components;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen errno_t ret;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen ret = sbus_opath_decompose_exact(NULL, path, NULL, 3, &components);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_int_equal(ret, EOK);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen check_opath_components(components, expected);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(components);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenvoid test_sbus_opath_decompose_exact_wrong(void **state)
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const char *path = "/object/path/parts";
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen char **components;
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen errno_t ret;
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen ret = sbus_opath_decompose_exact(NULL, path, NULL, 2, &components);
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen assert_int_equal(ret, ERR_SBUS_INVALID_PATH);
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen}
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainenvoid test_sbus_opath_get_object_name(void **state)
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen{
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen const char *path = BASE_PATH "/redhat_2ecom";
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen char *name;
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen name = sbus_opath_get_object_name(NULL, path, BASE_PATH);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(name);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(name, "redhat.com");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(name);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen name = sbus_opath_get_object_name(NULL, path, BASE_PATH "/");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_non_null(name);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_string_equal(name, "redhat.com");
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen talloc_free(name);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen name = sbus_opath_get_object_name(NULL, BASE_PATH, BASE_PATH);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(name);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen name = sbus_opath_get_object_name(NULL, "invalid", BASE_PATH);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen assert_null(name);
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen}
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainenint main(int argc, const char *argv[])
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen{
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen poptContext pc;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen int opt;
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen struct poptOption long_options[] = {
6c2ce1d5bf17b21e804a079eb0f973b7ab83e0d8Timo Sirainen POPT_AUTOHELP
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen SSSD_DEBUG_OPTS
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen POPT_TABLEEND
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen };
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen const struct CMUnitTest tests[] = {
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen cmocka_unit_test(test_sbus_opath_strip_prefix),
d176f84ce5ca2073f4dfbafb457b9c74f6bf0d76Timo Sirainen cmocka_unit_test(test_sbus_opath_escape_unescape),
cmocka_unit_test(test_sbus_opath_compose),
cmocka_unit_test(test_sbus_opath_compose_escape),
cmocka_unit_test(test_sbus_opath_decompose_noprefix),
cmocka_unit_test(test_sbus_opath_decompose_prefix),
cmocka_unit_test(test_sbus_opath_decompose_prefix_slash),
cmocka_unit_test(test_sbus_opath_decompose_wrong_prefix),
cmocka_unit_test(test_sbus_opath_decompose_escaped),
cmocka_unit_test(test_sbus_opath_decompose_exact_correct),
cmocka_unit_test(test_sbus_opath_decompose_exact_wrong),
cmocka_unit_test(test_sbus_opath_get_object_name)
};
/* Set debug level to invalid value so we can deside if -d 0 was used. */
debug_level = SSSDBG_INVALID;
pc = poptGetContext(argv[0], argc, argv, long_options, 0);
while((opt = poptGetNextOpt(pc)) != -1) {
switch(opt) {
default:
fprintf(stderr, "\nInvalid option %s: %s\n\n",
poptBadOption(pc, 0), poptStrerror(opt));
poptPrintUsage(pc, stderr, 0);
return 1;
}
}
poptFreeContext(pc);
DEBUG_CLI_INIT(debug_level);
return cmocka_run_group_tests(tests, NULL, NULL);
}