1
1
# -*- coding: utf-8 -*-
2
2
3
- import datetime
4
- import pytz
5
3
import sys
6
4
if sys .version_info < (2 , 7 ):
7
5
import unittest2 as unittest
10
8
import warnings
11
9
12
10
import mock
11
+ from datetime import datetime , timedelta
13
12
from influxdb import SeriesHelper , InfluxDBClient
14
13
from requests .exceptions import ConnectionError
15
14
@@ -40,17 +39,13 @@ class Meta:
40
39
41
40
TestSeriesHelper .MySeriesHelper = MySeriesHelper
42
41
43
- class MySeriesTimeHelper (SeriesHelper ):
44
-
45
- class Meta :
46
- client = TestSeriesHelper .client
47
- series_name = 'events.stats.{server_name}'
48
- fields = ['time' , 'some_stat' ]
49
- tags = ['server_name' , 'other_tag' ]
50
- bulk_size = 5
51
- autocommit = True
52
-
53
- TestSeriesHelper .MySeriesTimeHelper = MySeriesTimeHelper
42
+ def tearDown (self ):
43
+ super (TestSeriesHelper , self ).tearDown ()
44
+ TestSeriesHelper .MySeriesHelper ._reset_ ()
45
+ self .assertEqual (
46
+ TestSeriesHelper .MySeriesHelper ._json_body_ (),
47
+ [],
48
+ 'Resetting helper did not empty datapoints.' )
54
49
55
50
def test_auto_commit (self ):
56
51
"""
@@ -76,24 +71,20 @@ class Meta:
76
71
AutoCommitTest (server_name = 'us.east-1' , some_stat = 3443 , other_tag = 'gg' )
77
72
self .assertTrue (fake_write_points .called )
78
73
79
- def testSingleSeriesName (self ):
74
+ @mock .patch ('influxdb.helper.SeriesHelper._current_timestamp' )
75
+ def testSingleSeriesName (self , current_timestamp ):
80
76
"""
81
77
Tests JSON conversion when there is only one series name.
82
78
"""
83
- dt = datetime .datetime (2016 , 1 , 2 , 3 , 4 , 5 , 678912 )
84
- ts1 = dt
85
- ts2 = "2016-10-11T01:02:03.123456789-04:00"
86
- ts3 = 1234567890123456789
87
- ts4 = pytz .timezone ("Europe/Berlin" ).localize (dt )
88
-
89
- TestSeriesHelper .MySeriesTimeHelper (
90
- time = ts1 , server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 159 )
91
- TestSeriesHelper .MySeriesTimeHelper (
92
- time = ts2 , server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 158 )
93
- TestSeriesHelper .MySeriesTimeHelper (
94
- time = ts3 , server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 157 )
95
- TestSeriesHelper .MySeriesTimeHelper (
96
- time = ts4 , server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 156 )
79
+ current_timestamp .return_value = current_date = datetime .today ()
80
+ TestSeriesHelper .MySeriesHelper (
81
+ server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 159 )
82
+ TestSeriesHelper .MySeriesHelper (
83
+ server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 158 )
84
+ TestSeriesHelper .MySeriesHelper (
85
+ server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 157 )
86
+ TestSeriesHelper .MySeriesHelper (
87
+ server_name = 'us.east-1' , other_tag = 'ello' , some_stat = 156 )
97
88
expectation = [
98
89
{
99
90
"measurement" : "events.stats.us.east-1" ,
@@ -104,7 +95,7 @@ def testSingleSeriesName(self):
104
95
"fields" : {
105
96
"some_stat" : 159
106
97
},
107
- "time" : "2016-01-02T03:04:05.678912+00:00" ,
98
+ "time" : current_date ,
108
99
},
109
100
{
110
101
"measurement" : "events.stats.us.east-1" ,
@@ -115,7 +106,7 @@ def testSingleSeriesName(self):
115
106
"fields" : {
116
107
"some_stat" : 158
117
108
},
118
- "time" : "2016-10-11T01:02:03.123456789-04:00" ,
109
+ "time" : current_date ,
119
110
},
120
111
{
121
112
"measurement" : "events.stats.us.east-1" ,
@@ -126,7 +117,7 @@ def testSingleSeriesName(self):
126
117
"fields" : {
127
118
"some_stat" : 157
128
119
},
129
- "time" : 1234567890123456789 ,
120
+ "time" : current_date ,
130
121
},
131
122
{
132
123
"measurement" : "events.stats.us.east-1" ,
@@ -137,25 +128,22 @@ def testSingleSeriesName(self):
137
128
"fields" : {
138
129
"some_stat" : 156
139
130
},
140
- "time" : "2016-01-02T03:04:05.678912+01:00" ,
131
+ "time" : current_date ,
141
132
}
142
133
]
143
134
144
- rcvd = TestSeriesHelper .MySeriesTimeHelper ._json_body_ ()
135
+ rcvd = TestSeriesHelper .MySeriesHelper ._json_body_ ()
145
136
self .assertTrue (all ([el in expectation for el in rcvd ]) and
146
137
all ([el in rcvd for el in expectation ]),
147
138
'Invalid JSON body of time series returned from '
148
139
'_json_body_ for one series name: {0}.' .format (rcvd ))
149
- TestSeriesHelper .MySeriesTimeHelper ._reset_ ()
150
- self .assertEqual (
151
- TestSeriesHelper .MySeriesTimeHelper ._json_body_ (),
152
- [],
153
- 'Resetting helper did not empty datapoints.' )
154
140
155
- def testSeveralSeriesNames (self ):
156
- '''
141
+ @mock .patch ('influxdb.helper.SeriesHelper._current_timestamp' )
142
+ def testSeveralSeriesNames (self , current_timestamp ):
143
+ """
157
144
Tests JSON conversion when there are multiple series names.
158
- '''
145
+ """
146
+ current_timestamp .return_value = current_date = datetime .today ()
159
147
TestSeriesHelper .MySeriesHelper (
160
148
server_name = 'us.east-1' , some_stat = 159 , other_tag = 'ello' )
161
149
TestSeriesHelper .MySeriesHelper (
@@ -173,7 +161,8 @@ def testSeveralSeriesNames(self):
173
161
'tags' : {
174
162
'other_tag' : 'ello' ,
175
163
'server_name' : 'lu.lux'
176
- }
164
+ },
165
+ "time" : current_date ,
177
166
},
178
167
{
179
168
'fields' : {
@@ -183,7 +172,8 @@ def testSeveralSeriesNames(self):
183
172
'tags' : {
184
173
'other_tag' : 'ello' ,
185
174
'server_name' : 'uk.london'
186
- }
175
+ },
176
+ "time" : current_date ,
187
177
},
188
178
{
189
179
'fields' : {
@@ -193,7 +183,8 @@ def testSeveralSeriesNames(self):
193
183
'tags' : {
194
184
'other_tag' : 'ello' ,
195
185
'server_name' : 'fr.paris-10'
196
- }
186
+ },
187
+ "time" : current_date ,
197
188
},
198
189
{
199
190
'fields' : {
@@ -203,25 +194,70 @@ def testSeveralSeriesNames(self):
203
194
'tags' : {
204
195
'other_tag' : 'ello' ,
205
196
'server_name' : 'us.east-1'
206
- }
197
+ },
198
+ "time" : current_date ,
207
199
}
208
200
]
209
201
210
202
rcvd = TestSeriesHelper .MySeriesHelper ._json_body_ ()
211
- for r in rcvd :
212
- self .assertTrue (r .get ('time' ),
213
- "No time field in received JSON body." )
214
- del (r ["time" ])
215
203
self .assertTrue (all ([el in expectation for el in rcvd ]) and
216
204
all ([el in rcvd for el in expectation ]),
217
205
'Invalid JSON body of time series returned from '
218
206
'_json_body_ for several series names: {0}.'
219
207
.format (rcvd ))
220
- TestSeriesHelper .MySeriesHelper ._reset_ ()
221
- self .assertEqual (
222
- TestSeriesHelper .MySeriesHelper ._json_body_ (),
223
- [],
224
- 'Resetting helper did not empty datapoints.' )
208
+
209
+ @mock .patch ('influxdb.helper.SeriesHelper._current_timestamp' )
210
+ def testSeriesWithoutTimeField (self , current_timestamp ):
211
+ """
212
+ Tests that time is optional on a series without a time field.
213
+ """
214
+ current_date = datetime .today ()
215
+ yesterday = current_date - timedelta (days = 1 )
216
+ current_timestamp .return_value = yesterday
217
+ TestSeriesHelper .MySeriesHelper (
218
+ server_name = 'us.east-1' , other_tag = 'ello' ,
219
+ some_stat = 159 , time = current_date
220
+ )
221
+ TestSeriesHelper .MySeriesHelper (
222
+ server_name = 'us.east-1' , other_tag = 'ello' ,
223
+ some_stat = 158 ,
224
+ )
225
+ point1 , point2 = TestSeriesHelper .MySeriesHelper ._json_body_ ()
226
+ self .assertTrue ('time' in point1 and 'time' in point2 )
227
+ self .assertEqual (point1 ['time' ], current_date )
228
+ self .assertEqual (point2 ['time' ], yesterday )
229
+
230
+ @mock .patch ('influxdb.helper.SeriesHelper._current_timestamp' )
231
+ def testSeriesWithTimeField (self , current_timestamp ):
232
+ """
233
+ Test that time is optional on a series with a time field.
234
+ """
235
+ current_date = datetime .today ()
236
+ yesterday = current_date - timedelta (days = 1 )
237
+ current_timestamp .return_value = yesterday
238
+
239
+ class MyTimeFieldSeriesHelper (SeriesHelper ):
240
+
241
+ class Meta :
242
+ client = TestSeriesHelper .client
243
+ series_name = 'events.stats.{server_name}'
244
+ fields = ['some_stat' , 'time' ]
245
+ tags = ['server_name' , 'other_tag' ]
246
+ bulk_size = 5
247
+ autocommit = True
248
+
249
+ MyTimeFieldSeriesHelper (
250
+ server_name = 'us.east-1' , other_tag = 'ello' ,
251
+ some_stat = 159 , time = current_date
252
+ )
253
+ MyTimeFieldSeriesHelper (
254
+ server_name = 'us.east-1' , other_tag = 'ello' ,
255
+ some_stat = 158 ,
256
+ )
257
+ point1 , point2 = MyTimeFieldSeriesHelper ._json_body_ ()
258
+ self .assertTrue ('time' in point1 and 'time' in point2 )
259
+ self .assertEqual (point1 ['time' ], current_date )
260
+ self .assertEqual (point2 ['time' ], yesterday )
225
261
226
262
def testInvalidHelpers (self ):
227
263
'''
0 commit comments