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
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+
50105static 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()
203276static 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