/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.tsdr.persistence.cassandra;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import org.junit.*;
import org.mockito.Mockito;
import org.opendaylight.tsdr.spi.util.FormatUtil;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.log.data.rev160325.storetsdrlogrecord.input.TSDRLogRecord;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.log.data.rev160325.storetsdrlogrecord.input.TSDRLogRecordBuilder;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.metric.data.rev160325.storetsdrmetricrecord.input.TSDRMetricRecord;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.metric.data.rev160325.storetsdrmetricrecord.input.TSDRMetricRecordBuilder;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.rev150219.DataCategory;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.rev150219.tsdrrecord.RecordKeys;
import org.opendaylight.yang.gen.v1.opendaylight.tsdr.rev150219.tsdrrecord.RecordKeysBuilder;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:saichler@gmail.com">Sharon Aicler</a>
* Created by saichler on 12/16/15.
*/
public class CassandraStoreTest {
private Cluster cluster = Mockito.mock(Cluster.class);
private Session session = Mockito.mock(Session.class);
private CassandraStore store = null;
private ResultSet resultSet = Mockito.mock(ResultSet.class);
private Row row = Mockito.mock(Row.class);
private List<Row> rows = new ArrayList<>();
@Before
public void before(){
store = new CassandraStore(session,cluster);
Mockito.when(session.execute(Mockito.anyString())).thenReturn(resultSet);
Mockito.when(resultSet.all()).thenReturn(rows);
Mockito.when(row.getString("KeyPath")).thenReturn(FormatUtil.getTSDRMetricKey(createMetricRecord()));
Mockito.when(row.getDouble("value")).thenReturn(11d);
Mockito.when(row.getString("value")).thenReturn(createLogRecord().getRecordFullText());
store.startBatch();
if(rows.isEmpty()){
rows.add(row);
}
}
@After
public void after(){
store.shutdown();
File dir = new File("./tsdr");
File[] files = dir.listFiles();
for(File f:files){
f.delete();
}
dir.delete();
}
@AfterClass
public static void afterClass(){
File dir = new File("./tsdr");
if(!dir.exists()) return;
File[] files = dir.listFiles();
for(File f:files){
f.delete();
}
dir.delete();
}
public static TSDRMetricRecord createMetricRecord(){
TSDRMetricRecordBuilder b = new TSDRMetricRecordBuilder();
b.setNodeID("Test");
b.setTimeStamp(System.currentTimeMillis());
b.setMetricName("Test");
b.setMetricValue(new BigDecimal(11D));
b.setTSDRDataCategory(DataCategory.EXTERNAL);
List<RecordKeys> recs = new ArrayList<>();
RecordKeysBuilder rb = new RecordKeysBuilder();
rb.setKeyValue("Test1");
rb.setKeyName("Test2");
recs.add(rb.build());
b.setRecordKeys(recs);
return b.build();
}
public static TSDRLogRecord createLogRecord(){
TSDRLogRecordBuilder b = new TSDRLogRecordBuilder();
b.setNodeID("Test");
b.setTimeStamp(System.currentTimeMillis());
b.setTSDRDataCategory(DataCategory.EXTERNAL);
b.setRecordFullText("Some syslog text");
List<RecordKeys> recs = new ArrayList<>();
RecordKeysBuilder rb = new RecordKeysBuilder();
rb.setKeyValue("Test1");
rb.setKeyName("Test2");
recs.add(rb.build());
b.setRecordKeys(recs);
return b.build();
}
@Test
public void testCreateTables(){
store.createTSDRTables();
Mockito.verify(session,Mockito.atLeast(2)).execute(Mockito.anyString());
}
@Test
public void testStoreTSDRMetric(){
store.store(createMetricRecord());
Assert.assertEquals(1,store.getBatch().size());
store.shutdown();
Mockito.verify(session,Mockito.atLeast(1)).close();
}
@Test
public void testStoreTSDRLog(){
store.store(createLogRecord());
Assert.assertEquals(1,store.getBatch().size());
store.shutdown();
Mockito.verify(session,Mockito.atLeast(1)).close();
}
@Test
public void testGetMetricRecords(){
TSDRMetricRecord rec = createMetricRecord();
String key = FormatUtil.getTSDRMetricKey(rec);
store.store(rec);
List<TSDRMetricRecord> list = store.getTSDRMetricRecords(key,0L,Long.MAX_VALUE,10);
Assert.assertNotNull(list);
Assert.assertTrue(list.size()==1);
Assert.assertEquals(rec.getMetricValue(),list.get(0).getMetricValue());
}
@Test
public void testGetMetricRecordsJob(){
TSDRMetricRecord rec = createMetricRecord();
String key = "[NID=Test]";
store.store(rec);
List<TSDRMetricRecord> list = store.getTSDRMetricRecords(key,0L,Long.MAX_VALUE,10);
Assert.assertNotNull(list);
Assert.assertTrue(list.size()==1);
Assert.assertEquals(rec.getMetricValue(),list.get(0).getMetricValue());
}
@Test
public void testGetLogRecords(){
TSDRLogRecord rec = createLogRecord();
String key = FormatUtil.getTSDRLogKey(rec);
store.store(rec);
List<TSDRLogRecord> list = store.getTSDRLogRecords(key,0L,Long.MAX_VALUE,10);
Assert.assertNotNull(list);
Assert.assertTrue(list.size()==1);
Assert.assertEquals(rec.getRecordFullText(),list.get(0).getRecordFullText());
}
@Test
public void testGetLogRecordsJob(){
TSDRLogRecord rec = createLogRecord();
String key = "[NID=Test]";
store.store(rec);
List<TSDRLogRecord> list = store.getTSDRLogRecords(key,0L,Long.MAX_VALUE,10);
Assert.assertNotNull(list);
Assert.assertTrue(list.size()==1);
Assert.assertEquals(rec.getRecordFullText(),list.get(0).getRecordFullText());
}
@Test
public void testPurge(){
store.store(createMetricRecord());
Assert.assertEquals(1,store.getBatch().size());
store.purge(DataCategory.EXTERNAL,0L);
Mockito.verify(session,Mockito.atLeast(1)).execute(Mockito.anyString());
}
@Test
public void testGetSession(){
CassandraStore s = new CassandraStore();
}
}