package com.axibase.tsd.client.command; import com.axibase.tsd.TestUtil; import com.axibase.tsd.client.DataService; import com.axibase.tsd.client.HttpClientManager; import com.axibase.tsd.model.data.command.GetSeriesQuery; import com.axibase.tsd.model.data.series.Sample; import com.axibase.tsd.model.data.series.Series; import com.axibase.tsd.network.InsertCommand; import com.axibase.tsd.network.PlainCommand; import com.axibase.tsd.util.AtsdUtil; import org.junit.BeforeClass; import org.junit.Test; import java.util.Collections; import java.util.List; import java.util.Map; import static com.axibase.tsd.TestUtil.buildHttpClientManager; import static org.junit.Assert.assertEquals; /** * @author Igor Shmagrinskiy */ public class CommandSeriesQuotesTest { private final static String TEST_PREFIX = "command-series-quotes-test-"; private final static String TEST_ENTITY = TEST_PREFIX + "entity"; private final static String TEST_METRIC = TEST_PREFIX + "metric"; private static HttpClientManager httpClientManager = buildHttpClientManager(); private static DataService dataService = new DataService(httpClientManager); private static Series testSeries; @BeforeClass public static void prepareData() { Sample testSample = new Sample(TestUtil.parseDate("2016-06-03T09:24:00.000Z").getTime(), -31.1, "txt"); Map<String, String> tags = Collections.singletonMap("tag", "OFF- RAMP \" U\", I"); testSeries = new Series(); testSeries.setEntityName(TEST_ENTITY); testSeries.setMetricName(TEST_METRIC); testSeries.setData(Collections.singletonList(testSample)); testSeries.setTags(tags); } @Test public void testComposing() { PlainCommand command = new InsertCommand( testSeries.getEntityName(), testSeries.getMetricName(), testSeries.getData().get(0), testSeries.getTags() ); Sample testSample = testSeries.getData().get(0); assertEquals("Command has been composed incorrectly", String.format("series e:\"%s\" ms:%d t:tag=\"OFF- RAMP \"\" U\"\", I\" m:\"%s\"=%s x:\"%s\"=\"%s\"\n", TEST_ENTITY, testSample.getTimeMillis(), TEST_METRIC, testSample.getNumericValue(), TEST_METRIC, testSample.getTextValue()), command.compose() ); } @Test public void testInserting() throws InterruptedException { PlainCommand command = new InsertCommand( testSeries.getEntityName(), testSeries.getMetricName(), testSeries.getData().get(0), testSeries.getTags() ); dataService.sendBatch(Collections.singleton(command)); Thread.sleep(TestUtil.WAIT_TIME); GetSeriesQuery getSeriesQuery = new GetSeriesQuery(testSeries.getEntityName(), testSeries.getMetricName(), testSeries.getTags()); getSeriesQuery.setStartDate(AtsdUtil.DateTime.MIN_QUERIED_DATE_TIME); getSeriesQuery.setEndDate(AtsdUtil.DateTime.MAX_QUERIED_DATE_TIME); List<Series> retrievedSeriesList = dataService.retrieveSeries(getSeriesQuery); Series actualSeries = retrievedSeriesList.get(0); assertEquals(testSeries.getEntityName(), actualSeries.getEntityName()); assertEquals(testSeries.getMetricName(), actualSeries.getMetricName()); assertEquals(testSeries.getData(), actualSeries.getData()); assertEquals(testSeries.getTags(), actualSeries.getTags()); } @Test public void testComposeSeriesCommandWithSpaceInText() { final long time = 1488800000000L; PlainCommand command = new InsertCommand( "test-entity", "test-metric", new Sample(time, Double.NaN, "Value With Space") ); assertEquals("series e:\"test-entity\" ms:1488800000000 m:\"test-metric\"=NaN x:\"test-metric\"=\"Value With Space\"", command.compose().trim()); } @Test public void testCoposeSeriesCommandWithQuotesInText() { final long time = 1488800000000L; PlainCommand command = new InsertCommand( "test-entity", "test-metric", new Sample(time, Double.NaN, "a \"Quoted\" value") ); assertEquals("series e:\"test-entity\" ms:1488800000000 m:\"test-metric\"=NaN x:\"test-metric\"=\"a \"\"Quoted\"\" value\"", command.compose().trim()); } }