Hex Artifact Content
Not logged in

Artifact d50e4dfdd7d8eaeec12af0e68cd69f1b43fa942f:


0000: 23 69 6e 63 6c 75 64 65 20 22 74 65 73 74 2f 6a  #include "test/j
0010: 65 6d 61 6c 6c 6f 63 5f 74 65 73 74 2e 68 22 0a  emalloc_test.h".
0020: 0a 73 74 61 74 69 63 20 62 6f 6f 6c 20 64 69 64  .static bool did
0030: 5f 70 72 6f 66 5f 64 75 6d 70 5f 6f 70 65 6e 3b  _prof_dump_open;
0040: 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 70 72 6f  ..static int.pro
0050: 66 5f 64 75 6d 70 5f 6f 70 65 6e 5f 69 6e 74 65  f_dump_open_inte
0060: 72 63 65 70 74 28 62 6f 6f 6c 20 70 72 6f 70 61  rcept(bool propa
0070: 67 61 74 65 5f 65 72 72 2c 20 63 6f 6e 73 74 20  gate_err, const 
0080: 63 68 61 72 20 2a 66 69 6c 65 6e 61 6d 65 29 0a  char *filename).
0090: 7b 0a 09 69 6e 74 20 66 64 3b 0a 0a 09 64 69 64  {..int fd;...did
00a0: 5f 70 72 6f 66 5f 64 75 6d 70 5f 6f 70 65 6e 20  _prof_dump_open 
00b0: 3d 20 74 72 75 65 3b 0a 0a 09 66 64 20 3d 20 6f  = true;...fd = o
00c0: 70 65 6e 28 22 2f 64 65 76 2f 6e 75 6c 6c 22 2c  pen("/dev/null",
00d0: 20 4f 5f 57 52 4f 4e 4c 59 29 3b 0a 09 61 73 73   O_WRONLY);..ass
00e0: 65 72 74 5f 64 5f 6e 65 28 66 64 2c 20 2d 31 2c  ert_d_ne(fd, -1,
00f0: 20 22 55 6e 65 78 70 65 63 74 65 64 20 6f 70 65   "Unexpected ope
0100: 6e 28 29 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a  n() failure");..
0110: 09 72 65 74 75 72 6e 20 28 66 64 29 3b 0a 7d 0a  .return (fd);.}.
0120: 0a 54 45 53 54 5f 42 45 47 49 4e 28 74 65 73 74  .TEST_BEGIN(test
0130: 5f 67 64 75 6d 70 29 0a 7b 0a 09 62 6f 6f 6c 20  _gdump).{..bool 
0140: 61 63 74 69 76 65 2c 20 67 64 75 6d 70 2c 20 67  active, gdump, g
0150: 64 75 6d 70 5f 6f 6c 64 3b 0a 09 76 6f 69 64 20  dump_old;..void 
0160: 2a 70 2c 20 2a 71 2c 20 2a 72 2c 20 2a 73 3b 0a  *p, *q, *r, *s;.
0170: 09 73 69 7a 65 5f 74 20 73 7a 3b 0a 0a 09 74 65  .size_t sz;...te
0180: 73 74 5f 73 6b 69 70 5f 69 66 28 21 63 6f 6e 66  st_skip_if(!conf
0190: 69 67 5f 70 72 6f 66 29 3b 0a 0a 09 61 63 74 69  ig_prof);...acti
01a0: 76 65 20 3d 20 74 72 75 65 3b 0a 09 61 73 73 65  ve = true;..asse
01b0: 72 74 5f 64 5f 65 71 28 6d 61 6c 6c 63 74 6c 28  rt_d_eq(mallctl(
01c0: 22 70 72 6f 66 2e 61 63 74 69 76 65 22 2c 20 4e  "prof.active", N
01d0: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 28 76 6f 69 64  ULL, NULL, (void
01e0: 20 2a 29 26 61 63 74 69 76 65 2c 0a 09 20 20 20   *)&active,..   
01f0: 20 73 69 7a 65 6f 66 28 61 63 74 69 76 65 29 29   sizeof(active))
0200: 2c 20 30 2c 0a 09 20 20 20 20 22 55 6e 65 78 70  , 0,..    "Unexp
0210: 65 63 74 65 64 20 6d 61 6c 6c 63 74 6c 20 66 61  ected mallctl fa
0220: 69 6c 75 72 65 20 77 68 69 6c 65 20 61 63 74 69  ilure while acti
0230: 76 61 74 69 6e 67 20 70 72 6f 66 69 6c 69 6e 67  vating profiling
0240: 22 29 3b 0a 0a 09 70 72 6f 66 5f 64 75 6d 70 5f  ");...prof_dump_
0250: 6f 70 65 6e 20 3d 20 70 72 6f 66 5f 64 75 6d 70  open = prof_dump
0260: 5f 6f 70 65 6e 5f 69 6e 74 65 72 63 65 70 74 3b  _open_intercept;
0270: 0a 0a 09 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70  ...did_prof_dump
0280: 5f 6f 70 65 6e 20 3d 20 66 61 6c 73 65 3b 0a 09  _open = false;..
0290: 70 20 3d 20 6d 61 6c 6c 6f 63 78 28 63 68 75 6e  p = mallocx(chun
02a0: 6b 73 69 7a 65 2c 20 30 29 3b 0a 09 61 73 73 65  ksize, 0);..asse
02b0: 72 74 5f 70 74 72 5f 6e 6f 74 5f 6e 75 6c 6c 28  rt_ptr_not_null(
02c0: 70 2c 20 22 55 6e 65 78 70 65 63 74 65 64 20 6d  p, "Unexpected m
02d0: 61 6c 6c 6f 63 78 28 29 20 66 61 69 6c 75 72 65  allocx() failure
02e0: 22 29 3b 0a 09 61 73 73 65 72 74 5f 74 72 75 65  ");..assert_true
02f0: 28 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70 5f 6f  (did_prof_dump_o
0300: 70 65 6e 2c 20 22 45 78 70 65 63 74 65 64 20 61  pen, "Expected a
0310: 20 70 72 6f 66 69 6c 65 20 64 75 6d 70 22 29 3b   profile dump");
0320: 0a 0a 09 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70  ...did_prof_dump
0330: 5f 6f 70 65 6e 20 3d 20 66 61 6c 73 65 3b 0a 09  _open = false;..
0340: 71 20 3d 20 6d 61 6c 6c 6f 63 78 28 63 68 75 6e  q = mallocx(chun
0350: 6b 73 69 7a 65 2c 20 30 29 3b 0a 09 61 73 73 65  ksize, 0);..asse
0360: 72 74 5f 70 74 72 5f 6e 6f 74 5f 6e 75 6c 6c 28  rt_ptr_not_null(
0370: 71 2c 20 22 55 6e 65 78 70 65 63 74 65 64 20 6d  q, "Unexpected m
0380: 61 6c 6c 6f 63 78 28 29 20 66 61 69 6c 75 72 65  allocx() failure
0390: 22 29 3b 0a 09 61 73 73 65 72 74 5f 74 72 75 65  ");..assert_true
03a0: 28 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70 5f 6f  (did_prof_dump_o
03b0: 70 65 6e 2c 20 22 45 78 70 65 63 74 65 64 20 61  pen, "Expected a
03c0: 20 70 72 6f 66 69 6c 65 20 64 75 6d 70 22 29 3b   profile dump");
03d0: 0a 0a 09 67 64 75 6d 70 20 3d 20 66 61 6c 73 65  ...gdump = false
03e0: 3b 0a 09 73 7a 20 3d 20 73 69 7a 65 6f 66 28 67  ;..sz = sizeof(g
03f0: 64 75 6d 70 5f 6f 6c 64 29 3b 0a 09 61 73 73 65  dump_old);..asse
0400: 72 74 5f 64 5f 65 71 28 6d 61 6c 6c 63 74 6c 28  rt_d_eq(mallctl(
0410: 22 70 72 6f 66 2e 67 64 75 6d 70 22 2c 20 28 76  "prof.gdump", (v
0420: 6f 69 64 20 2a 29 26 67 64 75 6d 70 5f 6f 6c 64  oid *)&gdump_old
0430: 2c 20 26 73 7a 2c 0a 09 20 20 20 20 28 76 6f 69  , &sz,..    (voi
0440: 64 20 2a 29 26 67 64 75 6d 70 2c 20 73 69 7a 65  d *)&gdump, size
0450: 6f 66 28 67 64 75 6d 70 29 29 2c 20 30 2c 0a 09  of(gdump)), 0,..
0460: 20 20 20 20 22 55 6e 65 78 70 65 63 74 65 64 20      "Unexpected 
0470: 6d 61 6c 6c 63 74 6c 20 66 61 69 6c 75 72 65 20  mallctl failure 
0480: 77 68 69 6c 65 20 64 69 73 61 62 6c 69 6e 67 20  while disabling 
0490: 70 72 6f 66 2e 67 64 75 6d 70 22 29 3b 0a 09 61  prof.gdump");..a
04a0: 73 73 65 72 74 28 67 64 75 6d 70 5f 6f 6c 64 29  ssert(gdump_old)
04b0: 3b 0a 09 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70  ;..did_prof_dump
04c0: 5f 6f 70 65 6e 20 3d 20 66 61 6c 73 65 3b 0a 09  _open = false;..
04d0: 72 20 3d 20 6d 61 6c 6c 6f 63 78 28 63 68 75 6e  r = mallocx(chun
04e0: 6b 73 69 7a 65 2c 20 30 29 3b 0a 09 61 73 73 65  ksize, 0);..asse
04f0: 72 74 5f 70 74 72 5f 6e 6f 74 5f 6e 75 6c 6c 28  rt_ptr_not_null(
0500: 71 2c 20 22 55 6e 65 78 70 65 63 74 65 64 20 6d  q, "Unexpected m
0510: 61 6c 6c 6f 63 78 28 29 20 66 61 69 6c 75 72 65  allocx() failure
0520: 22 29 3b 0a 09 61 73 73 65 72 74 5f 66 61 6c 73  ");..assert_fals
0530: 65 28 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70 5f  e(did_prof_dump_
0540: 6f 70 65 6e 2c 20 22 55 6e 65 78 70 65 63 74 65  open, "Unexpecte
0550: 64 20 70 72 6f 66 69 6c 65 20 64 75 6d 70 22 29  d profile dump")
0560: 3b 0a 0a 09 67 64 75 6d 70 20 3d 20 74 72 75 65  ;...gdump = true
0570: 3b 0a 09 73 7a 20 3d 20 73 69 7a 65 6f 66 28 67  ;..sz = sizeof(g
0580: 64 75 6d 70 5f 6f 6c 64 29 3b 0a 09 61 73 73 65  dump_old);..asse
0590: 72 74 5f 64 5f 65 71 28 6d 61 6c 6c 63 74 6c 28  rt_d_eq(mallctl(
05a0: 22 70 72 6f 66 2e 67 64 75 6d 70 22 2c 20 28 76  "prof.gdump", (v
05b0: 6f 69 64 20 2a 29 26 67 64 75 6d 70 5f 6f 6c 64  oid *)&gdump_old
05c0: 2c 20 26 73 7a 2c 0a 09 20 20 20 20 28 76 6f 69  , &sz,..    (voi
05d0: 64 20 2a 29 26 67 64 75 6d 70 2c 20 73 69 7a 65  d *)&gdump, size
05e0: 6f 66 28 67 64 75 6d 70 29 29 2c 20 30 2c 0a 09  of(gdump)), 0,..
05f0: 20 20 20 20 22 55 6e 65 78 70 65 63 74 65 64 20      "Unexpected 
0600: 6d 61 6c 6c 63 74 6c 20 66 61 69 6c 75 72 65 20  mallctl failure 
0610: 77 68 69 6c 65 20 65 6e 61 62 6c 69 6e 67 20 70  while enabling p
0620: 72 6f 66 2e 67 64 75 6d 70 22 29 3b 0a 09 61 73  rof.gdump");..as
0630: 73 65 72 74 28 21 67 64 75 6d 70 5f 6f 6c 64 29  sert(!gdump_old)
0640: 3b 0a 09 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70  ;..did_prof_dump
0650: 5f 6f 70 65 6e 20 3d 20 66 61 6c 73 65 3b 0a 09  _open = false;..
0660: 73 20 3d 20 6d 61 6c 6c 6f 63 78 28 63 68 75 6e  s = mallocx(chun
0670: 6b 73 69 7a 65 2c 20 30 29 3b 0a 09 61 73 73 65  ksize, 0);..asse
0680: 72 74 5f 70 74 72 5f 6e 6f 74 5f 6e 75 6c 6c 28  rt_ptr_not_null(
0690: 71 2c 20 22 55 6e 65 78 70 65 63 74 65 64 20 6d  q, "Unexpected m
06a0: 61 6c 6c 6f 63 78 28 29 20 66 61 69 6c 75 72 65  allocx() failure
06b0: 22 29 3b 0a 09 61 73 73 65 72 74 5f 74 72 75 65  ");..assert_true
06c0: 28 64 69 64 5f 70 72 6f 66 5f 64 75 6d 70 5f 6f  (did_prof_dump_o
06d0: 70 65 6e 2c 20 22 45 78 70 65 63 74 65 64 20 61  pen, "Expected a
06e0: 20 70 72 6f 66 69 6c 65 20 64 75 6d 70 22 29 3b   profile dump");
06f0: 0a 0a 09 64 61 6c 6c 6f 63 78 28 70 2c 20 30 29  ...dallocx(p, 0)
0700: 3b 0a 09 64 61 6c 6c 6f 63 78 28 71 2c 20 30 29  ;..dallocx(q, 0)
0710: 3b 0a 09 64 61 6c 6c 6f 63 78 28 72 2c 20 30 29  ;..dallocx(r, 0)
0720: 3b 0a 09 64 61 6c 6c 6f 63 78 28 73 2c 20 30 29  ;..dallocx(s, 0)
0730: 3b 0a 7d 0a 54 45 53 54 5f 45 4e 44 0a 0a 69 6e  ;.}.TEST_END..in
0740: 74 0a 6d 61 69 6e 28 76 6f 69 64 29 0a 7b 0a 0a  t.main(void).{..
0750: 09 72 65 74 75 72 6e 20 28 74 65 73 74 28 0a 09  .return (test(..
0760: 20 20 20 20 74 65 73 74 5f 67 64 75 6d 70 29 29      test_gdump))
0770: 3b 0a 7d 0a                                      ;.}.