/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.core.historicaltimeseries.impl;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import java.util.Map.Entry;
import java.util.UUID;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeries;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.timeseries.date.localdate.ImmutableLocalDateDoubleTimeSeries;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries;
import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeriesBuilder;
import com.opengamma.util.test.AbstractRedisTestCase;
import com.opengamma.util.tuple.Pair;
/**
*
*/
@Test(enabled=false)
public class NonVersionedRedisHistoricalTimeSeriesSourceTest extends AbstractRedisTestCase {
private static final int ITER_SIZE = 50;
public void basicOperation() {
NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
UniqueId id1 = UniqueId.of("Test", "1");
UniqueId id2 = UniqueId.of("Test", "2");
UniqueId id3 = UniqueId.of("Test", "3");
LocalDateDoubleTimeSeriesBuilder tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 14.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 15.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 16.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 17.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 18.0);
source.updateTimeSeries(id1, tsBuilder.build());
tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 24.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 25.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 26.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 27.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 28.0);
source.updateTimeSeries(id2, tsBuilder.build());
tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 34.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 35.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 36.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 37.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 38.0);
source.updateTimeSeries(id3, tsBuilder.build());
Pair<LocalDate, Double> pair = null;
HistoricalTimeSeries hts = null;
LocalDateDoubleTimeSeries ts = null;
pair = source.getLatestDataPoint(id3);
assertNotNull(pair);
assertEquals(LocalDate.parse("2013-06-08"), pair.getFirst());
assertEquals(38.0, pair.getSecond(), 0.000001);
assertNull(source.getHistoricalTimeSeries(UniqueId.of("Test", "5")));
hts = source.getHistoricalTimeSeries(id2);
assertNotNull(hts);
assertEquals(id2, hts.getUniqueId());
ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
assertEquals(24.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(25.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(26.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(27.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
assertEquals(28.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
hts = source.getHistoricalTimeSeries(ExternalIdBundle.of(ExternalId.of("Test", "1")), LocalDate.now(), "Data Source", "Data Provider", "Data Field");
assertNotNull(hts);
assertEquals(id1, hts.getUniqueId());
ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
assertEquals(14.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
assertEquals(18.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
}
public void updateDataPoint() {
NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
UniqueId id = UniqueId.of("Test", "1");
HistoricalTimeSeries hts = source.getHistoricalTimeSeries(id);
assertNull(hts);
LocalDateDoubleTimeSeriesBuilder tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 14.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 15.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 16.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 17.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 18.0);
source.updateTimeSeries(id, tsBuilder.build());
hts = source.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
LocalDateDoubleTimeSeries ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
assertEquals(14.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
source.updateTimeSeriesPoint(id, LocalDate.parse("2013-06-04"), 13.0);
hts = source.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
assertEquals(13.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
source.updateTimeSeriesPoint(id, LocalDate.parse("2013-06-06"), 12.0);
hts = source.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
assertEquals(12.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(18.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
source.updateTimeSeriesPoint(id, LocalDate.parse("2013-06-08"), 11.0);
hts = source.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
assertEquals(11.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
}
public void appendTimeSeries() {
NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
UniqueId id = UniqueId.of("Test", "1");
HistoricalTimeSeries hts = source.getHistoricalTimeSeries(id);
assertNull(hts);
LocalDateDoubleTimeSeriesBuilder tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 14.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 15.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 16.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 17.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 18.0);
source.updateTimeSeries(id, tsBuilder.build());
hts = source.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
LocalDateDoubleTimeSeries ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(5, ts.size());
tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-09"), 19.0);
tsBuilder.put(LocalDate.parse("2013-06-10"), 20.0);
tsBuilder.put(LocalDate.parse("2013-06-11"), 21.0);
tsBuilder.put(LocalDate.parse("2013-06-12"), 22.0);
tsBuilder.put(LocalDate.parse("2013-06-13"), 23.0);
source.updateTimeSeries(id, tsBuilder.build());
hts = source.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertNotNull(ts);
assertEquals(10, ts.size());
}
public void timeseriesRange() {
NonVersionedRedisHistoricalTimeSeriesSource htsSource = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
UniqueId id = UniqueId.of("Test", "1");
HistoricalTimeSeries hts = htsSource.getHistoricalTimeSeries(id);
assertNull(hts);
LocalDateDoubleTimeSeriesBuilder tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 14.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 15.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 16.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 17.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 18.0);
tsBuilder.put(LocalDate.parse("2013-06-09"), 24.0);
tsBuilder.put(LocalDate.parse("2013-06-10"), 25.0);
tsBuilder.put(LocalDate.parse("2013-06-11"), 26.0);
tsBuilder.put(LocalDate.parse("2013-06-12"), 27.0);
tsBuilder.put(LocalDate.parse("2013-06-13"), 28.0);
tsBuilder.put(LocalDate.parse("2013-06-14"), 34.0);
tsBuilder.put(LocalDate.parse("2013-06-15"), 35.0);
tsBuilder.put(LocalDate.parse("2013-06-16"), 36.0);
tsBuilder.put(LocalDate.parse("2013-06-17"), 37.0);
tsBuilder.put(LocalDate.parse("2013-06-18"), 38.0);
htsSource.updateTimeSeries(id, tsBuilder.build());
hts = htsSource.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
LocalDateDoubleTimeSeries ts = hts.getTimeSeries();
assertEquals(15, ts.size());
assertEquals(14.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
assertEquals(18.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
assertEquals(24.0, ts.getValue(LocalDate.parse("2013-06-09")), 0.00001);
assertEquals(25.0, ts.getValue(LocalDate.parse("2013-06-10")), 0.00001);
assertEquals(26.0, ts.getValue(LocalDate.parse("2013-06-11")), 0.00001);
assertEquals(27.0, ts.getValue(LocalDate.parse("2013-06-12")), 0.00001);
assertEquals(28.0, ts.getValue(LocalDate.parse("2013-06-13")), 0.00001);
assertEquals(34.0, ts.getValue(LocalDate.parse("2013-06-14")), 0.00001);
assertEquals(35.0, ts.getValue(LocalDate.parse("2013-06-15")), 0.00001);
assertEquals(36.0, ts.getValue(LocalDate.parse("2013-06-16")), 0.00001);
assertEquals(37.0, ts.getValue(LocalDate.parse("2013-06-17")), 0.00001);
assertEquals(38.0, ts.getValue(LocalDate.parse("2013-06-18")), 0.00001);
hts = htsSource.getHistoricalTimeSeries(id, LocalDate.parse("2013-06-04"), true, LocalDate.parse("2013-06-08"), true);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertEquals(5, ts.size());
assertEquals(14.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
assertEquals(18.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
hts = htsSource.getHistoricalTimeSeries(id, LocalDate.parse("2013-06-04"), false, LocalDate.parse("2013-06-08"), true);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertEquals(4, ts.size());
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
assertEquals(18.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
hts = htsSource.getHistoricalTimeSeries(id, LocalDate.parse("2013-06-04"), true, LocalDate.parse("2013-06-08"), false);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertEquals(4, ts.size());
assertEquals(14.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
hts = htsSource.getHistoricalTimeSeries(id, LocalDate.parse("2013-06-04"), false, LocalDate.parse("2013-06-08"), false);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
ts = hts.getTimeSeries();
assertEquals(3, ts.size());
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
}
public void getLatestDataPoint() {
NonVersionedRedisHistoricalTimeSeriesSource htsSource = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
UniqueId id = UniqueId.of("Test", "1");
HistoricalTimeSeries hts = htsSource.getHistoricalTimeSeries(id);
assertNull(hts);
LocalDateDoubleTimeSeriesBuilder tsBuilder = ImmutableLocalDateDoubleTimeSeries.builder();
tsBuilder.put(LocalDate.parse("2013-06-04"), 14.0);
tsBuilder.put(LocalDate.parse("2013-06-05"), 15.0);
tsBuilder.put(LocalDate.parse("2013-06-06"), 16.0);
tsBuilder.put(LocalDate.parse("2013-06-07"), 17.0);
tsBuilder.put(LocalDate.parse("2013-06-08"), 18.0);
tsBuilder.put(LocalDate.parse("2013-06-09"), 24.0);
tsBuilder.put(LocalDate.parse("2013-06-10"), 25.0);
tsBuilder.put(LocalDate.parse("2013-06-11"), 26.0);
tsBuilder.put(LocalDate.parse("2013-06-12"), 27.0);
tsBuilder.put(LocalDate.parse("2013-06-13"), 28.0);
tsBuilder.put(LocalDate.parse("2013-06-14"), 34.0);
tsBuilder.put(LocalDate.parse("2013-06-15"), 35.0);
tsBuilder.put(LocalDate.parse("2013-06-16"), 36.0);
tsBuilder.put(LocalDate.parse("2013-06-17"), 37.0);
tsBuilder.put(LocalDate.parse("2013-06-18"), 38.0);
htsSource.updateTimeSeries(id, tsBuilder.build());
hts = htsSource.getHistoricalTimeSeries(id);
assertNotNull(hts);
assertEquals(id, hts.getUniqueId());
LocalDateDoubleTimeSeries ts = hts.getTimeSeries();
assertEquals(15, ts.size());
assertEquals(14.0, ts.getValue(LocalDate.parse("2013-06-04")), 0.00001);
assertEquals(15.0, ts.getValue(LocalDate.parse("2013-06-05")), 0.00001);
assertEquals(16.0, ts.getValue(LocalDate.parse("2013-06-06")), 0.00001);
assertEquals(17.0, ts.getValue(LocalDate.parse("2013-06-07")), 0.00001);
assertEquals(18.0, ts.getValue(LocalDate.parse("2013-06-08")), 0.00001);
assertEquals(24.0, ts.getValue(LocalDate.parse("2013-06-09")), 0.00001);
assertEquals(25.0, ts.getValue(LocalDate.parse("2013-06-10")), 0.00001);
assertEquals(26.0, ts.getValue(LocalDate.parse("2013-06-11")), 0.00001);
assertEquals(27.0, ts.getValue(LocalDate.parse("2013-06-12")), 0.00001);
assertEquals(28.0, ts.getValue(LocalDate.parse("2013-06-13")), 0.00001);
assertEquals(34.0, ts.getValue(LocalDate.parse("2013-06-14")), 0.00001);
assertEquals(35.0, ts.getValue(LocalDate.parse("2013-06-15")), 0.00001);
assertEquals(36.0, ts.getValue(LocalDate.parse("2013-06-16")), 0.00001);
assertEquals(37.0, ts.getValue(LocalDate.parse("2013-06-17")), 0.00001);
assertEquals(38.0, ts.getValue(LocalDate.parse("2013-06-18")), 0.00001);
Pair<LocalDate, Double> pair = htsSource.getLatestDataPoint(id);
assertNotNull(pair);
assertEquals(LocalDate.parse("2013-06-18"), pair.getKey());
assertEquals(38.0, pair.getValue(), 0.00001);
pair = htsSource.getLatestDataPoint(id, LocalDate.parse("2013-06-04"), false, LocalDate.parse("2013-06-08"), false);
assertNotNull(pair);
assertEquals(LocalDate.parse("2013-06-07"), pair.getKey());
assertEquals(17.0, pair.getValue(), 0.00001);
}
/**
* Test how fast we can add large historical timeseries adding one data point at a time.
*/
@Test(enabled = false)
public void largePerformanceTestOneDataPoint() {
NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
HistoricalTimeSeries hts = createSampleHts();
long start = System.nanoTime();
LocalDateDoubleTimeSeries timeSeries = hts.getTimeSeries();
for (Entry<LocalDate, Double> entry : timeSeries) {
source.updateTimeSeriesPoint(hts.getUniqueId(), entry.getKey(), entry.getValue());
}
long end = System.nanoTime();
double durationInSec = ((double) (end - start)) / 1e9;
System.out.println("Adding " + hts.getTimeSeries().size() + " datapoints took " + durationInSec + " sec");
HistoricalTimeSeries storedHts = source.getHistoricalTimeSeries(hts.getUniqueId());
assertNotNull(storedHts);
assertEquals(hts.getUniqueId(), storedHts.getUniqueId());
assertEquals(hts.getTimeSeries(), storedHts.getTimeSeries());
}
/**
* Test how fast we can add large historical timeseries using bulk insert.
*/
@Test(enabled = false)
public void largePerformanceTestBulkInsert() {
NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
double totalDurationInSec = 0.0;
HistoricalTimeSeries hts = null;
for (int i = 0; i < ITER_SIZE; i++) {
hts = createSampleHts();
long start = System.nanoTime();
source.updateTimeSeries(hts.getUniqueId(), hts.getTimeSeries());
totalDurationInSec += ((double) (System.nanoTime() - start)) / 1e9;
HistoricalTimeSeries storedHts = source.getHistoricalTimeSeries(hts.getUniqueId());
assertNotNull(storedHts);
assertEquals(hts.getUniqueId(), storedHts.getUniqueId());
assertEquals(hts.getTimeSeries(), storedHts.getTimeSeries());
}
System.out.println("Adding " + hts.getTimeSeries().size() + " datapoints took " + totalDurationInSec/ITER_SIZE + " sec");
}
@Test(enabled = false)
public void largePerformanceTestRead() {
NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix());
HistoricalTimeSeries hts = null;
double totalDurationInSec = 0.0;
for (int i = 0; i < ITER_SIZE; i++) {
hts = createSampleHts();
source.updateTimeSeries(hts.getUniqueId(), hts.getTimeSeries());
long start = System.nanoTime();
HistoricalTimeSeries storedHts = source.getHistoricalTimeSeries(hts.getUniqueId());
totalDurationInSec += ((double) (System.nanoTime() - start)) / 1e9;
assertNotNull(storedHts);
assertEquals(hts.getUniqueId(), storedHts.getUniqueId());
assertEquals(hts.getTimeSeries(), storedHts.getTimeSeries());
}
System.out.println("Reading " + hts.getTimeSeries().size() + " datapoints took " + totalDurationInSec/ITER_SIZE + " sec");
}
private HistoricalTimeSeries createSampleHts() {
UniqueId id = UniqueId.of("HTS", UUID.randomUUID().toString());
LocalDateDoubleTimeSeriesBuilder builder = ImmutableLocalDateDoubleTimeSeries.builder();
LocalDate start = LocalDate.now();
for (int i = 0; i < 50000; i++) {
builder.put(start.plusDays(i), Math.random());
}
return new SimpleHistoricalTimeSeries(id, builder.build());
}
}