replaced snprintf with BIO version (for windows builds)
[openssl.git] / test / provider_internal_test.c
index c423808f3e4c8e8fdc699d0486cfe2c7bf01e2f4..f3006fe263388725ef76e0cb738be3efdd912b9c 100644 (file)
@@ -8,6 +8,7 @@
  */
 
 #include <stddef.h>
+#include <openssl/crypto.h>
 #include "internal/provider.h"
 #include "testutil.h"
 
@@ -20,31 +21,34 @@ static OSSL_PARAM greeting_request[] = {
     { NULL, 0, NULL, 0, NULL }
 };
 
-static int test_provider(OSSL_PROVIDER *prov)
+static int test_provider(OSSL_PROVIDER *prov, const char *expected_greeting)
 {
-    const char *name = NULL;
     const char *greeting = NULL;
-    char expected_greeting[256];
     int ret = 0;
 
-    if (!TEST_ptr(name = ossl_provider_name(prov)))
-        return 0;
-
-    snprintf(expected_greeting, sizeof(expected_greeting),
-             "Hello OpenSSL %.20s, greetings from %s!",
-             OPENSSL_VERSION_STR, name);
-
     ret =
         TEST_true(ossl_provider_activate(prov))
         && TEST_true(ossl_provider_get_params(prov, greeting_request))
-        && TEST_ptr(greeting = greeting_request[0].buffer)
-        && TEST_size_t_gt(greeting_request[0].buffer_size, 0)
+        && TEST_ptr(greeting = greeting_request[0].data)
+        && TEST_size_t_gt(greeting_request[0].data_size, 0)
         && TEST_str_eq(greeting, expected_greeting);
 
+    TEST_info("Got this greeting: %s\n", greeting);
     ossl_provider_free(prov);
     return ret;
 }
 
+static const char *expected_greeting1(const char *name)
+{
+    static char expected_greeting[256] = "";
+
+    BIO_snprintf(expected_greeting, sizeof(expected_greeting),
+                 "Hello OpenSSL %.20s, greetings from %s!",
+                 OPENSSL_VERSION_STR, name);
+
+    return expected_greeting;
+}
+
 static int test_builtin_provider(void)
 {
     const char *name = "p_test_builtin";
@@ -53,10 +57,10 @@ static int test_builtin_provider(void)
     return
         TEST_ptr(prov =
                  ossl_provider_new(NULL, name, PROVIDER_INIT_FUNCTION_NAME))
-        && test_provider(prov);
+        && test_provider(prov, expected_greeting1(name));
 }
 
-#ifndef OPENSSL_NO_SHARED
+#ifndef OPENSSL_NO_MODULE
 static int test_loaded_provider(void)
 {
     const char *name = "p_test";
@@ -64,15 +68,30 @@ static int test_loaded_provider(void)
 
     return
         TEST_ptr(prov = ossl_provider_new(NULL, name, NULL))
-        && test_provider(prov);
+        && test_provider(prov, expected_greeting1(name));
+}
+
+static int test_configured_provider(void)
+{
+    const char *name = "p_test_configured";
+    OSSL_PROVIDER *prov = NULL;
+    /* This MUST match the config file */
+    const char *expected_greeting =
+        "Hello OpenSSL, greetings from Test Provider";
+
+    return
+        OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL)
+        && TEST_ptr(prov = ossl_provider_find(NULL, name))
+        && test_provider(prov, expected_greeting);
 }
 #endif
 
 int setup_tests(void)
 {
     ADD_TEST(test_builtin_provider);
-#ifndef OPENSSL_NO_SHARED
+#ifndef OPENSSL_NO_MODULE
     ADD_TEST(test_loaded_provider);
+    ADD_TEST(test_configured_provider);
 #endif
     return 1;
 }