/*
* Copyright 2014, The OpenNMS Group
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.opennms.newts.persistence.cassandra;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.opennms.newts.api.MetricType.GAUGE;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
import org.opennms.newts.api.Context;
import org.opennms.newts.api.Duration;
import org.opennms.newts.api.Gauge;
import org.opennms.newts.api.Resource;
import org.opennms.newts.api.Sample;
import org.opennms.newts.api.Results.Row;
import org.opennms.newts.api.Timestamp;
import com.datastax.driver.core.ConsistencyLevel;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
public class InsertSelectSamplesITCase extends NewtsSampleRepositoryTestCase {
@Test
public void test() {
List<Sample> samples = Lists.newArrayList();
int rows = 10, cols = 3;
Resource resource = new Resource("r");
for (int i = 1; i <= rows; i++) {
Timestamp ts = Timestamp.fromEpochMillis(i * 1000);
for (int j = 1; j <= cols; j++) {
samples.add(new Sample(ts, resource, "m" + j, GAUGE, new Gauge((i + 1) * j)));
}
}
// Override the shard period to ensure we test query concurrency
m_contextConfigurations.addContextConfig(Context.DEFAULT_CONTEXT,
Duration.seconds(1), ConsistencyLevel.ALL, ConsistencyLevel.ALL);
getRepository().insert(samples);
Timestamp start = Timestamp.fromEpochMillis(0), end = Timestamp.fromEpochMillis(rows * 1000);
Iterator<Row<Sample>> results = getRepository().select(Context.DEFAULT_CONTEXT, resource,
Optional.of(start), Optional.of(end)).iterator();
for (int i = 1; i <= rows; i++) {
assertTrue("Insufficient number of results", results.hasNext());
Timestamp timestamp = Timestamp.fromEpochMillis(i * 1000);
Row<Sample> row = results.next();
assertEquals("Unexpected timestamp for row " + i, timestamp, row.getTimestamp());
assertEquals("Unexpected resource name", resource, row.getResource());
for (int j = 1; j <= cols; j++) {
assertNotNull("Missing sample: m" + j, row.getElement("m" + j));
Sample sample = row.getElement("m" + j);
assertEquals("Unexpected timestamp for metric m" + j, timestamp, sample.getTimestamp());
assertEquals("Unexpected resource name", resource, sample.getResource());
assertEquals("Unexpected metric name", "m" + j, sample.getName());
assertEquals("Unexpected metric type", GAUGE, sample.getType());
assertEquals((double) ((i + 1) * j), sample.getValue().doubleValue(), 0.0d);
}
}
}
}