提交 ba18e53c 编写于 作者: A ainilife

add unit test for DependencyAnalyzer

上级 c7644c24
package com.dianping.cat.consumer.dependency;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.lookup.annotation.Inject;
import org.unidal.lookup.configuration.AbstractResourceConfigurator;
import org.unidal.lookup.configuration.Component;
import com.dianping.cat.Constants;
import com.dianping.cat.DomainManager;
import com.dianping.cat.consumer.MockReportManager;
import com.dianping.cat.consumer.dependency.model.entity.DependencyReport;
import com.dianping.cat.service.ReportDelegate;
import com.dianping.cat.service.ReportManager;
public class Configurator extends AbstractResourceConfigurator {
public static void main(String[] args) {
generatePlexusComponentsXmlFile(new Configurator());
}
protected Class<?> getTestClass() {
return DependencyAnalyzerTest.class;
}
@Override
public List<Component> defineComponents() {
List<Component> all = new ArrayList<Component>();
final String ID = DependencyAnalyzer.ID;
all.add(C(ReportManager.class, ID, MockDependencyReportManager.class)//
.req(ReportDelegate.class, ID));
all.add(C(ReportDelegate.class, ID, ExtendedDependencyDelegate.class));
all.add(C(DomainManager.class, ExtendedDomainManager.class));
return all;
}
public static class ExtendedDependencyDelegate extends DependencyDelegate {
}
public static class MockDependencyReportManager extends MockReportManager<DependencyReport> {
private DependencyReport m_report;
@Inject
private ReportDelegate<DependencyReport> m_delegate;
@Override
public DependencyReport getHourlyReport(long startTime, String domain, boolean createIfNotExist) {
if (m_report == null) {
m_report = (DependencyReport) m_delegate.makeReport(domain, startTime, Constants.HOUR);
}
return m_report;
}
}
public static class ExtendedDomainManager extends DomainManager {
@Override
public void initialize() throws InitializationException{
}
@Override
public String queryDomainByIp(String ip) {
return "Cat-CatTest";
}
}
}
package com.dianping.cat.consumer.dependency;
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.dependency.model.entity.DependencyReport;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.internal.DefaultTransaction;
import com.dianping.cat.message.spi.MessageTree;
import com.dianping.cat.message.spi.internal.DefaultMessageTree;
public class DependencyAnalyzerTest extends ComponentTestCase {
private long m_timestamp;
private DependencyAnalyzer m_analyzer;
private String m_domain = "group";
@Before
public void setUp() throws Exception {
super.setUp();
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
long currentTimeMillis = System.currentTimeMillis();
m_timestamp = currentTimeMillis - currentTimeMillis % (3600 * 1000);
m_analyzer = (DependencyAnalyzer) lookup(MessageAnalyzer.class, DependencyAnalyzer.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 <= 100; i++) {
MessageTree tree = generateMessageTree(i);
m_analyzer.process(tree);
}
DependencyReport report = m_analyzer.getReport(m_domain);
String expected = Files.forIO().readFrom(getClass().getResourceAsStream("dependency_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;
DefaultTransaction event;
if (i % 3 == 0) {
t = new DefaultTransaction("URL", "Cat-Test-Call", null);
event = new DefaultTransaction("Call", "192.168.1.0:3000:class:method1", null);
} else if (i % 3 == 1) {
t = new DefaultTransaction("PigeonService", "Cat-Test-Service", null);
event = new DefaultTransaction("SQL", "192.168.1.2:3000:class:method2", null);
} else {
t = new DefaultTransaction("Service", "Cat-Test-Service", null);
event = new DefaultTransaction("Cache.CatTest", "192.168.1.2:3000:class:method2", null);
}
event.setTimestamp(m_timestamp + 5 * 60 * 1000);
event.setDurationInMillis(i);
event.setStatus(Message.SUCCESS);
t.addChild(event);
t.complete();
t.setDurationInMillis(i * 2);
t.setTimestamp(m_timestamp + 1000);
tree.setMessage(t);
return tree;
}
}
<plexus>
<components>
<component>
<role>com.dianping.cat.service.ReportManager</role>
<role-hint>dependency</role-hint>
<implementation>com.dianping.cat.consumer.dependency.Configurator$MockDependencyReportManager</implementation>
<requirements>
<requirement>
<role>com.dianping.cat.service.ReportDelegate</role>
<role-hint>dependency</role-hint>
</requirement>
</requirements>
</component>
<component>
<role>com.dianping.cat.service.ReportDelegate</role>
<role-hint>dependency</role-hint>
<implementation>com.dianping.cat.consumer.dependency.Configurator$ExtendedDependencyDelegate</implementation>
</component>
<component>
<role>com.dianping.cat.DomainManager</role>
<implementation>com.dianping.cat.consumer.dependency.Configurator$ExtendedDomainManager</implementation>
</component>
</components>
</plexus>
<?xml version="1.0" encoding="utf-8"?>
<dependency-report domain="group" startTime="2012-01-01 00:00:00" endTime="2012-01-01 00:59:59">
<domainName>group</domainName>
<segment id="0">
<index name="PigeonService" total-count="34" error-count="34" sum="3434.00" avg="101.00"/>
<index name="Service" total-count="33" error-count="33" sum="3300.00" avg="100.00"/>
<index name="URL" total-count="33" error-count="33" sum="3366.00" avg="102.00"/>
</segment>
<segment id="5">
<index name="SQL" total-count="34" error-count="0" sum="1717.00" avg="50.50"/>
<index name="Cache.CatTest" total-count="33" error-count="0" sum="1650.00" avg="50.00"/>
<index name="Call" total-count="33" error-count="0" sum="1683.00" avg="51.00"/>
<dependency type="Cache" target="Cache.CatTest" total-count="33" avg="50.00" error-count="0" key="Cache:Cache.CatTest" sum="1650.00"/>
<dependency type="PigeonCall" target="Cat-CatTest" total-count="33" avg="51.00" error-count="0" key="PigeonCall:Cat-CatTest" sum="1683.00"/>
</segment>
</dependency-report>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册