1 #include <darwintest.h>
2 #include <darwintest_utils.h>
4 #include <mach/task_info.h>
7 T_GLOBAL_META(T_META_RUN_CONCURRENTLY(true));
10 void test_os_proc_available_memory(void);
11 extern int getpid(void);
13 T_DECL(test_os_proc_available_memory
, "Basic available memory")
16 task_vm_info_data_t vm_info
= {};
17 mach_msg_type_number_t count
= TASK_VM_INFO_REV4_COUNT
;
18 uint64_t remainingBytes
;
20 err
= task_info(mach_task_self(), TASK_VM_INFO
, (task_info_t
)&vm_info
, &count
);
21 remainingBytes
= os_proc_available_memory();
23 T_ASSERT_MACH_SUCCESS(err
, "verify task_info call succeeded");
24 T_EXPECT_EQ(count
, TASK_VM_INFO_REV4_COUNT
, "task_info count(%d) is equal to TASK_VM_INFO_REV4_COUNT (%d)\n", count
, TASK_VM_INFO_REV4_COUNT
);
25 T_EXPECT_NE(remainingBytes
, 0ULL, "os_proc_available_memory() should not return 0");
26 T_EXPECT_NE(vm_info
.limit_bytes_remaining
, 0ULL, "vm_info.limit_bytes_remaining should not return 0");
27 T_EXPECT_EQ(vm_info
.limit_bytes_remaining
, remainingBytes
,
28 "task_info --rev4 call returned value 0x%llx for vm_info.limit_bytes_remaining. Expected 0x%llx",
29 vm_info
.limit_bytes_remaining
, remainingBytes
);
31 /* this should now make the available memory return 0 */
32 proc_track_dirty(getpid(), PROC_DIRTY_TRACK
);
34 count
= TASK_VM_INFO_REV4_COUNT
;
35 err
= task_info(mach_task_self(), TASK_VM_INFO
, (task_info_t
)&vm_info
, &count
);
36 remainingBytes
= os_proc_available_memory();
38 T_ASSERT_MACH_SUCCESS(err
, "verify task_info call succeeded");
39 T_EXPECT_EQ(count
, TASK_VM_INFO_REV4_COUNT
, "task_info count(%d) is equal to TASK_VM_INFO_REV4_COUNT\n", count
);
40 T_EXPECT_EQ(remainingBytes
, 0ULL, "os_proc_available_memory() should return 0");
41 T_EXPECT_EQ(vm_info
.limit_bytes_remaining
, 0ULL, "vm_info.limit_bytes_remaining should return 0");
42 T_EXPECT_EQ(vm_info
.limit_bytes_remaining
, remainingBytes
,
43 "task_info --rev4 call returned value 0x%llx for vm_info.limit_bytes_remaining. Expected 0x%llx",
44 vm_info
.limit_bytes_remaining
, remainingBytes
);
47 T_DECL(test_os_proc_available_memory
, "Basic available memory")
49 T_SKIP("Not available on macOS");