Skip to content

Commit 17ac7e9

Browse files
nokute78edsiper
authored andcommitted
tests: internal: aws_util: remove timezone dependency
Signed-off-by: Takahiro Yamashita <[email protected]>
1 parent 03da76d commit 17ac7e9

File tree

1 file changed

+91
-14
lines changed

1 file changed

+91
-14
lines changed

tests/internal/aws_util.c

Lines changed: 91 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <fluent-bit/flb_sds.h>
44
#include <fluent-bit/flb_aws_util.h>
55
#include <fluent-bit/flb_mem.h>
6+
#include <fluent-bit/flb_pthread.h>
67

78
#include "flb_tests_internal.h"
89

@@ -47,6 +48,60 @@
4748
#define VALID_SEQ_INDEX 0
4849

4950

51+
pthread_mutex_t env_mutex = PTHREAD_MUTEX_INITIALIZER;
52+
static int mktime_utc(struct tm *day, time_t *tm)
53+
{
54+
int ret;
55+
char *tzvar = NULL;
56+
char orig_tz[256] = {0};
57+
time_t t;
58+
59+
if (!TEST_CHECK(day != NULL)) {
60+
TEST_MSG("struct tm is null");
61+
return -1;
62+
}
63+
if (!TEST_CHECK(tm != NULL)) {
64+
TEST_MSG("time_t is null");
65+
return -1;
66+
}
67+
68+
pthread_mutex_lock(&env_mutex);
69+
70+
/* save current TZ var */
71+
tzvar = getenv("TZ");
72+
if (tzvar != NULL) {
73+
if (!TEST_CHECK(strlen(tzvar) <= sizeof(orig_tz))) {
74+
TEST_MSG("TZ is large. len=%ld TZ=%s", strlen(tzvar), tzvar);
75+
pthread_mutex_unlock(&env_mutex);
76+
return -1;
77+
}
78+
strncpy(&orig_tz[0], tzvar, sizeof(orig_tz));
79+
}
80+
81+
/* setenv is not thread safe */
82+
ret = setenv("TZ", "UTC", 1);
83+
if (!TEST_CHECK(ret == 0)) {
84+
TEST_MSG("setenv failed");
85+
pthread_mutex_unlock(&env_mutex);
86+
return -1;
87+
}
88+
89+
t = mktime(day);
90+
*tm = t;
91+
92+
/* restore TZ */
93+
if (tzvar != NULL) {
94+
ret = setenv("TZ", &orig_tz[0], 1);
95+
}
96+
else {
97+
ret = unsetenv("TZ");
98+
}
99+
100+
pthread_mutex_unlock(&env_mutex);
101+
102+
return ret;
103+
}
104+
50105
static void test_flb_aws_error()
51106
{
52107
flb_sds_t error_type;
@@ -92,7 +147,9 @@ static void test_flb_get_s3_key_multi_tag_exists()
92147
{
93148
flb_sds_t s3_key_format = NULL;
94149
struct tm day = { 0, 0, 0, 15, 7, 120};
95-
time_t t = mktime(&day);
150+
time_t t;
151+
152+
mktime_utc(&day, &t);
96153
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_TAG_PART, t, TAG, TAG_DELIMITER, 0);
97154
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_TAG_PART) == 0);
98155

@@ -103,7 +160,9 @@ static void test_flb_get_s3_key_full_tag()
103160
{
104161
flb_sds_t s3_key_format = NULL;
105162
struct tm day = { 0, 0, 0, 15, 7, 120};
106-
time_t t = mktime(&day);
163+
time_t t;
164+
165+
mktime_utc(&day, &t);
107166
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_FULL_TAG, t, TAG, TAG_DELIMITER, 0);
108167
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_FULL_TAG) == 0);
109168

@@ -114,7 +173,9 @@ static void test_flb_get_s3_key_tag_special_characters()
114173
{
115174
flb_sds_t s3_key_format = NULL;
116175
struct tm day = { 0, 0, 0, 15, 7, 120};
117-
time_t t = mktime(&day);
176+
time_t t;
177+
178+
mktime_utc(&day, &t);
118179
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_SPECIAL_CHARCATERS_TAG, t, TAG,
119180
TAG_DELIMITER, 0);
120181
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_SPECIAL_CHARCATERS_TAG) == 0);
@@ -126,7 +187,9 @@ static void test_flb_get_s3_key_multi_tag_delimiter()
126187
{
127188
flb_sds_t s3_key_format = NULL;
128189
struct tm day = { 0, 0, 0, 15, 7, 120};
129-
time_t t = mktime(&day);
190+
time_t t;
191+
192+
mktime_utc(&day, &t);
130193
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_TAG_PART, t, MULTI_DELIMITER_TAG,
131194
TAG_DELIMITERS, 0);
132195
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_TAG_PART) == 0);
@@ -138,7 +201,9 @@ static void test_flb_get_s3_key_invalid_tag_delimiter()
138201
{
139202
flb_sds_t s3_key_format = NULL;
140203
struct tm day = { 0, 0, 0, 15, 7, 120};
141-
time_t t = mktime(&day);
204+
time_t t;
205+
206+
mktime_utc(&day, &t);
142207
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_TAG_PART, t, MULTI_DELIMITER_TAG,
143208
INVALID_TAG_DELIMITERS, 0);
144209
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_INVALID_DELIMITER) == 0);
@@ -150,7 +215,9 @@ static void test_flb_get_s3_key_invalid_tag_index()
150215
{
151216
flb_sds_t s3_key_format = NULL;
152217
struct tm day = { 0, 0, 0, 15, 7, 120};
153-
time_t t = mktime(&day);
218+
time_t t;
219+
220+
mktime_utc(&day, &t);
154221
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_INVALID_TAG, t, TAG, TAG_DELIMITER, 0);
155222
TEST_CHECK(strcmp(s3_key_format, S3_OBJECY_KEY_INVALID_TAG) == 0);
156223

@@ -169,7 +236,9 @@ static void test_flb_get_s3_key_invalid_key_length()
169236
}
170237
snprintf(buf, sizeof(buf), "%s%s", S3_KEY_FORMAT_SPECIAL_CHARCATERS_TAG, tmp);
171238
struct tm day = { 0, 0, 0, 15, 7, 120};
172-
time_t t = mktime(&day);
239+
time_t t;
240+
241+
mktime_utc(&day, &t);
173242
s3_key_format = flb_get_s3_key(buf, t, TAG, TAG_DELIMITER, 0);
174243
TEST_CHECK(strlen(s3_key_format) <= 1024);
175244

@@ -180,7 +249,9 @@ static void test_flb_get_s3_key_static_string()
180249
{
181250
flb_sds_t s3_key_format = NULL;
182251
struct tm day = { 0, 0, 0, 15, 7, 120};
183-
time_t t = mktime(&day);
252+
time_t t;
253+
254+
mktime_utc(&day, &t);
184255
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_STATIC_STRING, t, NO_TAG,
185256
TAG_DELIMITER, 0);
186257
TEST_CHECK(strcmp(s3_key_format, S3_KEY_FORMAT_STATIC_STRING) == 0);
@@ -192,7 +263,9 @@ static void test_flb_get_s3_key_valid_index()
192263
{
193264
flb_sds_t s3_key_format = NULL;
194265
struct tm day = { 0, 0, 0, 15, 7, 120};
195-
time_t t = mktime(&day);
266+
time_t t;
267+
268+
mktime_utc(&day, &t);
196269
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_VALID_INDEX, t, NO_TAG,
197270
TAG_DELIMITER, 12);
198271
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_VALID_INDEX) == 0);
@@ -203,9 +276,10 @@ static void test_flb_get_s3_key_valid_index()
203276
static void test_flb_get_s3_key_increment_index()
204277
{
205278
struct tm day = { 0, 0, 0, 15, 7, 120};
206-
time_t t = mktime(&day);
207-
279+
time_t t;
208280
flb_sds_t s3_key_format = NULL;
281+
282+
mktime_utc(&day, &t);
209283
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_VALID_INDEX, t, NO_TAG,
210284
TAG_DELIMITER, 5);
211285

@@ -225,9 +299,10 @@ static void test_flb_get_s3_key_index_overflow()
225299
{
226300
flb_sds_t s3_key_format = NULL;
227301
struct tm day = { 0, 0, 0, 15, 7, 120};
228-
time_t t = mktime(&day);
229-
302+
time_t t;
230303
uint64_t index = 18446744073709551615U;
304+
305+
mktime_utc(&day, &t);
231306
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_VALID_INDEX, t, NO_TAG,
232307
TAG_DELIMITER, index);
233308
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_PRE_OVERFLOW_INDEX) == 0);
@@ -245,7 +320,9 @@ static void test_flb_get_s3_key_mixed_timestamp()
245320
{
246321
flb_sds_t s3_key_format = NULL;
247322
struct tm day = { 0, 0, 0, 15, 7, 120};
248-
time_t t = mktime(&day);
323+
time_t t;
324+
325+
mktime_utc(&day, &t);
249326
s3_key_format = flb_get_s3_key(S3_KEY_FORMAT_MIXED_TIMESTAMP, t, NO_TAG,
250327
TAG_DELIMITER, 12);
251328
TEST_CHECK(strcmp(s3_key_format, S3_OBJECT_KEY_MIXED_TIMESTAMP) == 0);

0 commit comments

Comments
 (0)