提交 330b501d 编写于 作者: J Jason Song

add consumer audit ut

上级 f26c514b
......@@ -32,6 +32,9 @@ public class ConsumerAuditUtil implements InitializingBean {
private BlockingQueue<ConsumerAudit> audits = Queues.newLinkedBlockingQueue(CONSUMER_AUDIT_MAX_SIZE);
private final ExecutorService auditExecutorService;
private final AtomicBoolean auditStopped;
private int BATCH_SIZE = 100;
private long BATCH_TIMEOUT = 5;
private TimeUnit BATCH_TIMEUNIT = TimeUnit.SECONDS;
@Autowired
private ConsumerService consumerService;
......@@ -66,7 +69,7 @@ public class ConsumerAuditUtil implements InitializingBean {
while (!auditStopped.get() && !Thread.currentThread().isInterrupted()) {
List<ConsumerAudit> toAudit = Lists.newArrayList();
try {
Queues.drain(audits, toAudit, 100, 5, TimeUnit.SECONDS);
Queues.drain(audits, toAudit, BATCH_SIZE, BATCH_TIMEOUT, BATCH_TIMEUNIT);
if (!toAudit.isEmpty()) {
consumerService.createConsumerAudits(toAudit);
}
......@@ -76,4 +79,8 @@ public class ConsumerAuditUtil implements InitializingBean {
}
});
}
public void stopAudit() {
auditStopped.set(true);
}
}
package com.ctrip.framework.apollo.openapi.util;
import com.google.common.util.concurrent.SettableFuture;
import com.ctrip.framework.apollo.openapi.entity.ConsumerAudit;
import com.ctrip.framework.apollo.openapi.service.ConsumerService;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import static org.junit.Assert.*;
import static org.mockito.Matchers.anyCollectionOf;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
/**
* @author Jason Song(song_s@ctrip.com)
*/
@RunWith(MockitoJUnitRunner.class)
public class ConsumerAuditUtilTest {
private ConsumerAuditUtil consumerAuditUtil;
@Mock
private ConsumerService consumerService;
@Mock
private HttpServletRequest request;
private long batchTimeout = 50;
private TimeUnit batchTimeUnit = TimeUnit.MILLISECONDS;
@Before
public void setUp() throws Exception {
consumerAuditUtil = new ConsumerAuditUtil();
ReflectionTestUtils.setField(consumerAuditUtil, "consumerService", consumerService);
ReflectionTestUtils.setField(consumerAuditUtil, "BATCH_TIMEOUT", batchTimeout);
ReflectionTestUtils.setField(consumerAuditUtil, "BATCH_TIMEUNIT", batchTimeUnit);
consumerAuditUtil.afterPropertiesSet();
}
@After
public void tearDown() throws Exception {
consumerAuditUtil.stopAudit();
}
@Test
public void audit() throws Exception {
long someConsumerId = 1;
String someUri = "someUri";
String someQuery = "someQuery";
String someMethod = "someMethod";
when(request.getRequestURI()).thenReturn(someUri);
when(request.getQueryString()).thenReturn(someQuery);
when(request.getMethod()).thenReturn(someMethod);
SettableFuture<List<ConsumerAudit>> result = SettableFuture.create();
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
result.set((List<ConsumerAudit>) args[0]);
return null;
}
}).when(consumerService).createConsumerAudits(anyCollectionOf(ConsumerAudit.class));
consumerAuditUtil.audit(request, someConsumerId);
List<ConsumerAudit> audits = result.get(batchTimeout * 5, batchTimeUnit);
assertEquals(1, audits.size());
ConsumerAudit audit = audits.get(0);
assertEquals(String.format("%s?%s", someUri, someQuery), audit.getUri());
assertEquals(someMethod, audit.getMethod());
assertEquals(someConsumerId, audit.getConsumerId());
}
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ package com.ctrip.framework.apollo.portal;
import com.ctrip.framework.apollo.openapi.filter.ConsumerAuthenticationFilterTest;
import com.ctrip.framework.apollo.openapi.service.ConsumerRolePermissionServiceTest;
import com.ctrip.framework.apollo.openapi.service.ConsumerServiceTest;
import com.ctrip.framework.apollo.openapi.util.ConsumerAuditUtilTest;
import com.ctrip.framework.apollo.openapi.util.ConsumerAuthUtilTest;
import com.ctrip.framework.apollo.portal.controller.ConsumerControllerTest;
import com.ctrip.framework.apollo.portal.service.AppNamespaceServiceTest;
......@@ -25,7 +26,7 @@ import org.junit.runners.Suite.SuiteClasses;
AppNamespaceServiceTest.class, RoleInitializationServiceTest.class, FileTextResolverTest.class,
RetryableRestTemplateTest.class, ConsumerRolePermissionServiceTest.class,
ConsumerAuthenticationFilterTest.class, ConsumerAuthUtilTest.class, ConsumerServiceTest.class,
ConsumerControllerTest.class
ConsumerControllerTest.class, ConsumerAuditUtilTest.class
})
public class AllTests {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册