提交 4e4d66b0 编写于 作者: A ainilife

add unit test for MetricAnalyzer

上级 ca70d003
......@@ -4,6 +4,7 @@ import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import com.dianping.cat.consumer.advanced.MetricAnalyzerTest;
import com.dianping.cat.consumer.browser.BrowserReportMergerTest;
import com.dianping.cat.consumer.cross.CrossAnalyzerTest;
import com.dianping.cat.consumer.cross.CrossInfoTest;
......@@ -21,6 +22,8 @@ import com.dianping.cat.consumer.sql.SqlReportMergerTest;
@RunWith(Suite.class)
@SuiteClasses({
MetricAnalyzerTest.class,
CrossInfoTest.class,
CrossReportMergerTest.class,
......
package com.dianping.cat.consumer.advanced;
import java.util.ArrayList;
import java.util.List;
import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import org.unidal.lookup.configuration.Component;
import com.dianping.cat.abtest.spi.internal.ABTestCodec;
import com.dianping.cat.advanced.metric.config.entity.MetricItemConfig;
import com.dianping.cat.analysis.MessageAnalyzer;
import com.dianping.cat.storage.BucketManager;
import com.dianping.cat.task.TaskManager;
import com.dianping.cat.task.TaskManagerTest.MockTaskManager;
public class Configurator extends AbstractResourceConfigurator {
public static void main(String[] args) {
generatePlexusComponentsXmlFile(new Configurator());
}
protected Class<?> getTestClass() {
return MetricAnalyzerTest.class;
}
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
final String ID = MetricAnalyzer.ID;
all.add(C(MetricConfigManager.class, ExtendedMetricConfigManager.class));
all.add(C(ProductLineConfigManager.class));
all.add(C(TaskManager.class, MockTaskManager.class));
all.add(C(MessageAnalyzer.class, ID, MetricAnalyzer.class) //
.req(BucketManager.class, MetricConfigManager.class)//
.req(ProductLineConfigManager.class, ABTestCodec.class, TaskManager.class));
return all;
}
public static class ExtendedMetricConfigManager extends MetricConfigManager {
private MetricItemConfig m_config = new MetricItemConfig();
@Override
public MetricItemConfig queryMetricItemConfig(String id) {
return m_config;
}
}
}
package com.dianping.cat.consumer.advanced;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.unidal.helper.Files;
import org.unidal.lookup.ComponentTestCase;
import com.dianping.cat.Constants;
import com.dianping.cat.analysis.MessageAnalyzer;
import com.dianping.cat.consumer.metric.model.entity.MetricReport;
import com.dianping.cat.message.internal.DefaultEvent;
import com.dianping.cat.message.internal.DefaultMetric;
import com.dianping.cat.message.internal.DefaultTransaction;
import com.dianping.cat.message.spi.MessageTree;
import com.dianping.cat.message.spi.internal.DefaultMessageTree;
public class MetricAnalyzerTest extends ComponentTestCase {
private long m_timestamp;
private MetricAnalyzer m_analyzer;
private String m_domain = "group";
private final int MINITE = 60 * 1000;
@Before
public void setUp() throws Exception {
super.setUp();
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
long currentTimeMillis = System.currentTimeMillis();
m_timestamp = currentTimeMillis - currentTimeMillis % (3600 * 1000);
@SuppressWarnings("unused")
MetricConfigManager manager = lookup(MetricConfigManager.class);
m_analyzer = (MetricAnalyzer) lookup(MessageAnalyzer.class, MetricAnalyzer.ID);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm");
Date date = sdf.parse("20120101 00:00");
m_analyzer.initialize(date.getTime(), Constants.HOUR, Constants.MINUTE * 5);
}
@Test
public void testProcess() throws Exception {
for (int i = 1; i <= 60; i++) {
MessageTree tree = generateMessageTree(i);
m_analyzer.process(tree);
}
MetricReport report = m_analyzer.getReport("Default");
String expected = Files.forIO().readFrom(getClass().getResourceAsStream("metric_analyzer.xml"), "utf-8");
Assert.assertEquals(expected.replaceAll("\r", ""), report.toString().replaceAll("\r", ""));
}
protected MessageTree generateMessageTree(int i) {
MessageTree tree = new DefaultMessageTree();
tree.setMessageId("" + i);
tree.setDomain(m_domain);
tree.setHostName("group001");
tree.setIpAddress("192.168.1.1");
DefaultTransaction t;
if (i % 2 == 0) {
t = new DefaultTransaction("URL", "TuanGouWeb", null);
t.setTimestamp(m_timestamp + i * MINITE);
DefaultEvent event = new DefaultEvent("URL", "ABTest");
event.addData("1=ab:A");
t.addChild(event);
} else {
t = new DefaultTransaction("Metric", "TuanGouWeb", null);
t.setTimestamp(m_timestamp + 1000);
DefaultMetric metric = new DefaultMetric("City", "/shanghai");
metric.setTimestamp(m_timestamp + i * MINITE);
metric.setStatus("C");
metric.addData("10");
t.addChild(metric);
}
t.complete();
t.setDurationInMillis(i * 2);
tree.setMessage(t);
return tree;
}
}
<plexus>
<components>
<component>
<role>com.dianping.cat.consumer.advanced.MetricConfigManager</role>
<implementation>com.dianping.cat.consumer.advanced.Configurator$ExtendedMetricConfigManager</implementation>
</component>
<component>
<role>com.dianping.cat.consumer.advanced.ProductLineConfigManager</role>
<implementation>com.dianping.cat.consumer.advanced.ProductLineConfigManager</implementation>
</component>
<component>
<role>com.dianping.cat.task.TaskManager</role>
<implementation>com.dianping.cat.task.TaskManagerTest$MockTaskManager</implementation>
</component>
<component>
<role>com.dianping.cat.analysis.MessageAnalyzer</role>
<role-hint>metric</role-hint>
<implementation>com.dianping.cat.consumer.advanced.MetricAnalyzer</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.storage.BucketManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.consumer.advanced.MetricConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.consumer.advanced.ProductLineConfigManager</role>
</requirement>
<requirement>
<role>com.dianping.cat.abtest.spi.internal.ABTestCodec</role>
</requirement>
<requirement>
<role>com.dianping.cat.task.TaskManager</role>
</requirement>
</requirements>
</component>
</components>
</plexus>
<?xml version="1.0" encoding="utf-8"?>
<metric-report product="Default" startTime="2012-01-01 00:00:00" endTime="2012-01-01 00:59:59">
<metric-item id="group:Metric:/shanghai" type="C">
<domain>group</domain>
<abtest run-id="-1">
<group name="">
<point id="1" count="10" sum="10.0" avg="1.0"/>
<point id="3" count="10" sum="10.0" avg="1.0"/>
<point id="5" count="10" sum="10.0" avg="1.0"/>
<point id="7" count="10" sum="10.0" avg="1.0"/>
<point id="9" count="10" sum="10.0" avg="1.0"/>
<point id="11" count="10" sum="10.0" avg="1.0"/>
<point id="13" count="10" sum="10.0" avg="1.0"/>
<point id="15" count="10" sum="10.0" avg="1.0"/>
<point id="17" count="10" sum="10.0" avg="1.0"/>
<point id="19" count="10" sum="10.0" avg="1.0"/>
<point id="21" count="10" sum="10.0" avg="1.0"/>
<point id="23" count="10" sum="10.0" avg="1.0"/>
<point id="25" count="10" sum="10.0" avg="1.0"/>
<point id="27" count="10" sum="10.0" avg="1.0"/>
<point id="29" count="10" sum="10.0" avg="1.0"/>
<point id="31" count="10" sum="10.0" avg="1.0"/>
<point id="33" count="10" sum="10.0" avg="1.0"/>
<point id="35" count="10" sum="10.0" avg="1.0"/>
<point id="37" count="10" sum="10.0" avg="1.0"/>
<point id="39" count="10" sum="10.0" avg="1.0"/>
<point id="41" count="10" sum="10.0" avg="1.0"/>
<point id="43" count="10" sum="10.0" avg="1.0"/>
<point id="45" count="10" sum="10.0" avg="1.0"/>
<point id="47" count="10" sum="10.0" avg="1.0"/>
<point id="49" count="10" sum="10.0" avg="1.0"/>
<point id="51" count="10" sum="10.0" avg="1.0"/>
<point id="53" count="10" sum="10.0" avg="1.0"/>
<point id="55" count="10" sum="10.0" avg="1.0"/>
<point id="57" count="10" sum="10.0" avg="1.0"/>
<point id="59" count="10" sum="10.0" avg="1.0"/>
</group>
</abtest>
</metric-item>
<metric-item id="group:URL:TuanGouWeb" type="C">
<domain>group</domain>
<abtest run-id="1">
<group name="A">
<point id="2" count="1" sum="4000.0" avg="4000.0"/>
<point id="4" count="1" sum="8000.0" avg="8000.0"/>
<point id="6" count="1" sum="12000.0" avg="12000.0"/>
<point id="8" count="1" sum="16000.0" avg="16000.0"/>
<point id="10" count="1" sum="20000.0" avg="20000.0"/>
<point id="12" count="1" sum="24000.0" avg="24000.0"/>
<point id="14" count="1" sum="28000.0" avg="28000.0"/>
<point id="16" count="1" sum="32000.0" avg="32000.0"/>
<point id="18" count="1" sum="36000.0" avg="36000.0"/>
<point id="20" count="1" sum="40000.0" avg="40000.0"/>
<point id="22" count="1" sum="44000.0" avg="44000.0"/>
<point id="24" count="1" sum="48000.0" avg="48000.0"/>
<point id="26" count="1" sum="52000.0" avg="52000.0"/>
<point id="28" count="1" sum="56000.0" avg="56000.0"/>
<point id="30" count="1" sum="60000.0" avg="60000.0"/>
<point id="32" count="1" sum="64000.0" avg="64000.0"/>
<point id="34" count="1" sum="68000.0" avg="68000.0"/>
<point id="36" count="1" sum="72000.0" avg="72000.0"/>
<point id="38" count="1" sum="76000.0" avg="76000.0"/>
<point id="40" count="1" sum="80000.0" avg="80000.0"/>
<point id="42" count="1" sum="84000.0" avg="84000.0"/>
<point id="44" count="1" sum="88000.0" avg="88000.0"/>
<point id="46" count="1" sum="92000.0" avg="92000.0"/>
<point id="48" count="1" sum="96000.0" avg="96000.0"/>
<point id="50" count="1" sum="100000.0" avg="100000.0"/>
<point id="52" count="1" sum="104000.0" avg="104000.0"/>
<point id="54" count="1" sum="108000.0" avg="108000.0"/>
<point id="56" count="1" sum="112000.0" avg="112000.0"/>
<point id="58" count="1" sum="116000.0" avg="116000.0"/>
<point id="0" count="1" sum="120000.0" avg="120000.0"/>
</group>
</abtest>
<abtest run-id="-1">
<group name="">
<point id="2" count="1" sum="4000.0" avg="4000.0"/>
<point id="4" count="1" sum="8000.0" avg="8000.0"/>
<point id="6" count="1" sum="12000.0" avg="12000.0"/>
<point id="8" count="1" sum="16000.0" avg="16000.0"/>
<point id="10" count="1" sum="20000.0" avg="20000.0"/>
<point id="12" count="1" sum="24000.0" avg="24000.0"/>
<point id="14" count="1" sum="28000.0" avg="28000.0"/>
<point id="16" count="1" sum="32000.0" avg="32000.0"/>
<point id="18" count="1" sum="36000.0" avg="36000.0"/>
<point id="20" count="1" sum="40000.0" avg="40000.0"/>
<point id="22" count="1" sum="44000.0" avg="44000.0"/>
<point id="24" count="1" sum="48000.0" avg="48000.0"/>
<point id="26" count="1" sum="52000.0" avg="52000.0"/>
<point id="28" count="1" sum="56000.0" avg="56000.0"/>
<point id="30" count="1" sum="60000.0" avg="60000.0"/>
<point id="32" count="1" sum="64000.0" avg="64000.0"/>
<point id="34" count="1" sum="68000.0" avg="68000.0"/>
<point id="36" count="1" sum="72000.0" avg="72000.0"/>
<point id="38" count="1" sum="76000.0" avg="76000.0"/>
<point id="40" count="1" sum="80000.0" avg="80000.0"/>
<point id="42" count="1" sum="84000.0" avg="84000.0"/>
<point id="44" count="1" sum="88000.0" avg="88000.0"/>
<point id="46" count="1" sum="92000.0" avg="92000.0"/>
<point id="48" count="1" sum="96000.0" avg="96000.0"/>
<point id="50" count="1" sum="100000.0" avg="100000.0"/>
<point id="52" count="1" sum="104000.0" avg="104000.0"/>
<point id="54" count="1" sum="108000.0" avg="108000.0"/>
<point id="56" count="1" sum="112000.0" avg="112000.0"/>
<point id="58" count="1" sum="116000.0" avg="116000.0"/>
<point id="0" count="1" sum="120000.0" avg="120000.0"/>
</group>
</abtest>
</metric-item>
</metric-report>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册