Add a new function timer function to set up the timer, similar to what
we have in the Linux kernel. This patch also converts existing opencoded
timer setup in the libosmocore tree as initial client of this new
function.
This patch implicitly removes function callback passed by reference that
defeat compile time type validation.
Compile-tested only, but I ran make check that reports success when
testing timer infrastructure.
Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666
Use osmo_gettimeofday_override* to decouple the timer test from real time. No
longer call osmo_select_main(), since select() actually waits for real time.
This reduces the timer_test to the osmo_timer_* logic and excludes the real
time and osmo_timers_nearest() accuracy testing with actual waiting involved.
This may be seen as a loss, but is more fit for a test suite.
The main point here is to get deterministic results in jenkins, so that we
don't have to retrigger jobs based on timing failures; added bonus is that the
test runs much faster now.
Change-Id: Ic5649512df86dd17070daa2f314159eafaf8feb8
When a timer was late, show the timing details.
Also count whether timers fired early, for completeness' sake.
Change-Id: Id3942637d77a28b5092ffffcc3e6d9d67c2b8e68
The timer_test schedules timers and records the desired stop time. Also store
the usec value of the desired stop time, because scheduling at e.g. sec N usec
999999 but recording sec N usec 0, and then receiving a timer at sec N+1 usec 0
is only 1 usec late, but records as 1000000 usecs late. This might have been
the main cause of the timer test not working well on the osmocom build server.
Change-Id: I13bb60f7d341a397f95d13d9c63c40188b6cd5a0
When building out-of-srcdir, "../../config.h" fails to reach config.h
because the compiler is invoked in $builddir/tests/, not
$builddir/tests/timer/. Use "../config.h" instead; this also works
for in-srcdir builds.
Signed-off-by: Alex Badea <vamposdecampos@gmail.com>
Instead of using a ./configure parameter to decide whehter to build
tests or not, use the check_PROGRAMS variable so that the tests are
only built when running `make check`.
To avoid slowing down the test phase itself, collapse the declaration
of the test targets in the tests/Makefile.am file, this way they can
be built and linked in parallel before the testsuite is executed.
Signed-off-by: Diego Elio Pettenò <flameeyes@flameeyes.eu>
If the timer test takes more than 2 * (number of steps + 10), we
abort the test. This calculation is based on the maximum timeout
randomly set (10 seconds) plus the number of steps (some existing
timers may be reset in each step). We double this to have some
extra grace time to finish.
This makes happy gnu-autotest for the timer test.
We may still may fail if we run the test on a very heavy loaded
system, but given the amount of timers that we using for the
automatic test (only 32), this seems very unlikely to me.
Holger likes having a parameter to set the number of steps in this
test. Now you can set it via `-s' option.
Signed-off-by: Pablo Neira Ayuso <pablo@gnumonks.org>
The output of make check is looking like this now:
Regression tests.
1: bits ok
2: msgfile ok
3: sms ok
4: smscb ok
5: timer FAILED (testsuite.at:38)
6: ussd FAILED (testsuite.at:44)
This is a new test for the timer infrastructure. It basically consists
of adding 2^N timers per step (where N is the number of step) that
expire in (random() % 10) + 1 seconds. Moreover, we randomly delete
timers that fulfill (random() % 100) < 10 everytime one timer expires.
The default number of steps is 16, the test also allows to check for
timer imprecisions (currently, defaulting to 10ms as aceptable).
The list-based implementation crashes or it seems loop forever with
this test (I guess due to some memory corruption).
BTW, this patch contains one cosmetic clean up since we go back to
8-chars per indentations, which seems to be the policy in osmocom.
This patch moves all GSM-specific definitions to include/osmocom/gsm.
Moreover, the headers in include/osmocore/ have been moved to
include/osmocom/core.
This has been proposed by Harald Welte and Sylvain Munaunt.
Tested with `make distcheck'.
Signed-off-by: Pablo Neira Ayuso <pablo@gnumonks.org>