12c28215423293e443469a07ae7011135d058b671Garrett Cooper/* 20dc076565f772bb1953209fb69ea150b494aaa40robbiew * Copyright (c) 2002, Intel Corporation. All rights reserved. 30dc076565f772bb1953209fb69ea150b494aaa40robbiew * Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com 40dc076565f772bb1953209fb69ea150b494aaa40robbiew * This file is licensed under the GPL license. For the full content 52c28215423293e443469a07ae7011135d058b671Garrett Cooper * of this license, see the COPYING file at the top level of this 60dc076565f772bb1953209fb69ea150b494aaa40robbiew * source tree. 70dc076565f772bb1953209fb69ea150b494aaa40robbiew 80dc076565f772bb1953209fb69ea150b494aaa40robbiew * Test that clock_settime() sets clock_id to tp. 90dc076565f772bb1953209fb69ea150b494aaa40robbiew * 100dc076565f772bb1953209fb69ea150b494aaa40robbiew * The clock_id chosen for this test is CLOCK_REALTIME. 110dc076565f772bb1953209fb69ea150b494aaa40robbiew * The date chosen is Nov 12, 2002 ~11:13am (date when test was first 120dc076565f772bb1953209fb69ea150b494aaa40robbiew * written). 130dc076565f772bb1953209fb69ea150b494aaa40robbiew */ 140dc076565f772bb1953209fb69ea150b494aaa40robbiew 150dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h> 160dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <time.h> 170dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <unistd.h> 180dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <errno.h> 190dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "posixtest.h" 200dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "helpers.h" 210dc076565f772bb1953209fb69ea150b494aaa40robbiew 222c28215423293e443469a07ae7011135d058b671Garrett Cooper#ifndef PR_NSEC_PER_SEC 230dc076565f772bb1953209fb69ea150b494aaa40robbiew#define PR_NSEC_PER_SEC 1000000000UL 240dc076565f772bb1953209fb69ea150b494aaa40robbiew#endif 250dc076565f772bb1953209fb69ea150b494aaa40robbiew 260dc076565f772bb1953209fb69ea150b494aaa40robbiew#define TESTTIME 1037128358 270dc076565f772bb1953209fb69ea150b494aaa40robbiew#define ACCEPTABLEDELTA 1 280dc076565f772bb1953209fb69ea150b494aaa40robbiew 2934d0e8b98cd31d8d5d1857ef8209c6cf6ff38012Cyril Hrubisint main(void) 300dc076565f772bb1953209fb69ea150b494aaa40robbiew{ 310dc076565f772bb1953209fb69ea150b494aaa40robbiew struct timespec tpset, tpget, tpreset, tpres; 32354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int delta, nsdelta; 330dc076565f772bb1953209fb69ea150b494aaa40robbiew 340dc076565f772bb1953209fb69ea150b494aaa40robbiew /* Check that we're root...can't call clock_settime with CLOCK_REALTIME otherwise */ 35354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (getuid() != 0) { 360dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Run this test as ROOT, not as a Regular User\n"); 370dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNTESTED; 380dc076565f772bb1953209fb69ea150b494aaa40robbiew } 39354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (clock_getres(CLOCK_REALTIME, &tpres) != 0) { 400dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Time resolution is not provided\n"); 410dc076565f772bb1953209fb69ea150b494aaa40robbiew tpres.tv_sec = 0; 420dc076565f772bb1953209fb69ea150b494aaa40robbiew tpres.tv_nsec = 10000000; 430dc076565f772bb1953209fb69ea150b494aaa40robbiew } 440dc076565f772bb1953209fb69ea150b494aaa40robbiew 450dc076565f772bb1953209fb69ea150b494aaa40robbiew getBeforeTime(&tpreset); 460dc076565f772bb1953209fb69ea150b494aaa40robbiew 470dc076565f772bb1953209fb69ea150b494aaa40robbiew tpset.tv_sec = TESTTIME; 480dc076565f772bb1953209fb69ea150b494aaa40robbiew tpset.tv_nsec = 0; 490dc076565f772bb1953209fb69ea150b494aaa40robbiew if (clock_settime(CLOCK_REALTIME, &tpset) == 0) { 500dc076565f772bb1953209fb69ea150b494aaa40robbiew if (clock_gettime(CLOCK_REALTIME, &tpget) == -1) { 510dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Error in clock_gettime()\n"); 520dc076565f772bb1953209fb69ea150b494aaa40robbiew setBackTime(tpreset); 530dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 540dc076565f772bb1953209fb69ea150b494aaa40robbiew } 55354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao delta = tpget.tv_sec - tpset.tv_sec; 560dc076565f772bb1953209fb69ea150b494aaa40robbiew nsdelta = PR_NSEC_PER_SEC - tpget.tv_nsec; 578fb1cdb0538640f295691929650408688537fb7fGarrett Cooper if ((delta <= ACCEPTABLEDELTA) && (delta >= 0)) { 580dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Test PASSED\n"); 590dc076565f772bb1953209fb69ea150b494aaa40robbiew setBackTime(tpreset); 600dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_PASS; 61e9410dfd93b8e415ecbe3f7e09a085462b27836eGarrett Cooper } else if ((nsdelta <= tpres.tv_nsec) && (delta == -1)) { 620dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("Test PASSED\n"); 630dc076565f772bb1953209fb69ea150b494aaa40robbiew setBackTime(tpreset); 640dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_PASS; 650dc076565f772bb1953209fb69ea150b494aaa40robbiew } else { 660dc076565f772bb1953209fb69ea150b494aaa40robbiew printf("clock does not appear to be set\n"); 670dc076565f772bb1953209fb69ea150b494aaa40robbiew setBackTime(tpreset); 680dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_FAIL; 690dc076565f772bb1953209fb69ea150b494aaa40robbiew } 700dc076565f772bb1953209fb69ea150b494aaa40robbiew } 710dc076565f772bb1953209fb69ea150b494aaa40robbiew 729ca9633cb75c407a81b98673891982b2e0702b29Cyril Hrubis printf("clock_settime() failed\n"); 730dc076565f772bb1953209fb69ea150b494aaa40robbiew setBackTime(tpreset); 740dc076565f772bb1953209fb69ea150b494aaa40robbiew return PTS_UNRESOLVED; 75ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 76