[Qemu-devel] [PATCH 07/14] tests: ds-rtc test wday offset

Michael Davidsaver posted 14 patches 7 years, 4 months ago
Only 13 patches received!
[Qemu-devel] [PATCH 07/14] tests: ds-rtc test wday offset
Posted by Michael Davidsaver 7 years, 4 months ago
Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>
---
 tests/ds-rtc-common.h       | 10 +++++++---
 tests/ds-rtc-current-test.c |  9 ++++++++-
 tests/ds-rtc-set-test.c     |  6 ++++--
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/tests/ds-rtc-common.h b/tests/ds-rtc-common.h
index c8e6c2bc5b..633131c55f 100644
--- a/tests/ds-rtc-common.h
+++ b/tests/ds-rtc-common.h
@@ -20,7 +20,7 @@ static uint8_t addr;
 static bool use_century;
 
 /* input buffer must have at least 7 elements */
-static inline time_t rtc_parse(const uint8_t *buf)
+static inline time_t rtc_parse(const uint8_t *buf, unsigned *wday)
 {
     struct tm parts;
 
@@ -48,10 +48,14 @@ static inline time_t rtc_parse(const uint8_t *buf)
         parts.tm_year += 100u;
     }
 
+    if (wday) {
+        *wday = parts.tm_wday;
+    }
+
     return mktimegm(&parts);
 }
 
-static time_t rtc_gettime(void)
+static time_t rtc_gettime(unsigned *wday)
 {
     uint8_t buf[7];
 
@@ -61,7 +65,7 @@ static time_t rtc_gettime(void)
     /* read back current time registers */
     i2c_recv(i2c, addr, buf, 7);
 
-    return rtc_parse(buf);
+    return rtc_parse(buf, wday);
 }
 
 #endif /* DSRTCCOMMON_H */
diff --git a/tests/ds-rtc-current-test.c b/tests/ds-rtc-current-test.c
index 6acbbed9a6..7dc3202261 100644
--- a/tests/ds-rtc-current-test.c
+++ b/tests/ds-rtc-current-test.c
@@ -20,17 +20,24 @@
 static
 void test_rtc_current(void)
 {
+    struct tm tm_actual;
     time_t expected, actual;
     /* relax test to limit false positives when host may be overloaded.
      * Allow larger delta when running "-m quick"
      */
     time_t max_delta = g_test_slow() ? 1 : 30;
 
+    unsigned wday_expect;
+
     actual = time(NULL);
     /* new second may start here */
-    expected = rtc_gettime();
+    expected = rtc_gettime(&wday_expect);
+
+    gmtime_r(&actual, &tm_actual);
+
     g_assert_cmpuint(expected, <=, actual + max_delta);
     g_assert_cmpuint(expected, >=, actual);
+    g_assert_cmpuint(wday_expect, ==, tm_actual.tm_wday);
 }
 
 int main(int argc, char *argv[])
diff --git a/tests/ds-rtc-set-test.c b/tests/ds-rtc-set-test.c
index c48406ee2c..12aeb2580a 100644
--- a/tests/ds-rtc-set-test.c
+++ b/tests/ds-rtc-set-test.c
@@ -124,16 +124,18 @@ void test_rtc_set(const void *raw)
 
     const uint8_t *testtime = raw;
     time_t expected, actual;
+    unsigned wday_expect, wday_actual;
 
     /* skip address pointer and parse remainder */
-    expected = rtc_parse(&testtime[1]);
+    expected = rtc_parse(&testtime[1], &wday_expect);
 
     i2c_send(i2c, addr, testtime, 8);
     /* host may start new second here */
-    actual = rtc_gettime();
+    actual = rtc_gettime(&wday_actual);
 
     g_assert_cmpuint(expected, <=, actual);
     g_assert_cmpuint(expected + max_delta, >=, actual);
+    g_assert_cmpuint(wday_expect, ==, wday_actual);
 }
 
 int main(int argc, char *argv[])
-- 
2.11.0


[Qemu-devel] [PATCH v2 07/14] tests: ds-rtc test wday offset
Posted by Michael Davidsaver 7 years, 4 months ago
Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>
---
 tests/ds-rtc-common.h       | 10 +++++++---
 tests/ds-rtc-current-test.c |  9 ++++++++-
 tests/ds-rtc-set-test.c     |  6 ++++--
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/tests/ds-rtc-common.h b/tests/ds-rtc-common.h
index 5bc7ab32a6..782ea60453 100644
--- a/tests/ds-rtc-common.h
+++ b/tests/ds-rtc-common.h
@@ -20,7 +20,7 @@ static uint8_t addr;
 static bool use_century;
 
 /* input buffer must have at least 7 elements */
-static inline time_t rtc_parse(const uint8_t *buf, int *mmode)
+static inline time_t rtc_parse(const uint8_t *buf, unsigned *wday, int *mmode)
 {
     struct tm parts;
 
@@ -51,10 +51,14 @@ static inline time_t rtc_parse(const uint8_t *buf, int *mmode)
         parts.tm_year += 100u;
     }
 
+    if (wday) {
+        *wday = parts.tm_wday;
+    }
+
     return mktimegm(&parts);
 }
 
-static time_t rtc_gettime(int *mmode)
+static time_t rtc_gettime(unsigned *wday, int *mmode)
 {
     uint8_t buf[7];
 
@@ -64,7 +68,7 @@ static time_t rtc_gettime(int *mmode)
     /* read back current time registers */
     i2c_recv(i2c, addr, buf, 7);
 
-    return rtc_parse(buf, mmode);
+    return rtc_parse(buf, wday, mmode);
 }
 
 #endif /* DSRTCCOMMON_H */
diff --git a/tests/ds-rtc-current-test.c b/tests/ds-rtc-current-test.c
index 3c15482a9d..08d8411671 100644
--- a/tests/ds-rtc-current-test.c
+++ b/tests/ds-rtc-current-test.c
@@ -20,17 +20,24 @@
 static
 void test_rtc_current(void)
 {
+    struct tm tm_actual;
     time_t expected, actual;
     /* relax test to limit false positives when host may be overloaded.
      * Allow larger delta when running "-m quick"
      */
     time_t max_delta = g_test_slow() ? 1 : 30;
 
+    unsigned wday_expect;
+
     actual = time(NULL);
     /* new second may start here */
-    expected = rtc_gettime(NULL);
+    expected = rtc_gettime(&wday_expect, NULL);
+
+    gmtime_r(&actual, &tm_actual);
+
     g_assert_cmpuint(expected, <=, actual + max_delta);
     g_assert_cmpuint(expected, >=, actual);
+    g_assert_cmpuint(wday_expect, ==, tm_actual.tm_wday);
 }
 
 int main(int argc, char *argv[])
diff --git a/tests/ds-rtc-set-test.c b/tests/ds-rtc-set-test.c
index 3a742e897f..1004470931 100644
--- a/tests/ds-rtc-set-test.c
+++ b/tests/ds-rtc-set-test.c
@@ -124,17 +124,19 @@ void test_rtc_set(const void *raw)
 
     const uint8_t *testtime = raw;
     time_t expected, actual;
+    unsigned wday_expect, wday_actual;
     int mode_expect, mode_actual;
 
     /* skip address pointer and parse remainder */
-    expected = rtc_parse(&testtime[1], &mode_expect);
+    expected = rtc_parse(&testtime[1], &wday_expect, &mode_expect);
 
     i2c_send(i2c, addr, testtime, 8);
     /* host may start new second here */
-    actual = rtc_gettime(&mode_actual);
+    actual = rtc_gettime(&wday_actual, &mode_actual);
 
     g_assert_cmpuint(expected, <=, actual);
     g_assert_cmpuint(expected + max_delta, >=, actual);
+    g_assert_cmpuint(wday_expect, ==, wday_actual);
     g_assert_cmpint(mode_expect, ==, mode_actual);
 }
 
-- 
2.11.0


Re: [Qemu-devel] [PATCH v2 07/14] tests: ds-rtc test wday offset
Posted by David Gibson 7 years, 3 months ago
On Sat, Jul 07, 2018 at 10:50:39AM -0700, Michael Davidsaver wrote:
> Signed-off-by: Michael Davidsaver <mdavidsaver@gmail.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

> ---
>  tests/ds-rtc-common.h       | 10 +++++++---
>  tests/ds-rtc-current-test.c |  9 ++++++++-
>  tests/ds-rtc-set-test.c     |  6 ++++--
>  3 files changed, 19 insertions(+), 6 deletions(-)
> 
> diff --git a/tests/ds-rtc-common.h b/tests/ds-rtc-common.h
> index 5bc7ab32a6..782ea60453 100644
> --- a/tests/ds-rtc-common.h
> +++ b/tests/ds-rtc-common.h
> @@ -20,7 +20,7 @@ static uint8_t addr;
>  static bool use_century;
>  
>  /* input buffer must have at least 7 elements */
> -static inline time_t rtc_parse(const uint8_t *buf, int *mmode)
> +static inline time_t rtc_parse(const uint8_t *buf, unsigned *wday, int *mmode)
>  {
>      struct tm parts;
>  
> @@ -51,10 +51,14 @@ static inline time_t rtc_parse(const uint8_t *buf, int *mmode)
>          parts.tm_year += 100u;
>      }
>  
> +    if (wday) {
> +        *wday = parts.tm_wday;
> +    }
> +
>      return mktimegm(&parts);
>  }
>  
> -static time_t rtc_gettime(int *mmode)
> +static time_t rtc_gettime(unsigned *wday, int *mmode)
>  {
>      uint8_t buf[7];
>  
> @@ -64,7 +68,7 @@ static time_t rtc_gettime(int *mmode)
>      /* read back current time registers */
>      i2c_recv(i2c, addr, buf, 7);
>  
> -    return rtc_parse(buf, mmode);
> +    return rtc_parse(buf, wday, mmode);
>  }
>  
>  #endif /* DSRTCCOMMON_H */
> diff --git a/tests/ds-rtc-current-test.c b/tests/ds-rtc-current-test.c
> index 3c15482a9d..08d8411671 100644
> --- a/tests/ds-rtc-current-test.c
> +++ b/tests/ds-rtc-current-test.c
> @@ -20,17 +20,24 @@
>  static
>  void test_rtc_current(void)
>  {
> +    struct tm tm_actual;
>      time_t expected, actual;
>      /* relax test to limit false positives when host may be overloaded.
>       * Allow larger delta when running "-m quick"
>       */
>      time_t max_delta = g_test_slow() ? 1 : 30;
>  
> +    unsigned wday_expect;
> +
>      actual = time(NULL);
>      /* new second may start here */
> -    expected = rtc_gettime(NULL);
> +    expected = rtc_gettime(&wday_expect, NULL);
> +
> +    gmtime_r(&actual, &tm_actual);
> +
>      g_assert_cmpuint(expected, <=, actual + max_delta);
>      g_assert_cmpuint(expected, >=, actual);
> +    g_assert_cmpuint(wday_expect, ==, tm_actual.tm_wday);
>  }
>  
>  int main(int argc, char *argv[])
> diff --git a/tests/ds-rtc-set-test.c b/tests/ds-rtc-set-test.c
> index 3a742e897f..1004470931 100644
> --- a/tests/ds-rtc-set-test.c
> +++ b/tests/ds-rtc-set-test.c
> @@ -124,17 +124,19 @@ void test_rtc_set(const void *raw)
>  
>      const uint8_t *testtime = raw;
>      time_t expected, actual;
> +    unsigned wday_expect, wday_actual;
>      int mode_expect, mode_actual;
>  
>      /* skip address pointer and parse remainder */
> -    expected = rtc_parse(&testtime[1], &mode_expect);
> +    expected = rtc_parse(&testtime[1], &wday_expect, &mode_expect);
>  
>      i2c_send(i2c, addr, testtime, 8);
>      /* host may start new second here */
> -    actual = rtc_gettime(&mode_actual);
> +    actual = rtc_gettime(&wday_actual, &mode_actual);
>  
>      g_assert_cmpuint(expected, <=, actual);
>      g_assert_cmpuint(expected + max_delta, >=, actual);
> +    g_assert_cmpuint(wday_expect, ==, wday_actual);
>      g_assert_cmpint(mode_expect, ==, mode_actual);
>  }
>  

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson