X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest%2Ftest_eal_flags.c;h=2acab9d69e49bd2032ae1059ac20a40feb9f337e;hb=a4712f588e6e7f556698eea7fbc2514d175693a6;hp=37c42efe8e721f8ee8d6bd00205044fd666cfbaf;hpb=ca33590b6af032bff57d9cc70455660466a654b2;p=deb_dpdk.git diff --git a/test/test/test_eal_flags.c b/test/test/test_eal_flags.c index 37c42efe..2acab9d6 100644 --- a/test/test/test_eal_flags.c +++ b/test/test/test_eal_flags.c @@ -33,7 +33,7 @@ #define memtest "memtest" #define memtest1 "memtest1" #define memtest2 "memtest2" -#define SOCKET_MEM_STRLEN (RTE_MAX_NUMA_NODES * 10) +#define SOCKET_MEM_STRLEN (RTE_MAX_NUMA_NODES * 20) #define launch_proc(ARGV) process_dup(ARGV, \ sizeof(ARGV)/(sizeof(ARGV[0])), __func__) @@ -221,30 +221,6 @@ get_number_of_sockets(void) } #endif -static char* -get_current_prefix(char * prefix, int size) -{ - char path[PATH_MAX] = {0}; - char buf[PATH_MAX] = {0}; - - /* get file for config (fd is always 3) */ - snprintf(path, sizeof(path), "/proc/self/fd/%d", 3); - - /* return NULL on error */ - if (readlink(path, buf, sizeof(buf)) == -1) - return NULL; - - /* get the basename */ - snprintf(buf, sizeof(buf), "%s", basename(buf)); - - /* copy string all the way from second char up to start of _config */ - snprintf(prefix, size, "%.*s", - (int)(strnlen(buf, sizeof(buf)) - sizeof("_config")), - &buf[1]); - - return prefix; -} - /* * Test that the app doesn't run with invalid whitelist option. * Final tests ensures it does run with valid options as sanity check (one @@ -376,17 +352,17 @@ test_invalid_vdev_flag(void) #endif /* Test with invalid vdev option */ - const char *vdevinval[] = {prgname, prefix, "-n", "1", + const char *vdevinval[] = {prgname, prefix, no_huge, "-n", "1", "-c", "1", vdev, "eth_dummy"}; /* Test with valid vdev option */ - const char *vdevval1[] = {prgname, prefix, "-n", "1", + const char *vdevval1[] = {prgname, prefix, no_huge, "-n", "1", "-c", "1", vdev, "net_ring0"}; - const char *vdevval2[] = {prgname, prefix, "-n", "1", + const char *vdevval2[] = {prgname, prefix, no_huge, "-n", "1", "-c", "1", vdev, "net_ring0,args=test"}; - const char *vdevval3[] = {prgname, prefix, "-n", "1", + const char *vdevval3[] = {prgname, prefix, no_huge, "-n", "1", "-c", "1", vdev, "net_ring0,nodeaction=r1:0:CREATE"}; if (launch_proc(vdevinval) == 0) { @@ -697,16 +673,18 @@ test_invalid_n_flag(void) static int test_no_hpet_flag(void) { - char prefix[PATH_MAX], tmp[PATH_MAX]; + char prefix[PATH_MAX] = ""; #ifdef RTE_EXEC_ENV_BSDAPP return 0; -#endif +#else + char tmp[PATH_MAX]; if (get_current_prefix(tmp, sizeof(tmp)) == NULL) { printf("Error - unable to get current prefix!\n"); return -1; } snprintf(prefix, sizeof(prefix), "--file-prefix=%s", tmp); +#endif /* With --no-hpet */ const char *argv1[] = {prgname, prefix, mp_flag, no_hpet, "-c", "1", "-n", "2"}; @@ -849,13 +827,10 @@ test_misc_flags(void) const char *argv4[] = {prgname, prefix, mp_flag, "-c", "1", "--syslog"}; /* With invalid --syslog */ const char *argv5[] = {prgname, prefix, mp_flag, "-c", "1", "--syslog", "error"}; - /* With no-sh-conf */ + /* With no-sh-conf, also use no-huge to ensure this test runs on BSD */ const char *argv6[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE, - no_shconf, nosh_prefix }; + no_shconf, nosh_prefix, no_huge}; -#ifdef RTE_EXEC_ENV_BSDAPP - return 0; -#endif /* With --huge-dir */ const char *argv7[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE, "--file-prefix=hugedir", "--huge-dir", hugepath}; @@ -889,6 +864,7 @@ test_misc_flags(void) const char *argv15[] = {prgname, "--file-prefix=intr", "-c", "1", "-n", "2", "--vfio-intr=invalid"}; + /* run all tests also applicable to FreeBSD first */ if (launch_proc(argv0) == 0) { printf("Error - process ran ok with invalid flag\n"); @@ -902,6 +878,16 @@ test_misc_flags(void) printf("Error - process did not run ok with -v flag\n"); return -1; } + if (launch_proc(argv6) != 0) { + printf("Error - process did not run ok with --no-shconf flag\n"); + return -1; + } + +#ifdef RTE_EXEC_ENV_BSDAPP + /* no more tests to be done on FreeBSD */ + return 0; +#endif + if (launch_proc(argv3) != 0) { printf("Error - process did not run ok with --syslog flag\n"); return -1; @@ -914,13 +900,6 @@ test_misc_flags(void) printf("Error - process run ok with invalid --syslog flag\n"); return -1; } - if (launch_proc(argv6) != 0) { - printf("Error - process did not run ok with --no-shconf flag\n"); - return -1; - } -#ifdef RTE_EXEC_ENV_BSDAPP - return 0; -#endif if (launch_proc(argv7) != 0) { printf("Error - process did not run ok with --huge-dir flag\n"); return -1; @@ -972,33 +951,48 @@ test_file_prefix(void) * 2. try to run secondary process without a corresponding primary process * (while failing to run, it will also remove any unused hugepage files) * 3. check if current process hugefiles are still in place and are locked - * 4. run a primary process with memtest1 prefix - * 5. check if memtest1 hugefiles are created - * 6. run a primary process with memtest2 prefix - * 7. check that only memtest2 hugefiles are present in the hugedir + * 4. run a primary process with memtest1 prefix in default and legacy + * mem mode + * 5. check if memtest1 hugefiles are created in case of legacy mem + * mode, and deleted in case of default mem mode + * 6. run a primary process with memtest2 prefix in default and legacy + * mem modes + * 7. check that memtest2 hugefiles are present in the hugedir after a + * run in legacy mode, and not present at all after run in default + * mem mode */ + char prefix[PATH_MAX] = ""; #ifdef RTE_EXEC_ENV_BSDAPP return 0; +#else + if (get_current_prefix(prefix, sizeof(prefix)) == NULL) { + printf("Error - unable to get current prefix!\n"); + return -1; + } #endif /* this should fail unless the test itself is run with "memtest" prefix */ const char *argv0[] = {prgname, mp_flag, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE, "--file-prefix=" memtest }; - /* primary process with memtest1 */ - const char *argv1[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE, - "--file-prefix=" memtest1 }; + /* primary process with memtest1 and default mem mode */ + const char *argv1[] = {prgname, "-c", "1", "-n", "2", "-m", + DEFAULT_MEM_SIZE, "--file-prefix=" memtest1 }; - /* primary process with memtest2 */ - const char *argv2[] = {prgname, "-c", "1", "-n", "2", "-m", DEFAULT_MEM_SIZE, - "--file-prefix=" memtest2 }; + /* primary process with memtest1 and legacy mem mode */ + const char *argv2[] = {prgname, "-c", "1", "-n", "2", "-m", + DEFAULT_MEM_SIZE, "--file-prefix=" memtest1, + "--legacy-mem" }; - char prefix[32]; - if (get_current_prefix(prefix, sizeof(prefix)) == NULL) { - printf("Error - unable to get current prefix!\n"); - return -1; - } + /* primary process with memtest2 and legacy mem mode */ + const char *argv3[] = {prgname, "-c", "1", "-n", "2", "-m", + DEFAULT_MEM_SIZE, "--file-prefix=" memtest2, + "--legacy-mem" }; + + /* primary process with memtest2 and default mem mode */ + const char *argv4[] = {prgname, "-c", "1", "-n", "2", "-m", + DEFAULT_MEM_SIZE, "--file-prefix=" memtest2 }; /* check if files for current prefix are present */ if (process_hugefiles(prefix, HUGEPAGE_CHECK_EXISTS) != 1) { @@ -1045,31 +1039,78 @@ test_file_prefix(void) return -1; } + /* we're running this process in default memory mode, which means it + * should clean up after itself on exit and leave no hugepages behind. + */ if (launch_proc(argv1) != 0) { - printf("Error - failed to run with --file-prefix=%s\n", memtest); + printf("Error - failed to run with --file-prefix=%s\n", + memtest1); return -1; } /* check if memtest1_map0 is present */ - if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 1) { - printf("Error - hugepage files for %s were not created!\n", memtest1); + if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) { + printf("Error - hugepage files for %s were not deleted!\n", + memtest1); return -1; } + /* now, we're running a process under the same prefix, but with legacy + * mem mode - this should leave behind hugepage files. + */ if (launch_proc(argv2) != 0) { - printf("Error - failed to run with --file-prefix=%s\n", memtest2); + printf("Error - failed to run with --file-prefix=%s\n", + memtest1); + return -1; + } + + /* check if memtest1_map0 is present */ + if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 1) { + printf("Error - hugepage files for %s were not created!\n", + memtest1); + return -1; + } + + if (launch_proc(argv3) != 0) { + printf("Error - failed to run with --file-prefix=%s\n", + memtest2); return -1; } /* check if hugefiles for memtest2 are present */ if (process_hugefiles(memtest2, HUGEPAGE_CHECK_EXISTS) != 1) { - printf("Error - hugepage files for %s were not created!\n", memtest2); + printf("Error - hugepage files for %s were not created!\n", + memtest2); + return -1; + } + + /* check if hugefiles for memtest1 are present */ + if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) { + printf("Error - hugepage files for %s were not deleted!\n", + memtest1); + return -1; + } + + /* this process will run in default mem mode, so it should not leave any + * hugepage files behind. + */ + if (launch_proc(argv4) != 0) { + printf("Error - failed to run with --file-prefix=%s\n", + memtest2); + return -1; + } + + /* check if hugefiles for memtest2 are present */ + if (process_hugefiles(memtest2, HUGEPAGE_CHECK_EXISTS) != 0) { + printf("Error - hugepage files for %s were not deleted!\n", + memtest2); return -1; } /* check if hugefiles for memtest1 are present */ if (process_hugefiles(memtest1, HUGEPAGE_CHECK_EXISTS) != 0) { - printf("Error - hugepage files for %s were not deleted!\n", memtest1); + printf("Error - hugepage files for %s were not deleted!\n", + memtest1); return -1; } @@ -1138,10 +1179,11 @@ test_memory_flags(void) #ifdef RTE_EXEC_ENV_BSDAPP int i, num_sockets = 1; #else - int i, num_sockets = get_number_of_sockets(); + int i, num_sockets = RTE_MIN(get_number_of_sockets(), + RTE_MAX_NUMA_NODES); #endif - if (num_sockets <= 0 || num_sockets > RTE_MAX_NUMA_NODES) { + if (num_sockets <= 0) { printf("Error - cannot get number of sockets!\n"); return -1; } @@ -1151,11 +1193,12 @@ test_memory_flags(void) /* add one extra socket */ for (i = 0; i < num_sockets + 1; i++) { snprintf(buf, sizeof(buf), "%s%s", invalid_socket_mem, DEFAULT_MEM_SIZE); - snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "%s", buf); + strlcpy(invalid_socket_mem, buf, sizeof(invalid_socket_mem)); if (num_sockets + 1 - i > 1) { snprintf(buf, sizeof(buf), "%s,", invalid_socket_mem); - snprintf(invalid_socket_mem, sizeof(invalid_socket_mem), "%s", buf); + strlcpy(invalid_socket_mem, buf, + sizeof(invalid_socket_mem)); } } @@ -1167,11 +1210,12 @@ test_memory_flags(void) /* add one extra socket */ for (i = 0; i < num_sockets; i++) { snprintf(buf, sizeof(buf), "%s%s", valid_socket_mem, DEFAULT_MEM_SIZE); - snprintf(valid_socket_mem, sizeof(valid_socket_mem), "%s", buf); + strlcpy(valid_socket_mem, buf, sizeof(valid_socket_mem)); if (num_sockets - i > 1) { snprintf(buf, sizeof(buf), "%s,", valid_socket_mem); - snprintf(valid_socket_mem, sizeof(valid_socket_mem), "%s", buf); + strlcpy(valid_socket_mem, buf, + sizeof(valid_socket_mem)); } }