Message ID | 20210210103710.1325-3-lukma@denx.de |
---|---|
State | New |
Headers | show |
Series | [v3,1/3] tst: Extend cross-test-ssh.sh to specify if target date can be altered | expand |
Hi DJ, > Lukasz Majewski <lukma@denx.de> writes: > > - tst-clock2-y2038 tst-cpuclock1-y2038 > > tst-clock_nanosleep-y2038 > > + tst-clock2-y2038 tst-cpuclock1-y2038 > > tst-clock_nanosleep-y2038 \ > > + tst-clock_settime > > Ok. > > > +/* Test for clock_settime (in VM) > > Perhaps "in VM" should be "if supported" as VMs aren't the only > supported case, and "in VM" doesn't really say *why* "in VM" is > important? > > And we likely don't have to mention "if supported" at all; other tests > don't. *Any* test could be unsupported, for a variety of reasons > unrelated to the test. > > > +#include <time.h> > > +#include <support/check.h> > > +#include <support/xtime.h> > > + > > +#define TIMESPEC_SEC_Y2038_OV 0x7FFFFFFF > > This test will, of course, fail after 2038. > > > +#define FUTURE_TIME (TIMESPEC_SEC_Y2038_OV - 10) > > Assuming the test takes less than 10 seconds, which is probably OK. > > > +static int > > +do_test (void) > > +{ > > + const struct timespec tv = { FUTURE_TIME, 0}; > > + struct timespec tv_future, tv_now; > > + > > + tv_now = xclock_now(CLOCK_REALTIME); > > Current time (before 2038 we hope)... > > > + xclock_settime(CLOCK_REALTIME, &tv); > > Set to 2038... > > > + tv_future = xclock_now(CLOCK_REALTIME); > > Check "2038" time... > > > + /* Restore old time value on target machine. */ > > + xclock_settime(CLOCK_REALTIME, (const struct timespec*) > > &tv_now); > > The cast should not be needed. Sometimes GCC complains about casting > structs to different types (although this shouldn't do that) so I tend > to avoid it when it's not needed. As fair as I remember, GCC was complaining loudly (and the test was failed as we compile with -Werror) as clock_settime expects const struct timespec* pointer argument. The tv_now cannot be defined as const and hence the required cast. > > > + if (tv_future.tv_sec < tv.tv_sec) > > + FAIL_EXIT1 ("clock_settime set wrong time!\n"); > > If the "2038" time is "before" the "now (hopefully before 2038)" time, > we failed to set the time to the future... ok. This is a very simple test indeed. > > > + return 0; > > +} > > + > > +#include <support/test-driver.c> > > LGTM aside from those nits. > > Reviewed-by: DJ Delorie <dj@redhat.com> > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
diff --git a/time/Makefile b/time/Makefile index a8748480d6..b6f0969f3d 100644 --- a/time/Makefile +++ b/time/Makefile @@ -50,7 +50,8 @@ tests := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \ tst-tzname tst-y2039 bug-mktime4 tst-strftime2 tst-strftime3 \ tst-clock tst-clock2 tst-clock_nanosleep tst-cpuclock1 \ tst-adjtime tst-ctime tst-difftime tst-mktime4 tst-clock-y2038 \ - tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 + tst-clock2-y2038 tst-cpuclock1-y2038 tst-clock_nanosleep-y2038 \ + tst-clock_settime include ../Rules diff --git a/time/tst-clock_settime.c b/time/tst-clock_settime.c new file mode 100644 index 0000000000..2abf6b8eb8 --- /dev/null +++ b/time/tst-clock_settime.c @@ -0,0 +1,45 @@ +/* Test for clock_settime (in VM) + Copyright (C) 2021 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <time.h> +#include <support/check.h> +#include <support/xtime.h> + +#define TIMESPEC_SEC_Y2038_OV 0x7FFFFFFF +#define FUTURE_TIME (TIMESPEC_SEC_Y2038_OV - 10) + +static int +do_test (void) +{ + const struct timespec tv = { FUTURE_TIME, 0}; + struct timespec tv_future, tv_now; + + tv_now = xclock_now(CLOCK_REALTIME); + xclock_settime(CLOCK_REALTIME, &tv); + tv_future = xclock_now(CLOCK_REALTIME); + + /* Restore old time value on target machine. */ + xclock_settime(CLOCK_REALTIME, (const struct timespec*) &tv_now); + + if (tv_future.tv_sec < tv.tv_sec) + FAIL_EXIT1 ("clock_settime set wrong time!\n"); + + return 0; +} + +#include <support/test-driver.c>