summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2016-01-26 11:18:48 -0800
committerMark Salyzyn <salyzyn@google.com>2016-01-26 11:22:06 -0800
commitde9b37d793554343026636455e60b63400ca339e (patch)
tree7670b37734f124895ea7cf8ae2e687249d69ea30 /tests
parent9427861d2746735378aa3dc628c917fac2acec83 (diff)
downloadextras-de9b37d793554343026636455e60b63400ca339e.tar.gz
rtc_test: EACCES acceptable for write
If we can not write to /dev/rtc0, then accept result Requires /dev/rtc0 to be something like mode 440. Bug: 26792522 Change-Id: Ief2ac5cd1bac4b0272ef9d9bf096ed4000163244
Diffstat (limited to 'tests')
-rw-r--r--tests/timetest/rtc_test.cpp51
1 files changed, 42 insertions, 9 deletions
diff --git a/tests/timetest/rtc_test.cpp b/tests/timetest/rtc_test.cpp
index 9dd6fd89..d1c9eafc 100644
--- a/tests/timetest/rtc_test.cpp
+++ b/tests/timetest/rtc_test.cpp
@@ -18,15 +18,38 @@
#include <fcntl.h>
#include <linux/rtc.h>
#include <sys/ioctl.h>
+#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <gtest/gtest.h>
static int hwtime(int flag, int request, struct rtc_time *tm) {
- int ret;
+ static const char rtc[] = "/dev/rtc0";
+
+ int ret = TEMP_FAILURE_RETRY(access(rtc, flag & O_WRONLY) ? W_OK : R_OK);
+ if (ret < 0) {
+ ret = -errno;
+ }
+ if (ret == -EACCES) {
+ return ret;
+ }
+
+ if (flag & O_WRONLY) {
+ struct stat st;
+ ret = TEMP_FAILURE_RETRY(stat(rtc, &st));
+ if (ret < 0) {
+ ret = -errno;
+ } else if (!(st.st_mode & (S_IWUSR|S_IWGRP|S_IWOTH))) {
+ ret = -EACCES;
+ }
+ }
+ if (ret == -EACCES) {
+ return ret;
+ }
+
do {
- ret = TEMP_FAILURE_RETRY(open("/dev/rtc0", flag));
+ ret = TEMP_FAILURE_RETRY(open(rtc, flag));
if (ret < 0) {
ret = -errno;
}
@@ -94,9 +117,15 @@ TEST(time, rtc_rollover) {
roll.tm_yday = 0;
roll.tm_isdst = 0;
+ bool eacces = true;
for (roll.tm_year = 70; roll.tm_year < 137; ++roll.tm_year) {
struct rtc_time tm = roll;
int __set_hwtime = set_hwtime(&tm);
+ // Allowed to be 100% denied for writing
+ if ((__set_hwtime == -EACCES) && (eacces == true)) {
+ continue;
+ }
+ eacces = false;
// below 2015, permitted to error out.
if ((__set_hwtime == -EINVAL) && (roll.tm_year < 115)) {
continue;
@@ -137,13 +166,17 @@ TEST(time, rtc_rollover) {
}
}
- ASSERT_LE(0, set_hwtime(&save));
+ if (!eacces) {
+ ASSERT_LE(0, set_hwtime(&save));
+ }
ASSERT_LE(0, rd_hwtime(&roll));
- ASSERT_EQ(save.tm_sec, roll.tm_sec);
- ASSERT_EQ(save.tm_min, roll.tm_min);
- ASSERT_EQ(save.tm_hour, roll.tm_hour);
- ASSERT_EQ(save.tm_mday, roll.tm_mday);
- ASSERT_EQ(save.tm_mon, roll.tm_mon);
- ASSERT_EQ(save.tm_year, roll.tm_year);
+ if (!eacces) {
+ ASSERT_EQ(save.tm_sec, roll.tm_sec);
+ ASSERT_EQ(save.tm_min, roll.tm_min);
+ ASSERT_EQ(save.tm_hour, roll.tm_hour);
+ ASSERT_EQ(save.tm_mday, roll.tm_mday);
+ ASSERT_EQ(save.tm_mon, roll.tm_mon);
+ ASSERT_EQ(save.tm_year, roll.tm_year);
+ }
}