Commit c87d853e authored by Pekka Pessi's avatar Pekka Pessi

s2check: fast forward monotonic time, too

parent b472dd7a
......@@ -139,7 +139,7 @@ void s2_case(char const *number,
void s2_step(void)
{
su_root_step(s2base->root, 10);
s2_quickstep(s2base->root, 2, 10);
}
static char const *s2_teardown_label = NULL;
......
......@@ -25,28 +25,52 @@
#include "config.h"
#include "s2util.h"
#include <sofia-sip/su_time.h>
#include <string.h>
#include <stdio.h>
/* -- Delay scenarios --------------------------------------------------- */
static unsigned long time_offset;
static su_time64_t time64_offset;
extern void (*_su_time)(su_time_t *tv);
extern su_time64_t (*_su_nanotime)(su_time64_t *t);
extern su_time64_t (*_su_monotime)(su_time64_t *t);
static void _su_time_fast_forwarder(su_time_t *tv)
{
tv->tv_sec += time_offset;
su_time64_t t64 = su_time_to_time64(*tv);
*tv = su_time64_to_time(t64 + time64_offset);
}
static su_time64_t _su_time64_fast_forwarder(su_time64_t *t)
{
return *t = *t + time64_offset;
}
su_duration_t s2_quickstep(su_root_t *root,
su_duration_t step,
su_duration_t forward)
{
_su_time = _su_time_fast_forwarder;
_su_nanotime = _su_time64_fast_forwarder;
_su_monotime = _su_time64_fast_forwarder;
time64_offset += 1000000 * forward;
return su_root_step(root, step);
}
void s2_fast_forward(unsigned long seconds,
su_root_t *root)
{
if (_su_time == NULL)
_su_time = _su_time_fast_forwarder;
_su_time = _su_time_fast_forwarder;
_su_nanotime = _su_time64_fast_forwarder;
_su_monotime = _su_time64_fast_forwarder;
time_offset += seconds;
time64_offset += SU_E9 * (su_time64_t)seconds;
if (root)
su_root_step(root, 0);
......@@ -61,12 +85,12 @@ s2_timed_logger(void *stream, char const *fmt, va_list ap)
int n;
snprintf(buffer, sizeof buffer,
"%02u:%02u:%02u.%06lu[+%lu] ",
"%02u:%02u:%02u.%06lu[+%.3f] ",
(unsigned)(now.tv_sec / 3600 % 24),
(unsigned)(now.tv_sec / 60 % 60),
(unsigned)(now.tv_sec % 60),
now.tv_usec,
time_offset);
time64_offset * 1e-9);
prefix = strlen(buffer);
n = vsnprintf(buffer + prefix, (sizeof buffer) - prefix, fmt, ap);
if (n > 0)
......
......@@ -38,6 +38,7 @@
SOFIA_BEGIN_DECLS
su_duration_t s2_quickstep(su_root_t *, su_duration_t, su_duration_t);
void s2_fast_forward(unsigned long seconds, su_root_t *root);
void s2_timed_logger(void *stream, char const *fmt, va_list ap);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment