URL: https://github.com/SSSD/sssd/pull/454
Author: mzidek-rh
 Title: #454: TESTS: Order list of entries in some lists
Action: synchronized

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/454/head:pr454
git checkout pr454
From 3a8d6822751b907320e914008df578b31de80d8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzi...@redhat.com>
Date: Mon, 13 Nov 2017 16:15:21 +0100
Subject: [PATCH 1/2] TESTS: Order list of entries in some lists

Some tests started to fail becuase we depended on specific
order of users in groups or messages in ldb results to be
returned and that order changed.

This patch adds a simple helper functions into these tests
that order the entries before comparison with expected results.
more deterministic.

Resolves:
https://pagure.io/SSSD/sssd/issue/3563
---
 src/tests/cmocka/test_nss_srv.c     | 22 +++++++++++++++++++
 src/tests/cmocka/test_sysdb_views.c | 42 ++++++++++++++++++++++++++++++++-----
 2 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/src/tests/cmocka/test_nss_srv.c b/src/tests/cmocka/test_nss_srv.c
index 6aa726153..21bd80fb7 100644
--- a/src/tests/cmocka/test_nss_srv.c
+++ b/src/tests/cmocka/test_nss_srv.c
@@ -585,6 +585,25 @@ static errno_t delete_group(struct nss_test_ctx *ctx,
     return ret;
 }
 
+static int cmp_func(const void *a, const void *b)
+{
+    char *str1 = *(char **)discard_const(a);
+    char *str2 = *(char **)discard_const(b);
+
+    return strcmp(str1, str2);
+}
+
+static void order_string_array(char **_list, int size)
+{
+    if (size < 2 || _list == NULL || *_list == NULL) {
+        /* Nothing to do */
+        return;
+    }
+
+    qsort(_list, size, sizeof(char *), cmp_func);
+    return;
+}
+
 static void assert_groups_equal(struct group *expected,
                                 struct group *gr, const int nmem)
 {
@@ -594,6 +613,9 @@ static void assert_groups_equal(struct group *expected,
     assert_string_equal(gr->gr_name, expected->gr_name);
     assert_string_equal(gr->gr_passwd, expected->gr_passwd);
 
+    order_string_array(gr->gr_mem, nmem);
+    order_string_array(expected->gr_mem, nmem);
+
     for (i = 0; i < nmem; i++) {
         assert_string_equal(gr->gr_mem[i], expected->gr_mem[i]);
     }
diff --git a/src/tests/cmocka/test_sysdb_views.c b/src/tests/cmocka/test_sysdb_views.c
index 0378254b4..dd3eb50f9 100644
--- a/src/tests/cmocka/test_sysdb_views.c
+++ b/src/tests/cmocka/test_sysdb_views.c
@@ -22,6 +22,7 @@
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include <stdlib.h>
 #include <stdarg.h>
 #include <stddef.h>
 #include <setjmp.h>
@@ -612,6 +613,31 @@ static int test_enum_users_setup(void **state)
     return 0;
 }
 
+static int cmp_func(const void *a, const void *b)
+{
+    const char *str1;
+    const char *str2;
+    struct ldb_message *msg1 = *(struct ldb_message **)discard_const(a);
+    struct ldb_message *msg2 = *(struct ldb_message **)discard_const(b);
+
+    str1 = ldb_msg_find_attr_as_string(msg1, SYSDB_NAME, NULL);
+    str2 = ldb_msg_find_attr_as_string(msg2, SYSDB_NAME, NULL);
+
+    return strcmp(str1, str2);
+}
+
+/* Make the order of ldb results deterministic */
+static void order_ldb_res_msgs(struct ldb_result *res)
+{
+    if (res == NULL || res->count < 2) {
+        /* Nothing to do */
+        return;
+    }
+
+    qsort(res->msgs, res->count, sizeof(struct ldb_message *), cmp_func);
+    return;
+}
+
 static void assert_user_attrs(struct ldb_message *msg,
                               struct sss_domain_info *dom,
                               const char *shortname,
@@ -660,8 +686,9 @@ static void check_enumpwent(int ret, struct sss_domain_info *dom,
     assert_int_equal(ret, EOK);
     assert_int_equal(res->count, N_ELEMENTS(users)-1);
 
-    assert_user_attrs(res->msgs[0], dom, "barney", views);
-    assert_user_attrs(res->msgs[1], dom, "alice", views);
+    order_ldb_res_msgs(res);
+    assert_user_attrs(res->msgs[0], dom, "alice", views);
+    assert_user_attrs(res->msgs[1], dom, "barney", views);
     assert_user_attrs(res->msgs[2], dom, "bob", views);
 }
 
@@ -703,6 +730,7 @@ static void test_sysdb_enumpwent_filter(void **state)
     ret = sysdb_enumpwent_filter(test_ctx, test_ctx->domain, "b*", 0, &res);
     assert_int_equal(ret, EOK);
     assert_int_equal(res->count, 2);
+    order_ldb_res_msgs(res);
     assert_user_attrs(res->msgs[0], test_ctx->domain, "barney", false);
     assert_user_attrs(res->msgs[1], test_ctx->domain, "bob", false);
 
@@ -749,6 +777,7 @@ static void test_sysdb_enumpwent_filter_views(void **state)
                                             "b*", NULL, &res);
     assert_int_equal(ret, EOK);
     assert_int_equal(res->count, 2);
+    order_ldb_res_msgs(res);
     assert_user_attrs(res->msgs[0], test_ctx->domain, "barney", true);
     assert_user_attrs(res->msgs[1], test_ctx->domain, "bob", true);
 
@@ -896,10 +925,11 @@ static void check_enumgrent(int ret, struct sss_domain_info *dom,
 {
     assert_int_equal(ret, EOK);
     assert_int_equal(res->count, N_ELEMENTS(groups)-1);
-    assert_group_attrs(res->msgs[0], dom, "three",
-                       views ? TEST_GID_OVERRIDE_BASE + 2 : 0);
-    assert_group_attrs(res->msgs[1], dom, "one",
+    order_ldb_res_msgs(res);
+    assert_group_attrs(res->msgs[0], dom, "one",
                        views ? TEST_GID_OVERRIDE_BASE : 0);
+    assert_group_attrs(res->msgs[1], dom, "three",
+                       views ? TEST_GID_OVERRIDE_BASE + 2 : 0);
     assert_group_attrs(res->msgs[2], dom, "two",
                        views ? TEST_GID_OVERRIDE_BASE + 1 : 0);
 }
@@ -942,6 +972,7 @@ static void test_sysdb_enumgrent_filter(void **state)
     ret = sysdb_enumgrent_filter(test_ctx, test_ctx->domain, "t*", 0, &res);
     assert_int_equal(ret, EOK);
     assert_int_equal(res->count, 2);
+    order_ldb_res_msgs(res);
     assert_group_attrs(res->msgs[0], test_ctx->domain, "three", 0);
     assert_group_attrs(res->msgs[1], test_ctx->domain, "two", 0);
 
@@ -988,6 +1019,7 @@ static void test_sysdb_enumgrent_filter_views(void **state)
                                             "t*", NULL, &res);
     assert_int_equal(ret, EOK);
     assert_int_equal(res->count, 2);
+    order_ldb_res_msgs(res);
     assert_group_attrs(res->msgs[0], test_ctx->domain,
                        "three", TEST_GID_OVERRIDE_BASE + 2);
     assert_group_attrs(res->msgs[1], test_ctx->domain, "two",

From c401b7112f3166bd8750bfc0294152e116a1f512 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20=C5=BDidek?= <mzi...@redhat.com>
Date: Mon, 20 Nov 2017 17:07:11 +0100
Subject: [PATCH 2/2] Revert "BUILD: Disable tests with know failures"

This reverts commit 44bc6e8f49eec9e7ab9a952845bffcc0fd3b3a44.
---
 Makefile.am | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index a6f20c1c2..16bcb4efc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -237,6 +237,7 @@ endif # HAVE_CHECK
 
 if HAVE_CMOCKA
     non_interactive_cmocka_based_tests = \
+        nss-srv-tests \
         test-find-uid \
         test-io \
         test-negcache \
@@ -259,6 +260,7 @@ if HAVE_CMOCKA
         test_sdap_certmap \
         sdap-tests \
         test_sysdb_ts_cache \
+        test_sysdb_views \
         test_sysdb_subdomains \
         test_sysdb_certmap \
         test_sysdb_sudo \
_______________________________________________
sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org
To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org

Reply via email to