293 lines
8.9 KiB
PHP
293 lines
8.9 KiB
PHP
<?php
|
|
|
|
namespace InfluxDB2Test;
|
|
|
|
use DateTime;
|
|
use DateTimeImmutable;
|
|
use InfluxDB2\Model\WritePrecision;
|
|
use InfluxDB2\Point;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class PointTest extends TestCase
|
|
{
|
|
public function testToLineProtocol()
|
|
{
|
|
$pointArgs = new Point(
|
|
'h2o',
|
|
array('host' => 'aws', 'region' => 'us'),
|
|
array('level' => 5, 'saturation' => '99%'),
|
|
123
|
|
);
|
|
|
|
$this->assertEquals(
|
|
'h2o,host=aws,region=us level=5i,saturation="99%" 123',
|
|
$pointArgs->toLineProtocol()
|
|
);
|
|
|
|
$pointArray = Point::fromArray(array('name' => 'h2o',
|
|
'tags' => array('host' => 'aws', 'region' => 'us'),
|
|
'fields' => array('level' => 5, 'saturation' => '99%'),
|
|
'time' => 123));
|
|
|
|
$this->assertEquals(
|
|
'h2o,host=aws,region=us level=5i,saturation="99%" 123',
|
|
$pointArray->toLineProtocol()
|
|
);
|
|
}
|
|
|
|
public function testMeasurementEscape()
|
|
{
|
|
$point = new Point('h2 o 2', array('location' => 'europe'), array('level' => 2));
|
|
$this->assertEquals('h2\\ o\\ 2,location=europe level=2i', $point->toLineProtocol());
|
|
|
|
$point = new Point('h2,o', array('location' => 'europe'), array('level' => 2));
|
|
$this->assertEquals('h2\\,o,location=europe level=2i', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testEmptyKey()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addField('level', 2)
|
|
->addTag('location', 'europe')
|
|
->addTag('', 'warn');
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testEmptyValue()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addField('level', 2)
|
|
->addTag('location', 'europe')
|
|
->addTag('log', '');
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testTagEscapingKeyAndValue()
|
|
{
|
|
$point = Point::measurement("h\n2\ro\t_data")
|
|
->addTag("new\nline", "new\nline")
|
|
->addTag("carriage\rreturn", "carriage\nreturn")
|
|
->addTag("t\tab", "t\tab")
|
|
->addField("level", 2);
|
|
|
|
$this->assertEquals(
|
|
"h\\n2\\ro\\t_data,carriage\\rreturn=carriage\\nreturn,new\\nline=new\\nline,t\\tab=t\\tab level=2i",
|
|
$point->toLineProtocol()
|
|
);
|
|
}
|
|
|
|
public function testEqualSignEscaping()
|
|
{
|
|
$point = Point::measurement("h=2o")
|
|
->addTag("l=ocation", "e=urope")
|
|
->addField("l=evel", 2);
|
|
|
|
$this->assertEquals("h=2o,l\\=ocation=e\\=urope l\\=evel=2i", $point->toLineProtocol());
|
|
}
|
|
|
|
public function testOverrideTagAndField()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addTag('location', 'europe2')
|
|
->addField('level', 1)
|
|
->addField('level', 2)
|
|
->addField('level', 3);
|
|
|
|
$this->assertEquals('h2o,location=europe2 level=3i', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testFieldTypes()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('tag_b', 'b')
|
|
->addTag('tag_a', 'a')
|
|
->addField('n1', -2)
|
|
->addField('n2', 10)
|
|
->addField('n3', 9223372036854775807)
|
|
->addField('n4', 5.5)
|
|
->addField('bool', true)
|
|
->addField('string', 'string value');
|
|
|
|
$expected = 'h2o,tag_a=a,tag_b=b bool=true,n1=-2i,n2=10i,n3=9223372036854775807i,n4=5.5,string="string value"';
|
|
$this->assertEquals($expected, $point->toLineProtocol());
|
|
}
|
|
|
|
public function testFieldNullValue()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->addField('warning', null);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testFieldEscape()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 'string esc"ape value');
|
|
|
|
$this->assertEquals('h2o,location=europe level="string esc\"ape value"', $point->toLineProtocol());
|
|
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 'string esc\\ape value');
|
|
|
|
$this->assertEquals('h2o,location=europe level="string esc\\\\ape value"', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testTime()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time(123, WritePrecision::NS);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 123', $point->toLineProtocol());
|
|
}
|
|
|
|
/**
|
|
* @dataProvider providerDateTime
|
|
*/
|
|
public function testTimeFormatting($time)
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time($time, WritePrecision::MS);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 1444897215000', $point->toLineProtocol());
|
|
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time($time, WritePrecision::S);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 1444897215', $point->toLineProtocol());
|
|
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time($time, WritePrecision::US);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 1444897215000000', $point->toLineProtocol());
|
|
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time($time, WritePrecision::NS);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 1444897215000000000', $point->toLineProtocol());
|
|
}
|
|
|
|
public function providerDateTime()
|
|
{
|
|
return [
|
|
[
|
|
(new DateTime())
|
|
->setDate(2015, 10, 15)
|
|
->setTime(8, 20, 15)
|
|
],
|
|
[
|
|
(new DateTimeImmutable())
|
|
->setDate(2015, 10, 15)
|
|
->setTime(8, 20, 15)
|
|
],
|
|
];
|
|
}
|
|
|
|
public function testTimeFormattingDefault()
|
|
{
|
|
$time = new DateTime();
|
|
$time->setDate(2015, 10, 15);
|
|
$time->setTime(8, 20, 15);
|
|
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time($time);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 1444897215000000000', $point->toLineProtocol());
|
|
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time($time, null);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 1444897215000000000', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testTimeString()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time('123');
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 123', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testTimeFloat()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addField('level', 2)
|
|
->time(102030405060.24);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i 102030405060', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testUtf8()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'Přerov')
|
|
->addField('level', 2)
|
|
->time(123);
|
|
|
|
$this->assertEquals('h2o,location=Přerov level=2i 123', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testWithoutTags()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addField('level', 2)
|
|
->time(123);
|
|
|
|
$this->assertEquals('h2o level=2i 123', $point->toLineProtocol());
|
|
}
|
|
|
|
public function testWithoutFields()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->time(123);
|
|
|
|
$this->assertNull($point->toLineProtocol());
|
|
}
|
|
|
|
public function testFromArrayWithoutName()
|
|
{
|
|
$pointArray = Point::fromArray(array(
|
|
'tags' => array('host' => 'aws', 'region' => 'us'),
|
|
'fields' => array('level' => 5, 'saturation' => '99%'),
|
|
'time' => 123));
|
|
|
|
$this->assertNull($pointArray);
|
|
}
|
|
|
|
public function testTagNotString()
|
|
{
|
|
$point = Point::measurement('h2o')
|
|
->addTag('location', 'europe')
|
|
->addTag('tag_not_string', [])
|
|
->addTag('tag_not_null', null)
|
|
->addField('level', 2);
|
|
|
|
$this->assertEquals('h2o,location=europe level=2i', $point->toLineProtocol());
|
|
}
|
|
}
|