test/mem: add external mem autotest to meson
[dpdk.git] / test / test / test_eal_flags.c
index 8d1da2c..2acab9d 100644 (file)
@@ -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
@@ -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"};
@@ -973,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) {
@@ -1046,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;
        }