app/test: add ARMv8 crypto tests and test vectors
[dpdk.git] / app / test / test_cryptodev.c
index e8d1eae..0f0cf4d 100644 (file)
@@ -348,6 +348,28 @@ testsuite_setup(void)
                }
        }
 
+       /* Create 2 ARMv8 devices if required */
+       if (gbl_cryptodev_type == RTE_CRYPTODEV_ARMV8_PMD) {
+#ifndef RTE_LIBRTE_PMD_ARMV8_CRYPTO
+               RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO must be"
+                       " enabled in config file to run this testsuite.\n");
+               return TEST_FAILED;
+#endif
+               nb_devs = rte_cryptodev_count_devtype(
+                               RTE_CRYPTODEV_ARMV8_PMD);
+               if (nb_devs < 2) {
+                       for (i = nb_devs; i < 2; i++) {
+                               ret = rte_eal_vdev_init(
+                                       RTE_STR(CRYPTODEV_NAME_ARMV8_PMD),
+                                       NULL);
+
+                               TEST_ASSERT(ret == 0, "Failed to create "
+                                       "instance %u of pmd : %s", i,
+                                       RTE_STR(CRYPTODEV_NAME_ARMV8_PMD));
+                       }
+               }
+       }
+
 #ifndef RTE_LIBRTE_PMD_QAT
        if (gbl_cryptodev_type == RTE_CRYPTODEV_QAT_SYM_PMD) {
                RTE_LOG(ERR, USER1, "CONFIG_RTE_LIBRTE_PMD_QAT must be enabled "
@@ -1593,6 +1615,22 @@ test_authonly_openssl_all(void)
        return TEST_SUCCESS;
 }
 
+static int
+test_AES_chain_armv8_all(void)
+{
+       struct crypto_testsuite_params *ts_params = &testsuite_params;
+       int status;
+
+       status = test_blockcipher_all_tests(ts_params->mbuf_pool,
+               ts_params->op_mpool, ts_params->valid_devs[0],
+               RTE_CRYPTODEV_ARMV8_PMD,
+               BLKCIPHER_AES_CHAIN_TYPE);
+
+       TEST_ASSERT_EQUAL(status, 0, "Test failed");
+
+       return TEST_SUCCESS;
+}
+
 /* ***** SNOW 3G Tests ***** */
 static int
 create_wireless_algo_hash_session(uint8_t dev_id,
@@ -7847,6 +7885,23 @@ static struct unit_test_suite cryptodev_null_testsuite  = {
        }
 };
 
+static struct unit_test_suite cryptodev_armv8_testsuite  = {
+       .suite_name = "Crypto Device ARMv8 Unit Test Suite",
+       .setup = testsuite_setup,
+       .teardown = testsuite_teardown,
+       .unit_test_cases = {
+               TEST_CASE_ST(ut_setup, ut_teardown, test_AES_chain_armv8_all),
+
+               /** Negative tests */
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       auth_decryption_AES128CBC_HMAC_SHA1_fail_data_corrupt),
+               TEST_CASE_ST(ut_setup, ut_teardown,
+                       auth_decryption_AES128CBC_HMAC_SHA1_fail_tag_corrupt),
+
+               TEST_CASES_END() /**< NULL terminate unit test array */
+       }
+};
+
 static int
 test_cryptodev_qat(void /*argv __rte_unused, int argc __rte_unused*/)
 {
@@ -7910,6 +7965,14 @@ test_cryptodev_sw_zuc(void /*argv __rte_unused, int argc __rte_unused*/)
        return unit_test_suite_runner(&cryptodev_sw_zuc_testsuite);
 }
 
+static int
+test_cryptodev_armv8(void)
+{
+       gbl_cryptodev_type = RTE_CRYPTODEV_ARMV8_PMD;
+
+       return unit_test_suite_runner(&cryptodev_armv8_testsuite);
+}
+
 REGISTER_TEST_COMMAND(cryptodev_qat_autotest, test_cryptodev_qat);
 REGISTER_TEST_COMMAND(cryptodev_aesni_mb_autotest, test_cryptodev_aesni_mb);
 REGISTER_TEST_COMMAND(cryptodev_openssl_autotest, test_cryptodev_openssl);
@@ -7918,3 +7981,4 @@ REGISTER_TEST_COMMAND(cryptodev_null_autotest, test_cryptodev_null);
 REGISTER_TEST_COMMAND(cryptodev_sw_snow3g_autotest, test_cryptodev_sw_snow3g);
 REGISTER_TEST_COMMAND(cryptodev_sw_kasumi_autotest, test_cryptodev_sw_kasumi);
 REGISTER_TEST_COMMAND(cryptodev_sw_zuc_autotest, test_cryptodev_sw_zuc);
+REGISTER_TEST_COMMAND(cryptodev_sw_armv8_autotest, test_cryptodev_armv8);