package metrics4Asterisk.parse;
import metrics4Asterisk.metrics.AgentMetric;
import metrics4Asterisk.util.DateMaker;
import com.csvreader.CsvReader;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
import metrics4Asterisk.util.Constants;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author lstine
*/
public class AgentLogParserTest extends TestCase {
Set<String> agentNames;
Set<String> queueNames;
@Before
@Override
public void setUp() {
agentNames = new HashSet<String>(2);
agentNames.add("Local/6005@internal/n");
queueNames = new HashSet<String>(2);
queueNames.add("superqueue");
queueNames.add("NONE");
}
@After
@Override
public void tearDown() {
agentNames = null;
queueNames = null;
}
/**
* Test one login with all events inside of the date range
*/
@Test
public void test6005Basic() throws Exception {
System.out.println("test6005Basic");
InputStream fstream = null;
BufferedReader in = null;
CsvReader reader = null;
try {
fstream = this.getClass().getClassLoader().getResourceAsStream("agent6005mini");
in = new BufferedReader(new InputStreamReader(fstream));
reader = new CsvReader(in, Constants.ASTERISK_LOG_SPERATOR);
Calendar cFromDate = DateMaker.makeFromString("06/15/2008");
Calendar cToDate = DateMaker.makeFromLong(1213786805000L);
LogParser<LogMapper<AgentMetric>> agentLogParser = new LogParser<LogMapper<AgentMetric>>();
AgentMapper mapper = new AgentMapper(agentNames, queueNames);
agentLogParser.setLogMapper(mapper);
agentLogParser.parse(cFromDate, cToDate, reader);
LogMapper<AgentMetric> agentLoginMap = agentLogParser.getLogMapper();
AgentMetric agentMetric = agentLoginMap.getMap().get("Local/6005@internal/n");
System.out.println("A agent is " + agentMetric);
assertEquals(9414000, agentMetric.getTimeInQueue());
assertEquals(425000, agentMetric.getTimeInPause());
assertEquals("4.5", agentMetric.getPercentPaused());
//there should be no warnings
assertEquals(0, mapper.getWarnings().size());
} catch (Exception e) {
fail("no exceptions are expected");
} finally {
try {reader.close();} catch (Exception e) {}
try {in.close();} catch (Exception e) {}
try {fstream.close();} catch (Exception e) {}
}
}
/**
* A test with an agent's login to queue and pause events prior to the date range
* @throws Exception
*/
@Test
public void testQueueEdgeCaseFront() throws Exception {
System.out.println("testQueueEdgeCaseFront");
InputStream fstream = null;
BufferedReader in = null;
CsvReader reader = null;
try {
fstream = this.getClass().getClassLoader().getResourceAsStream("agent6005mini");
in = new BufferedReader(new InputStreamReader(fstream));
reader = new CsvReader(in, Constants.ASTERISK_LOG_SPERATOR);
Calendar cFromDate = DateMaker.makeFromLong(1213782808000L);
Calendar cToDate = DateMaker.makeFromLong(1213786810000L);
LogParser<LogMapper<AgentMetric>> agentLogParser = new LogParser<LogMapper<AgentMetric>>();
AgentMapper mapper = new AgentMapper(agentNames, queueNames);
agentLogParser.setLogMapper(mapper);
agentLogParser.parse(cFromDate, cToDate, reader);
LogMapper<AgentMetric> agentLoginMap = agentLogParser.getLogMapper();
AgentMetric agentMetric = agentLoginMap.getMap().get("Local/6005@internal/n");
System.out.println("A agent is " + agentMetric);
assertEquals(0, agentMetric.getTimeInQueue());
assertEquals(0, agentMetric.getTimeInPause());
assertEquals("0", agentMetric.getPercentPaused());
} catch (Exception e) {
fail("no exceptions are expected");
} finally {
try {reader.close();} catch (Exception e) {}
try {in.close();} catch (Exception e) {}
try {fstream.close();} catch (Exception e) {}
}
}
/**
* A test with an agent's login to queue events after to the date range
* @throws Exception
*/
@Test
public void testQueueEdgeCaseEnd() throws Exception {
System.out.println("testQueueEdgeCaseEnd");
InputStream fstream = null;
BufferedReader in = null;
CsvReader reader = null;
try {
fstream = this.getClass().getClassLoader().getResourceAsStream("agent6005mini");
in = new BufferedReader(new InputStreamReader(fstream));
reader = new CsvReader(in, Constants.ASTERISK_LOG_SPERATOR);
Calendar cFromDate = DateMaker.makeFromString("06/15/2008");
Calendar cToDate = DateMaker.makeFromLong(1213785879000L);
LogParser<LogMapper<AgentMetric>> agentLogParser = new LogParser<LogMapper<AgentMetric>>();
AgentMapper mapper = new AgentMapper(agentNames, queueNames);
agentLogParser.setLogMapper(mapper);
agentLogParser.parse(cFromDate, cToDate, reader);
LogMapper<AgentMetric> agentLoginMap = agentLogParser.getLogMapper();
AgentMetric agentMetric = agentLoginMap.getMap().get("Local/6005@internal/n");
System.out.println("A agent is " + agentMetric);
assertEquals(0, agentMetric.getTimeInQueue());
assertEquals(425000, agentMetric.getTimeInPause());
assertEquals("0", agentMetric.getPercentPaused());
} catch (Exception e) {
fail("no exceptions are expected");
} finally {
try {reader.close();} catch (Exception e) {}
try {in.close();} catch (Exception e) {}
try {fstream.close();} catch (Exception e) {}
}
}
/**
* A test with an agent's log out of queue while paused
* @throws Exception
*/
@Test
public void testQueueEdgeCaseNoUnPause() throws Exception {
System.out.println("testQueueEdgeCaseNoUnPause");
InputStream fstream = null;
BufferedReader in = null;
CsvReader reader = null;
try {
fstream = this.getClass().getClassLoader().getResourceAsStream("agent6005mini");
in = new BufferedReader(new InputStreamReader(fstream));
reader = new CsvReader(in, Constants.ASTERISK_LOG_SPERATOR);
Calendar cFromDate = DateMaker.makeFromLong(1213785879000L);
Calendar cToDate = DateMaker.makeFromLong(1213787000000L);
LogParser<LogMapper<AgentMetric>> agentLogParser = new LogParser<LogMapper<AgentMetric>>();
AgentMapper mapper = new AgentMapper(agentNames, queueNames);
agentLogParser.setLogMapper(mapper);
agentLogParser.parse(cFromDate, cToDate, reader);
LogMapper<AgentMetric> agentLoginMap = agentLogParser.getLogMapper();
AgentMetric agentMetric = agentLoginMap.getMap().get("Local/6005@internal/n");
System.out.println("A agent is " + agentMetric);
assertEquals(80000, agentMetric.getTimeInQueue());
assertEquals(60000, agentMetric.getTimeInPause());
assertEquals("75", agentMetric.getPercentPaused());
} catch (Exception e) {
fail("no exceptions are expected");
} finally {
try {reader.close();} catch (Exception e) {}
try {in.close();} catch (Exception e) {}
try {fstream.close();} catch (Exception e) {}
}
}
}