infrastructure-tests/src/test/java/org/gcube/accounting/analytics/persistence/couchdb/AccountingPersistenceQueryC...

119 lines
3.9 KiB
Java

/**
*
*/
package org.gcube.accounting.analytics.persistence.couchdb;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.SortedSet;
import org.gcube.accounting.analytics.Filter;
import org.gcube.accounting.analytics.Info;
import org.gcube.accounting.analytics.NumberedFilter;
import org.gcube.accounting.analytics.TemporalConstraint;
import org.gcube.accounting.analytics.TemporalConstraint.AggregationMode;
import org.gcube.accounting.analytics.persistence.AccountingPersistenceBackendQueryConfiguration;
import org.gcube.accounting.datamodel.aggregation.AggregatedServiceUsageRecord;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.testutility.ScopedTest;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR) http://www.lucafrosini.com/
*
*/
public class AccountingPersistenceQueryCouchDBTest extends ScopedTest {
private static Logger logger = LoggerFactory.getLogger(AccountingPersistenceQueryCouchDBTest.class);
protected AccountingPersistenceQueryCouchDB accountingPersistenceQueryCouchDB;
@Before
public void before() throws Exception{
super.before();
ScopeProvider.instance.set("/gcube");
AccountingPersistenceBackendQueryConfiguration configuration = new
AccountingPersistenceBackendQueryConfiguration(AccountingPersistenceQueryCouchDB.class);
configuration.addProperty(AccountingPersistenceQueryCouchDB.DB_NAME, "my_couchapp_test");
String url = configuration.getProperty(AccountingPersistenceQueryCouchDB.URL_PROPERTY_KEY);
url = url.replace("accounting-d-d4s.d4science.org", "couchdb01-d-d4s.d4science.org:5984");
configuration.addProperty(AccountingPersistenceQueryCouchDB.URL_PROPERTY_KEY, url);
accountingPersistenceQueryCouchDB = new AccountingPersistenceQueryCouchDB();
accountingPersistenceQueryCouchDB.prepareConnection(configuration);
}
public static <V> String printCalendarMap(Map<Calendar, V> map){
StringBuilder stringBuilder = new StringBuilder();
for(Calendar calendar : map.keySet()){
V v = map.get(calendar);
stringBuilder.append(v.toString());
stringBuilder.append("\n");
}
return stringBuilder.toString();
}
public static <T, V> String printMap(Map<T, ? extends Map<Calendar, V>> map){
StringBuilder stringBuilder = new StringBuilder();
for(T t : map.keySet()) {
stringBuilder.append(t.toString());
stringBuilder.append("\n");
Map<Calendar, V> innerMap = map.get(t);
stringBuilder.append(printCalendarMap(innerMap));
stringBuilder.append("\n");
}
return stringBuilder.toString();
}
@Test
public void testTop() throws Exception {
Calendar startTime = Calendar.getInstance();
startTime.set(2015, Calendar.OCTOBER, 9);
Calendar endTime = Calendar.getInstance();
endTime.set(2015, Calendar.OCTOBER, 16);
List<Filter> filters = new ArrayList<Filter>();
Filter filter = new Filter("consumerId", null);
filters.add(filter);
TemporalConstraint temporalConstraint =
new TemporalConstraint(startTime.getTimeInMillis(),
endTime.getTimeInMillis(), AggregationMode.DAILY);
logger.trace("\n\n");
Class<AggregatedServiceUsageRecord> clz =
AggregatedServiceUsageRecord.class;
Map<NumberedFilter, SortedMap<Calendar, Info>> map =
accountingPersistenceQueryCouchDB.getTopValues(clz,
temporalConstraint, filters);
logger.debug("Top Query Results :\n{}", printMap(map));
SortedSet<NumberedFilter> possibleValues =
accountingPersistenceQueryCouchDB.getNextPossibleValues(clz,
temporalConstraint, filters);
logger.debug("Possibile Values :\n{}", possibleValues);
filter.setValue("UNKNOWN");
SortedMap<Calendar, Info> timeSeries =
accountingPersistenceQueryCouchDB.getTimeSeries(clz,
temporalConstraint, filters);
logger.debug("Time Series for {}:\n{}", filter,
printCalendarMap(timeSeries));
}
}