Esempio n. 1
0
static int test_query(void)
{
   x11display_t x11disp;

   // TEST isextxrandr_x11display
   x11disp.xrandr.isSupported = true ;
   TEST(true  == isextxrandr_x11display(&x11disp)) ;
   x11disp.xrandr.isSupported = false ;
   TEST(false == isextxrandr_x11display(&x11disp)) ;

   // TEST isfree_x11display
   memset(&x11disp, 255, sizeof(x11disp));
   TEST(0 == isfree_x11display(&x11disp));
   x11disp.idmap = 0;
   TEST(0 == isfree_x11display(&x11disp));
   x11disp.sys_display = 0;
   TEST(1 == isfree_x11display(&x11disp));

   // TEST sysdisplay_x11display
   for (uintptr_t i = 15; i <= 15; --i) {
      x11disp.sys_display = (void*)i;
      TEST((struct sys_display_t*)i == sysdisplay_x11display(&x11disp));
   }

   // TEST io_x11display
   TEST(0 == init_x11display(&x11disp, ":0.0"));
   TEST(0 == isfree_x11display(&x11disp));
   TEST(0  < io_x11display(&x11disp));
   int fd = io_x11display(&x11disp);
   TEST(0 == free_x11display(&x11disp));
   TEST(1 == isfree_x11display(&x11disp));

   // TEST io_x11display: same fd
   TEST(0 == init_x11display(&x11disp, ":0.0"));
   TEST(fd == io_x11display(&x11disp));
   TEST(0 == free_x11display(&x11disp));

   // TEST errorstring_x11display: last char is set to 0
   char errstr[100] ;
   char errstr2[100] ;
   memset(errstr, 1, sizeof(errstr)) ;
   memset(errstr2, 1, sizeof(errstr2)) ;
   TEST(0 == init_x11display(&x11disp, ":0.0")) ;
   TEST(sizeof(errstr) == strnlen(errstr, sizeof(errstr))) ;
   errorstring_x11display(&x11disp, 1, errstr, sizeof(errstr)) ;
   uint8_t errlen = (uint8_t) strnlen(errstr, sizeof(errstr)) ;
   TEST(2              < errlen) ;
   TEST(sizeof(errstr) > errlen) ;
   errorstring_x11display(&x11disp, 1, errstr2, errlen) ;
   TEST(0 == strncmp(errstr, errstr2, (uint8_t)(errlen-2))) ;
   TEST(0 != errstr[errlen-1]) ;
   TEST(0 == errstr2[errlen-1]) ;
   memset(errstr, 1, sizeof(errstr)) ;
   TEST(0 == memcmp(errstr, errstr2 + errlen, sizeof(errstr2)-errlen)) ;
   TEST(0 == free_x11display(&x11disp)) ;

   return 0 ;
ONERR:
   return EINVAL ;
}
Esempio n. 2
0
/* function: childprocess_environment
 * Execute this test in child to make changing environment safe.
 * XOpenDisplay has memory leak in case server does not exist. */
static int childprocess_environment(void * dummy)
{
   (void) dummy;
   x11display_t   x11disp = x11display_FREE;

   // TEST init_x11display: ECONNREFUSED
   TEST(ECONNREFUSED == init_x11display(&x11disp, ":9999.0")) ;
   TEST(0 == x11disp.sys_display) ;

   // TEST init_x11display: getenv("DISPLAY")
   if (!getenv("DISPLAY")) {
      TEST(0 == setenv("DISPLAY", ":0", 1)) ;
   }
   TEST(0 == init_x11display(&x11disp, 0 /*use value of getenv("DISPLAY")*/)) ;
   TEST(0 == free_x11display(&x11disp)) ;

   // TEST init_x11display: EINVAL / DISPLAY not set
   TEST(0 == unsetenv("DISPLAY")) ;
   TEST(0 == getenv("DISPLAY")) ;
   TEST(EINVAL == init_x11display(&x11disp, 0/*use value of getenv("DISPLAY") => EINVAL*/)) ;
   TEST(0 == x11disp.sys_display) ;

   return 0 ;
ONERR:
   TEST(0 == free_x11display(&x11disp)) ;
   return EINVAL ;
}
Esempio n. 3
0
static int childprocess_unittest(void)
{
    x11display_t      x11disp   = x11display_FREE ;
    x11screen_t       x11screen = x11screen_FREE ;
    resourceusage_t   usage     = resourceusage_FREE ;

    // prepare
    TEST(0 == init_x11display(&x11disp, ":0")) ;
    x11screen = defaultscreen_x11display(&x11disp) ;

    if (test_iterator(&x11screen))      goto ONERR;
    if (test_initfree(&x11screen))      goto ONERR;
    if (test_setvideomode(&x11screen))  goto ONERR; // has memory leak

    TEST(0 == init_resourceusage(&usage)) ;

    if (test_iterator(&x11screen))      goto ONERR;
    if (test_initfree(&x11screen))      goto ONERR;

    TEST(0 == same_resourceusage(&usage)) ;
    TEST(0 == free_resourceusage(&usage)) ;

    // unprepare
    TEST(0 == free_x11display(&x11disp)) ;

    return 0 ;
ONERR:
    (void) free_resourceusage(&usage) ;
    (void) free_x11display(&x11disp) ;
    return EINVAL ;
}
Esempio n. 4
0
static int childprocess_unittest(void)
{
   x11display_t      x11disp1 = x11display_FREE ;
   x11display_t      x11disp2 = x11display_FREE ;
   resourceusage_t   usage    = resourceusage_FREE ;

   // XQueryExtension keeps file descriptors and memory
   // without it no resource leak !
   TEST(0 == init_resourceusage(&usage)) ;
   TEST(0 == init2_x11display(&x11disp1, ":0", false)) ;
   TEST(0 == free_x11display(&x11disp1)) ;
   TEST(0 == same_resourceusage(&usage)) ;
   TEST(0 == free_resourceusage(&usage)) ;

   TEST(0 == init_resourceusage(&usage)) ;
   if (test_initfree_env())     goto ONERR;
   TEST(0 == same_resourceusage(&usage)) ;
   TEST(0 == free_resourceusage(&usage)) ;

   if (test_initfree())    goto ONERR;

   TEST(0 == init_x11display(&x11disp1, ":0")) ;
   TEST(0 == init_x11display(&x11disp2, ":0")) ;
   char errstr[100];
   errorstring_x11display(&x11disp1, 1, errstr, sizeof(errstr));

   TEST(0 == init_resourceusage(&usage)) ;

   if (test_query())                            goto ONERR;
   if (test_screen(&x11disp1, &x11disp2))       goto ONERR;
   if (test_extensions(&x11disp1))              goto ONERR;
   if (test_id_manager(&x11disp1, &x11disp2))   goto ONERR;

   TEST(0 == same_resourceusage(&usage)) ;
   TEST(0 == free_resourceusage(&usage)) ;

   TEST(0 == free_x11display(&x11disp1)) ;
   TEST(0 == free_x11display(&x11disp2)) ;

   return 0 ;
ONERR:
   (void) free_x11display(&x11disp1);
   (void) free_x11display(&x11disp2);
   (void) free_resourceusage(&usage);
   return EINVAL ;
}
Esempio n. 5
0
static int test_initfree(void)
{
   x11display_t  x11disp  = x11display_FREE ;
   x11display_t  x11disp4 = x11display_FREE ;
   pid_t         child    = 1 ;

   // TEST x11display_FREE
   TEST(x11disp.idmap       == 0) ;
   TEST(x11disp.sys_display == 0) ;
   TEST(x11disp.atoms.WM_PROTOCOLS       == 0) ;
   TEST(x11disp.atoms.WM_DELETE_WINDOW   == 0) ;
   TEST(x11disp.atoms._NET_FRAME_EXTENTS == 0) ;
   TEST(x11disp.atoms._NET_WM_WINDOW_OPACITY == 0) ;

   // TEST init2_x11display, free_x11display
   for (int isExtension = 0; isExtension <= 1; ++isExtension) {
      TEST(0 == init2_x11display(&x11disp, ":0.0", (isExtension != 0))) ;
      TEST(x11disp.idmap       != 0) ;
      TEST(x11disp.sys_display != 0) ;
      TEST(x11disp.atoms.WM_PROTOCOLS       == XInternAtom(x11disp.sys_display, "WM_PROTOCOLS", False)) ;
      TEST(x11disp.atoms.WM_DELETE_WINDOW   == XInternAtom(x11disp.sys_display, "WM_DELETE_WINDOW", False)) ;
      TEST(x11disp.atoms._NET_FRAME_EXTENTS == XInternAtom(x11disp.sys_display, "_NET_FRAME_EXTENTS", False)) ;
      TEST(x11disp.atoms._NET_WM_WINDOW_OPACITY == XInternAtom(x11disp.sys_display, "_NET_WM_WINDOW_OPACITY", False)) ;
      TEST(0  < io_x11display(&x11disp)) ;
      TEST(0 == free_x11display(&x11disp)) ;
      TEST(0 == x11disp.idmap) ;
      TEST(0 == x11disp.sys_display) ;
      TEST(0 == free_x11display(&x11disp)) ;
      TEST(0 == x11disp.idmap) ;
      TEST(0 == x11disp.sys_display) ;
   }

   // TEST init_x11display, free_x11display
   TEST(0 == init_x11display(&x11disp, ":0.0")) ;
   TEST(x11disp.idmap       != 0) ;
   TEST(x11disp.sys_display != 0) ;
   TEST(x11disp.atoms.WM_PROTOCOLS       == XInternAtom(x11disp.sys_display, "WM_PROTOCOLS", False)) ;
   TEST(x11disp.atoms.WM_DELETE_WINDOW   == XInternAtom(x11disp.sys_display, "WM_DELETE_WINDOW", False)) ;
   TEST(x11disp.atoms._NET_FRAME_EXTENTS == XInternAtom(x11disp.sys_display, "_NET_FRAME_EXTENTS", False)) ;
   TEST(x11disp.atoms._NET_WM_WINDOW_OPACITY == XInternAtom(x11disp.sys_display, "_NET_WM_WINDOW_OPACITY", False)) ;
   TEST(0  < io_x11display(&x11disp)) ;
   TEST(0 == free_x11display(&x11disp)) ;
   TEST(0 == x11disp.idmap) ;
   TEST(0 == x11disp.sys_display) ;
   TEST(0 == free_x11display(&x11disp)) ;
   TEST(0 == x11disp.idmap) ;
   TEST(0 == x11disp.sys_display) ;

   // TEST init_x11display: 2 different connections
   TEST(0 == init_x11display(&x11disp, ":0.0")) ;
   TEST(x11disp.idmap       != 0) ;
   TEST(x11disp.sys_display != 0) ;
   TEST(x11disp.atoms.WM_PROTOCOLS       == XInternAtom(x11disp.sys_display, "WM_PROTOCOLS", False)) ;
   TEST(x11disp.atoms.WM_DELETE_WINDOW   == XInternAtom(x11disp.sys_display, "WM_DELETE_WINDOW", False)) ;
   TEST(x11disp.atoms._NET_FRAME_EXTENTS == XInternAtom(x11disp.sys_display, "_NET_FRAME_EXTENTS", False)) ;
   TEST(x11disp.atoms._NET_WM_WINDOW_OPACITY == XInternAtom(x11disp.sys_display, "_NET_WM_WINDOW_OPACITY", False)) ;
   TEST(0  < io_x11display(&x11disp)) ;
   TEST(0 == init_x11display(&x11disp4, ":0.0")) ;  // creates new connection
   TEST(x11disp4.idmap       != 0) ;
   TEST(x11disp4.sys_display != 0) ;
   TEST(x11disp4.sys_display != x11disp.sys_display) ;
   TEST(x11disp4.atoms.WM_PROTOCOLS       == XInternAtom(x11disp.sys_display, "WM_PROTOCOLS", False)) ;
   TEST(x11disp4.atoms.WM_DELETE_WINDOW   == XInternAtom(x11disp.sys_display, "WM_DELETE_WINDOW", False)) ;
   TEST(x11disp4.atoms._NET_FRAME_EXTENTS == XInternAtom(x11disp.sys_display, "_NET_FRAME_EXTENTS", False)) ;
   TEST(x11disp4.atoms._NET_WM_WINDOW_OPACITY == XInternAtom(x11disp.sys_display, "_NET_WM_WINDOW_OPACITY", False)) ;
   TEST(io_x11display(&x11disp4) >  0) ;
   TEST(io_x11display(&x11disp4) != io_x11display(&x11disp)) ;
   TEST(0 == free_x11display(&x11disp4)) ;
   TEST(0 == x11disp4.idmap) ;
   TEST(0 == x11disp4.sys_display) ;
   TEST(0 == free_x11display(&x11disp)) ;
   TEST(0 == x11disp.idmap) ;
   TEST(0 == x11disp.sys_display) ;

   return 0 ;
ONERR:
   if (!child) exit(1) ;
   (void) free_x11display(&x11disp) ;
   (void) free_x11display(&x11disp4) ;
   return EINVAL ;
}