Jerseytest возвращает 500 внутренних серверов при выполнении юнит-тестов
Я новичок в Джерси, и я пытаюсь внести некоторые изменения в API, и это вызывает сбой модульных тестов, потому что он возвращает внутреннюю ошибку сервера HTTP 500, в то время как ожидалось 200. Если я проверяю тот же вызов API от Cli, он работает нормально, но тестовый блок не проходит. Я чувствую, что мне нужно внести некоторые изменения в работу тестера, но я действительно изо всех сил пытался найти выход. Ниже приводится функция тестера, в которой я использую Easymock.
Метод запроса, используемый для вызова, принадлежит к EmbeddedServerTestHarness.java.
@Test
public void testGetTopic() {
Properties nonEmptyConfig = new Properties();
nonEmptyConfig.setProperty("cleanup.policy", "delete");
final List<Partition> partitions1 = Arrays.asList(
new Partition(0, 0, Arrays.asList(
new PartitionReplica(0, true, true),
new PartitionReplica(1, false, false)
)),
new Partition(1, 1, Arrays.asList(
new PartitionReplica(0, false, true),
new PartitionReplica(1, true, true)
))
);
final List<Partition> partitions2 = Arrays.asList(
new Partition(0, 0, Arrays.asList(
new PartitionReplica(0, true, true),
new PartitionReplica(1, false, false)
))
);
Topic topic1 = new Topic("topic1", new Properties(), partitions1);
Topic topic2 = new Topic("topic2", nonEmptyConfig, partitions2);
System.out.println("This is get topic request: -- ");
for (TestUtils.RequestMediaType mediatype : TestUtils.V1_ACCEPT_MEDIATYPES) {
EasyMock.expect(mdObserver.getTopic("topic1"))
.andReturn(topic1);
EasyMock.expect(mdObserver.getTopic("topic2"))
.andReturn(topic2);
EasyMock.replay(mdObserver);
Response response1 = request("/mr/v1/topic/topic1", mediatype.header).get(); // <--- request method belongs to EmbeddedServerTestHarness.java
System.out.println("This is get topic: -- ");
assertOKResponse(response1, mediatype.expected);
final Topic topicResponse1 = response1.readEntity(new GenericType<Topic>() {
});
assertEquals(topic1, topicResponse1);
Response response2 = request("/mr/v1/topic/topic2", mediatype.header).get();
final Topic topicResponse2 = response2.readEntity(new GenericType<Topic>() {
});
assertEquals(topic2, topicResponse2);
EasyMock.verify(mdObserver);
EasyMock.reset(mdObserver);
}
}
Ниже приведена функция, которая проходит тестирование, и в случае модульного тестирования происходит сбой с внутренней ошибкой 500.
@GET
@Path("/{topic}")
@PerformanceMetric("ctxtopic.get")
public Topic getTopic(@PathParam("topic") String topicName) {
Date now = new java.util.Date();
if (! ctx.getSecurityRestrictions().isServiceAllowed(uri, httpHeaders, "Describe", "Topic", topicName))
throw Errors.serviceBlockedException(ctx,httpServletResponse,httpServletRequest,now);
Topic topic = ctx.getMetadataObserver().getTopic(topicName);
if (topic == null) {
throw Errors.topicNotFoundException(ctx,httpServletResponse,httpServletRequest,now);
}
httpServletResponse.setHeader("Header","Test"); // custom header
httpServletResponse.setStatus(200);
return topic;
}
Однако, если я не добавляю пользовательский заголовок и статус, он работает, то есть возвращает 200 успехов:
@GET
@Path("/{topic}")
@PerformanceMetric("ctxtopic.get")
public Topic getTopic(@PathParam("topic") String topicName) {
Date now = new java.util.Date();
if (! ctx.getSecurityRestrictions().isServiceAllowed(uri, httpHeaders, "Describe", "Topic", topicName))
throw Errors.serviceBlockedException(ctx,httpServletResponse,httpServletRequest,now);
Topic topic = ctx.getMetadataObserver().getTopic(topicName);
if (topic == null) {
throw Errors.topicNotFoundException(ctx,httpServletResponse,httpServletRequest,now);
}
return topic;
}
Ошибка как ниже:
testGetTopic(io.confluent.kafkarest.unit.TopicResourceTest) Time elapsed: 0.387 sec <<< FAILURE!
java.lang.AssertionError: expected:<200> but was:<500>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:834)
at org.junit.Assert.assertEquals(Assert.java:645)
at org.junit.Assert.assertEquals(Assert.java:631)
at io.confluent.kafkarest.TestUtils.assertOKResponse(TestUtils.java:126)
at io.confluent.kafkarest.unit.TopicResourceTest.testGetTopic(TopicResourceTest.java:121)