Skip to content

Commit 4193d67

Browse files
committed
Merge pull request #6 from AdysTech/wip
Added Partial Writes, and malformatted requests
2 parents 20a860f + 52f8547 commit 4193d67

File tree

9 files changed

+403
-58
lines changed

9 files changed

+403
-58
lines changed

AdysTech.InfluxDB.Client.Net.Test/AdysTech.InfluxDB.Client.Net.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
</Otherwise>
5252
</Choose>
5353
<ItemGroup>
54+
<Compile Include="DataGen.cs" />
5455
<Compile Include="InfluxDBClientTest.cs" />
5556
<Compile Include="Properties\AssemblyInfo.cs" />
5657
</ItemGroup>
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace InfluxDB.Client.Test
8+
{
9+
static class DataGen
10+
{
11+
private static readonly Random random = new Random ();
12+
private static readonly object syncLock = new object ();
13+
14+
public static int RandomNumber(int min, int max)
15+
{
16+
lock ( syncLock )
17+
{ // synchronize
18+
return random.Next (min, max);
19+
}
20+
}
21+
22+
public static int RandomInt()
23+
{
24+
lock ( syncLock )
25+
{ // synchronize
26+
return random.Next ();
27+
}
28+
}
29+
30+
public static int RandomInt(int Max)
31+
{
32+
lock ( syncLock )
33+
{ // synchronize
34+
return random.Next (Max);
35+
}
36+
}
37+
38+
public static double RandomDouble()
39+
{
40+
lock ( syncLock )
41+
{ // synchronize
42+
return random.NextDouble ();
43+
}
44+
}
45+
46+
public static string RandomString()
47+
{
48+
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,=/\\";
49+
var stringChars = new StringBuilder (16, 16);
50+
51+
for ( int i = 0; i < stringChars.Length; i++ )
52+
{
53+
lock ( syncLock )
54+
{
55+
stringChars.Append(chars[random.Next (chars.Length)]);
56+
}
57+
}
58+
return stringChars.ToString (); ;
59+
}
60+
61+
public static DateTime RandomDate(DateTime from, DateTime to)
62+
{
63+
lock ( syncLock )
64+
{
65+
return from.AddTicks ((long) ( random.NextDouble () * ( to.Ticks - from.Ticks ) ));
66+
}
67+
}
68+
}
69+
}

AdysTech.InfluxDB.Client.Net.Test/InfluxDBClientTest.cs

Lines changed: 137 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -218,18 +218,7 @@ public async Task TestPostDoublePointAsync()
218218
}
219219
}
220220

221-
private string GenerateRandomString()
222-
{
223-
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,=/\\";
224-
var stringChars = new char[16];
225-
var random = new Random ();
226221

227-
for ( int i = 0; i < stringChars.Length; i++ )
228-
{
229-
stringChars[i] = chars[random.Next (chars.Length)];
230-
}
231-
return new String (stringChars);
232-
}
233222

234223
[TestMethod]
235224
public async Task TestPostStringPointAsync()
@@ -242,7 +231,7 @@ public async Task TestPostStringPointAsync()
242231
valString.UtcTimestamp = DateTime.UtcNow;
243232
valString.Tags.Add ("TestDate", time.ToShortDateString ());
244233
valString.Tags.Add ("TestTime", time.ToShortTimeString ());
245-
valString.Fields.Add ("Stringfield", GenerateRandomString ());
234+
valString.Fields.Add ("Stringfield", @"j0,Oox7ju6lJvA0\");//DataGen.RandomString ());
246235
valString.MeasurementName = measurementName;
247236
valString.Precision = TimePrecision.Seconds;
248237
var r = await client.PostPointAsync (dbName, valString);
@@ -291,47 +280,70 @@ public async Task TestPostPointsAsync()
291280
{
292281
var client = new InfluxDBClient (influxUrl, dbUName, dbpwd);
293282
var time = DateTime.Now;
294-
var rand = new Random ();
283+
var today = DateTime.Now.ToShortDateString ();
284+
var now = DateTime.Now.ToShortTimeString ();
285+
286+
var points = new List<IInfluxDatapoint> ();
295287

296288
var valDouble = new InfluxDatapoint<double> ();
297289
valDouble.UtcTimestamp = DateTime.UtcNow;
298-
valDouble.Tags.Add ("TestDate", time.ToShortDateString ());
299-
valDouble.Tags.Add ("TestTime", time.ToShortTimeString ());
300-
valDouble.Fields.Add ("Doublefield", rand.NextDouble ());
301-
valDouble.Fields.Add ("Doublefield2", rand.NextDouble ());
290+
valDouble.Tags.Add ("TestDate", today);
291+
valDouble.Tags.Add ("TestTime", now);
292+
valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
293+
valDouble.Fields.Add ("Doublefield2", DataGen.RandomDouble ());
294+
valDouble.MeasurementName = measurementName;
295+
valDouble.Precision = TimePrecision.Nanoseconds;
296+
points.Add (valDouble);
297+
298+
valDouble = new InfluxDatapoint<double> ();
299+
valDouble.UtcTimestamp = DateTime.UtcNow;
300+
valDouble.Tags.Add ("TestDate", today);
301+
valDouble.Tags.Add ("TestTime", now);
302+
valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
303+
valDouble.Fields.Add ("Doublefield2", DataGen.RandomDouble ());
302304
valDouble.MeasurementName = measurementName;
303-
valDouble.Precision = TimePrecision.Milliseconds;
305+
valDouble.Precision = TimePrecision.Microseconds;
306+
points.Add (valDouble);
304307

305308
var valInt = new InfluxDatapoint<int> ();
306309
valInt.UtcTimestamp = DateTime.UtcNow;
307-
valInt.Tags.Add ("TestDate", time.ToShortDateString ());
308-
valInt.Tags.Add ("TestTime", time.ToShortTimeString ());
309-
valInt.Fields.Add ("Intfield", rand.Next ());
310-
valInt.Fields.Add ("Intfield2", rand.Next ());
310+
valInt.Tags.Add ("TestDate", today);
311+
valInt.Tags.Add ("TestTime", now);
312+
valInt.Fields.Add ("Intfield", DataGen.RandomInt ());
313+
valInt.Fields.Add ("Intfield2", DataGen.RandomInt ());
314+
valInt.MeasurementName = measurementName;
315+
valInt.Precision = TimePrecision.Milliseconds;
316+
points.Add (valInt);
317+
318+
valInt = new InfluxDatapoint<int> ();
319+
valInt.UtcTimestamp = DateTime.UtcNow;
320+
valInt.Tags.Add ("TestDate", today);
321+
valInt.Tags.Add ("TestTime", now);
322+
valInt.Fields.Add ("Intfield", DataGen.RandomInt ());
323+
valInt.Fields.Add ("Intfield2", DataGen.RandomInt ());
311324
valInt.MeasurementName = measurementName;
312325
valInt.Precision = TimePrecision.Seconds;
326+
points.Add (valInt);
313327

314328
var valBool = new InfluxDatapoint<bool> ();
315329
valBool.UtcTimestamp = DateTime.UtcNow;
316-
valBool.Tags.Add ("TestDate", time.ToShortDateString ());
317-
valBool.Tags.Add ("TestTime", time.ToShortTimeString ());
330+
valBool.Tags.Add ("TestDate", today);
331+
valBool.Tags.Add ("TestTime", now);
318332
valBool.Fields.Add ("Booleanfield", time.Ticks % 2 == 0);
319333
valBool.MeasurementName = measurementName;
320334
valBool.Precision = TimePrecision.Minutes;
335+
points.Add (valBool);
321336

322337
var valString = new InfluxDatapoint<string> ();
323338
valString.UtcTimestamp = DateTime.UtcNow;
324-
valString.Tags.Add ("TestDate", time.ToShortDateString ());
325-
valString.Tags.Add ("TestTime", time.ToShortTimeString ());
326-
valString.Fields.Add ("Stringfield", GenerateRandomString ());
339+
valString.Tags.Add ("TestDate", today);
340+
valString.Tags.Add ("TestTime", now);
341+
valString.Fields.Add ("Stringfield", DataGen.RandomString ());
327342
valString.MeasurementName = measurementName;
328343
valString.Precision = TimePrecision.Hours;
329-
330-
var points = new List<IInfluxDatapoint> ();
331344
points.Add (valString);
332-
points.Add (valInt);
333-
points.Add (valDouble);
334-
points.Add (valBool);
345+
346+
335347
var r = await client.PostPointsAsync (dbName, points);
336348
Assert.IsTrue (r, "PostPointsAsync retunred false");
337349
}
@@ -344,6 +356,82 @@ public async Task TestPostPointsAsync()
344356
}
345357
}
346358

359+
360+
[TestMethod]
361+
[ExpectedException (typeof (InfluxDBException))]
362+
public async Task TestPostPointAsync_InvalidReq()
363+
{
364+
var client = new InfluxDBClient (influxUrl, dbUName, dbpwd);
365+
var time = DateTime.Now;
366+
var today = DateTime.Now.ToShortDateString ();
367+
var now = DateTime.Now.ToShortTimeString ();
368+
369+
var valDouble = new InfluxDatapoint<double> ();
370+
valDouble.UtcTimestamp = DateTime.UtcNow;
371+
valDouble.Tags.Add ("TestDate", today);
372+
valDouble.Tags.Add ("TestTime", now);
373+
valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
374+
valDouble.Fields.Add ("Doublefield2", Double.NaN);
375+
valDouble.MeasurementName = measurementName;
376+
valDouble.Precision = TimePrecision.Seconds;
377+
378+
var r = await client.PostPointAsync (dbName, valDouble);
379+
Assert.IsTrue (r, "PostPointsAsync retunred false");
380+
381+
}
382+
383+
384+
[TestMethod]
385+
[ExpectedException (typeof (InfluxDBException))]
386+
public async Task TestPostPointsAsync_PartialWrite()
387+
{
388+
var client = new InfluxDBClient (influxUrl, dbUName, dbpwd);
389+
var time = DateTime.Now;
390+
var today = DateTime.Now.ToShortDateString ();
391+
var now = DateTime.Now.ToShortTimeString ();
392+
393+
var points = new List<IInfluxDatapoint> ();
394+
395+
396+
var valDouble = new InfluxDatapoint<double> ();
397+
valDouble.UtcTimestamp = DateTime.UtcNow;
398+
valDouble.Tags.Add ("TestDate", today);
399+
valDouble.Tags.Add ("TestTime", now);
400+
valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
401+
valDouble.Fields.Add ("Doublefield2", Double.NaN);
402+
valDouble.MeasurementName = measurementName;
403+
valDouble.Precision = TimePrecision.Seconds;
404+
points.Add (valDouble);
405+
406+
407+
for ( int i = 0; i < 5; i++ )
408+
{
409+
var valInt = new InfluxDatapoint<int> ();
410+
valInt.UtcTimestamp = DateTime.UtcNow.AddSeconds (-1 * DataGen.RandomInt (3600));
411+
valInt.Tags.Add ("TestDate", today);
412+
valInt.Tags.Add ("TestTime", now);
413+
valInt.Fields.Add ("Intfield", DataGen.RandomInt ());
414+
valInt.Fields.Add ("Intfield2", DataGen.RandomInt ());
415+
valInt.MeasurementName = measurementName;
416+
valInt.Precision = TimePrecision.Seconds;
417+
points.Add (valInt);
418+
}
419+
420+
valDouble = new InfluxDatapoint<double> ();
421+
valDouble.UtcTimestamp = DateTime.UtcNow;
422+
valDouble.Tags.Add ("TestDate", today);
423+
valDouble.Tags.Add ("TestTime", now);
424+
valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
425+
valDouble.Fields.Add ("Doublefield2", Double.NaN);
426+
valDouble.MeasurementName = measurementName;
427+
valDouble.Precision = TimePrecision.Seconds;
428+
points.Add (valDouble);
429+
430+
var r = await client.PostPointsAsync (dbName, points);
431+
Assert.IsTrue (r, "PostPointsAsync retunred false");
432+
433+
}
434+
347435
/// <summary>
348436
/// This will create 2000 objects, and posts them to Influx. Since the precision is random, many points get overwritten
349437
/// (e.g. you can have only point per hour at hour precision.
@@ -355,49 +443,49 @@ public async Task TestBachingPostPointsAsync()
355443
try
356444
{
357445
var client = new InfluxDBClient (influxUrl, dbUName, dbpwd);
358-
359-
var rand = new Random ();
446+
360447
var points = new List<IInfluxDatapoint> ();
361448

362449
var today = DateTime.Now.ToShortDateString ();
363450
var now = DateTime.Now.ToShortTimeString ();
451+
var start = DateTime.Now.AddDays (-5);
452+
var end = DateTime.Now;
364453

365-
for ( int i = 0; i < 500; i++ )
454+
for ( int i = 0; i < 5000; i++ )
366455
{
367-
var utcTime = DateTime.UtcNow;
368456
var valDouble = new InfluxDatapoint<double> ();
369-
valDouble.UtcTimestamp = utcTime;
457+
valDouble.UtcTimestamp = DataGen.RandomDate (start, end);
370458
valDouble.Tags.Add ("TestDate", today);
371459
valDouble.Tags.Add ("TestTime", now);
372-
valDouble.Fields.Add ("Doublefield", rand.NextDouble ());
373-
valDouble.Fields.Add ("Doublefield2", rand.NextDouble ());
460+
valDouble.Fields.Add ("Doublefield", DataGen.RandomDouble ());
461+
valDouble.Fields.Add ("Doublefield2", DataGen.RandomDouble ());
374462
valDouble.MeasurementName = measurementName;
375-
valDouble.Precision = (TimePrecision) ( rand.Next () % 6 ) + 1;
463+
valDouble.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;
376464

377465
var valInt = new InfluxDatapoint<int> ();
378-
valInt.UtcTimestamp = utcTime;
466+
valInt.UtcTimestamp = DataGen.RandomDate (start, end);
379467
valInt.Tags.Add ("TestDate", today);
380468
valInt.Tags.Add ("TestTime", now);
381-
valInt.Fields.Add ("Intfield", rand.Next ());
382-
valInt.Fields.Add ("Intfield2", rand.Next ());
469+
valInt.Fields.Add ("Intfield", DataGen.RandomInt ());
470+
valInt.Fields.Add ("Intfield2", DataGen.RandomInt ());
383471
valInt.MeasurementName = measurementName;
384-
valInt.Precision = (TimePrecision) ( rand.Next () % 6 ) + 1;
472+
valInt.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;
385473

386474
var valBool = new InfluxDatapoint<bool> ();
387-
valBool.UtcTimestamp = utcTime;
475+
valBool.UtcTimestamp = DataGen.RandomDate (start, end);
388476
valBool.Tags.Add ("TestDate", today);
389477
valBool.Tags.Add ("TestTime", now);
390478
valBool.Fields.Add ("Booleanfield", DateTime.Now.Ticks % 2 == 0);
391479
valBool.MeasurementName = measurementName;
392-
valBool.Precision = (TimePrecision) ( rand.Next () % 6 ) + 1;
480+
valBool.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;
393481

394482
var valString = new InfluxDatapoint<string> ();
395-
valString.UtcTimestamp = utcTime;
483+
valString.UtcTimestamp = DataGen.RandomDate (start, end);
396484
valString.Tags.Add ("TestDate", today);
397485
valString.Tags.Add ("TestTime", now);
398-
valString.Fields.Add ("Stringfield", GenerateRandomString ());
486+
valString.Fields.Add ("Stringfield", DataGen.RandomString ());
399487
valString.MeasurementName = measurementName;
400-
valString.Precision = (TimePrecision) ( rand.Next () % 6 ) + 1;
488+
valString.Precision = (TimePrecision) ( DataGen.RandomInt () % 6 ) + 1;
401489

402490

403491
points.Add (valString);

AdysTech.InfluxDB.Client.Net/AdysTech.InfluxDB.Client.Net.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
<Compile Include="InfluxDatapoint.cs" />
4848
<Compile Include="InfluxDBClient.cs" />
4949
<Compile Include="DataContracts\InfluxJsonTypes.cs" />
50+
<Compile Include="InfluxDBException.cs" />
5051
<Compile Include="Properties\AssemblyInfo.cs" />
5152
<Compile Include="ServiceUnavailableException.cs" />
5253
</ItemGroup>

0 commit comments

Comments
 (0)