| // Copyright 2019 The Fuchsia Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include <stdint.h> | 
 | #include <zircon/status.h> | 
 |  | 
 | #include <zxtest/zxtest.h> | 
 |  | 
 | #include "src/sys/bin/psutils/ps_internal.h" | 
 |  | 
 | // Last character koid of deepest entry was getting dropped, see | 
 | // https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=7014#c48. | 
 | TEST(PsUtilsPrintTable, FullKoid) { | 
 |   char buf[4096]; | 
 |   FILE* f = fmemopen(buf, sizeof(buf), "w"); | 
 |   ASSERT_TRUE(f != NULL); | 
 |  | 
 |   ps_options_t options = {.also_show_threads = false, .only_show_jobs = false, .format_unit = 0}; | 
 |   task_entry_t entries[] = { | 
 |       { | 
 |           .type = 'j', | 
 |           .koid_str = "123456", | 
 |           .parent_koid_str = "0", | 
 |           .depth = 0, | 
 |           .name = "root", | 
 |           .state_str = "", | 
 |           .pss_bytes = 1234 * 1024 * 1024, | 
 |           .private_bytes = 1234 * 1024 * 1024, | 
 |           .shared_bytes = 1234 * 1024 * 1024, | 
 |       }, | 
 |       { | 
 |           .type = 'j', | 
 |           .koid_str = "7894567", | 
 |           .parent_koid_str = "123456", | 
 |           .depth = 1, | 
 |           .name = "my-job", | 
 |           .state_str = "", | 
 |           .pss_bytes = 1234 * 1024 * 1024, | 
 |           .private_bytes = 1234 * 1024 * 1024, | 
 |           .shared_bytes = 1234 * 1024 * 1024, | 
 |       }, | 
 |       { | 
 |           .type = 'p', | 
 |           .koid_str = "123456789", | 
 |           .parent_koid_str = "7894567", | 
 |           .depth = 2, | 
 |           .name = "my-proc", | 
 |           .state_str = "", | 
 |           .pss_bytes = 1234 * 1024 * 1024, | 
 |           .private_bytes = 1234 * 1024 * 1024, | 
 |           .shared_bytes = 1234 * 1024 * 1024, | 
 |       }, | 
 |   }; | 
 |   task_table_t table = {.entries = entries, .num_entries = 3, .capacity = 3}; | 
 |   print_table(&table, &options, f); | 
 |   fclose(f); | 
 |   EXPECT_EQ(strcmp(buf, | 
 |                    "TASK                 PSS PRIVATE  SHARED   STATE NAME\n" | 
 |                    "j: 123456          1234M   1234M                 root\n" | 
 |                    "  j: 7894567       1234M   1234M                 my-job\n" | 
 |                    "    p: 123456789   1234M   1234M   1234M         my-proc\n" | 
 |                    "TASK                 PSS PRIVATE  SHARED   STATE NAME\n"), | 
 |             0); | 
 | } | 
 |  | 
 | TEST(PsUtilsPs, PrintAll) { | 
 |   ps_options_t options = {.also_show_threads = false, .only_show_jobs = false, .format_unit = 0}; | 
 |   ASSERT_OK(show_all_jobs(&options)); | 
 | } | 
 |  | 
 | TEST(PsUtilsPs, PrintAllThreads) { | 
 |   ps_options_t options = {.also_show_threads = true, .only_show_jobs = false, .format_unit = 0}; | 
 |   ASSERT_OK(show_all_jobs(&options)); | 
 | } | 
 |  | 
 | TEST(PsUtilsPs, PrintAllJobs) { | 
 |   ps_options_t options = {.also_show_threads = false, .only_show_jobs = true, .format_unit = 0}; | 
 |   ASSERT_OK(show_all_jobs(&options)); | 
 | } |