tests: more libpamtest tests
authorJakub Hrozek <jakub.hrozek@posteo.se>
Wed, 28 Oct 2015 10:57:04 +0000 (11:57 +0100)
committerAndreas Schneider <asn@samba.org>
Thu, 10 Dec 2015 12:31:19 +0000 (13:31 +0100)
tests/test_pam_wrapper.c

index d62957e96e99781d7c3a634199403b4bf4438a69..62672be80da1d8c0977fda5a3cbb1ac7375ceb8b 100644 (file)
@@ -733,6 +733,61 @@ static void test_get_set(void **state)
        test_getenv(tests[1].case_out.envlist, "PAM_AUTHTOK_TYPE");
 }
 
+static void test_libpamtest_keepopen(void **state)
+{
+       int rv;
+       enum pamtest_err perr;
+       struct pamtest_conv_data conv_data;
+       const char *trinity_authtoks[] = {
+               "secret",
+               NULL,
+       };
+       struct pamtest_case tests[] = {
+               { PAMTEST_AUTHENTICATE, PAM_SUCCESS, PAMTEST_CASE_INIT },
+               { PAMTEST_KEEPHANDLE, PAM_SUCCESS, PAMTEST_CASE_INIT },
+               { PAMTEST_CASE_SENTINEL },
+       };
+
+       (void) state;   /* unused */
+
+       ZERO_STRUCT(conv_data);
+       conv_data.in_echo_off = trinity_authtoks;
+
+       perr = pamtest("matrix", "trinity", &conv_data, tests);
+       assert_int_equal(perr, PAMTEST_ERR_OK);
+
+       assert_non_null(tests[1].case_out.ph);
+
+       rv = pam_end(tests[1].case_out.ph, PAM_SUCCESS);
+       assert_int_equal(rv, PAM_SUCCESS);
+}
+
+static void test_libpamtest_get_failed_test(void **state)
+{
+       enum pamtest_err perr;
+       struct pamtest_conv_data conv_data;
+       const char *trinity_authtoks[] = {
+               "secret",
+               NULL,
+       };
+       struct pamtest_case tests[] = {
+               { PAMTEST_AUTHENTICATE, PAM_AUTH_ERR, PAMTEST_CASE_INIT },
+               { PAMTEST_CASE_SENTINEL },
+       };
+       const struct pamtest_case *failed_tc;
+
+       (void) state;   /* unused */
+
+       ZERO_STRUCT(conv_data);
+       conv_data.in_echo_off = trinity_authtoks;
+
+       perr = pamtest("matrix", "trinity", &conv_data, tests);
+       assert_int_not_equal(perr, PAMTEST_ERR_OK);
+
+       failed_tc = pamtest_failed_case(tests);
+       assert_true(failed_tc == &tests[0]);
+}
+
 int main(void) {
        int rc;
 
@@ -786,6 +841,12 @@ int main(void) {
                cmocka_unit_test_setup_teardown(test_pam_vsyslog,
                                                setup_noconv,
                                                teardown),
+               cmocka_unit_test_setup_teardown(test_libpamtest_keepopen,
+                                               setup_passdb,
+                                               teardown_passdb),
+               cmocka_unit_test_setup_teardown(test_libpamtest_get_failed_test,
+                                               setup_passdb,
+                                               teardown_passdb),
                cmocka_unit_test(test_get_set),
        };