Now we have afalg-backend and libiary-backend, it's necessary to add the speed test in test-crypto-hmac.
We can use "./tests/test-crypto-hmac speed" to do the speed test. Signed-off-by: Longpeng(Mike) <longpe...@huawei.com> --- tests/test-crypto-hmac.c | 66 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/tests/test-crypto-hmac.c b/tests/test-crypto-hmac.c index ee55382..febc556 100644 --- a/tests/test-crypto-hmac.c +++ b/tests/test-crypto-hmac.c @@ -251,16 +251,74 @@ static void test_hmac_digest(void) } } +static void test_hmac_speed(const void *opaque) +{ + size_t chunk_size = (size_t)opaque; + QCryptoHmac *hmac = NULL; + uint8_t *in = NULL, *out = NULL; + size_t out_len = 0; + double total = 0.0; + struct iovec iov; + Error *err = NULL; + int ret; + + if (!qcrypto_hmac_supports(QCRYPTO_HASH_ALG_SHA256)) { + return; + } + + hmac = qcrypto_hmac_new(QCRYPTO_HASH_ALG_SHA256, (const uint8_t *)KEY, + strlen(KEY), &err); + g_assert(err == NULL); + g_assert(hmac != NULL); + + in = g_new0(uint8_t, chunk_size); + memset(in, g_test_rand_int(), chunk_size); + + iov.iov_base = (char *)in; + iov.iov_len = chunk_size; + + g_test_timer_start(); + do { + ret = qcrypto_hmac_bytesv(hmac, &iov, 1, &out, &out_len, &err); + g_assert(ret == 0); + g_assert(err == NULL); + + total += chunk_size; + } while (g_test_timer_elapsed() < 5.0); + + total /= 1024 * 1024; /* to MB */ + + g_print("[drv:%s]", qcrypto_hmac_using_afalg_drv(hmac) ? + "afalg" : "libs"); + g_print("Testing hmac(sha256): "); + g_print("Encrypting in chunks of %ld bytes: ", chunk_size); + g_print("done. %.2f MB in %.2f secs: ", total, g_test_timer_last()); + g_print("%.2f MB/sec\t", total / g_test_timer_last()); + + qcrypto_hmac_free(hmac); + g_free(out); + g_free(in); +} + int main(int argc, char **argv) { + size_t i; + g_test_init(&argc, &argv, NULL); g_assert(qcrypto_init(NULL) == 0); - g_test_add_func("/crypto/hmac/iov", test_hmac_iov); - g_test_add_func("/crypto/hmac/alloc", test_hmac_alloc); - g_test_add_func("/crypto/hmac/prealloc", test_hmac_prealloc); - g_test_add_func("/crypto/hmac/digest", test_hmac_digest); + if ((argc > 1) && !strcmp(argv[1], "speed")) { + for (i = 512; i <= (64 * 1204); i *= 2) { + g_test_add_data_func("/crypto/hmac/speed", (void *)i, + test_hmac_speed); + } + } else { + g_test_add_func("/crypto/hmac/iov", test_hmac_iov); + g_test_add_func("/crypto/hmac/alloc", test_hmac_alloc); + g_test_add_func("/crypto/hmac/prealloc", test_hmac_prealloc); + g_test_add_func("/crypto/hmac/digest", test_hmac_digest); + } return g_test_run(); } -- 1.8.3.1