Jerseytest возвращает 500 внутренних серверов при выполнении юнит-тестов

Я новичок в Джерси, и я пытаюсь внести некоторые изменения в API, и это вызывает сбой модульных тестов, потому что он возвращает внутреннюю ошибку сервера HTTP 500, в то время как ожидалось 200. Если я проверяю тот же вызов API от Cli, он работает нормально, но тестовый блок не проходит. Я чувствую, что мне нужно внести некоторые изменения в работу тестера, но я действительно изо всех сил пытался найти выход. Ниже приводится функция тестера, в которой я использую Easymock.

Метод запроса, используемый для вызова, принадлежит к EmbeddedServerTestHarness.java.

https://github.com/confluentinc/rest-utils/blob/master/test/src/main/java/io/confluent/rest/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)

0 ответов

Другие вопросы по тегам