aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomek Kaminski <tomasz.kaminski@nokia.com>2019-05-22 19:35:27 +0200
committerTomek Kaminski <tomasz.kaminski@nokia.com>2019-05-22 19:35:27 +0200
commit6e1a53af3af64578619763238649ed7b76865241 (patch)
tree4832803de7ac25fd8a4cc8203f83d0c4424a3df1
parenta26907336f4f04d754689b7750d0cd592f7057bb (diff)
Refactor tests for TopicResource class
Change-Id: Iff89df7e1b43ec13b200282a2d74882d95c3d84e Issue-ID: DMAAP-1209 Signed-off-by: Tomek Kaminski <tomasz.kaminski@nokia.com>
-rw-r--r--src/main/java/org/onap/dmaap/dbcapi/model/Topic.java22
-rw-r--r--src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java3
-rw-r--r--src/test/java/org/onap/dmaap/dbcapi/resources/TopicResourceTest.java481
3 files changed, 339 insertions, 167 deletions
diff --git a/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java b/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java
index cffe448..b715a24 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/model/Topic.java
@@ -20,6 +20,7 @@
package org.onap.dmaap.dbcapi.model;
+import com.google.common.base.Objects;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
@@ -330,4 +331,25 @@ public class Topic extends DmaapObject {
public byte[] getBytes() {
return toProvJSON().getBytes(StandardCharsets.UTF_8);
}
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Topic topic = (Topic) o;
+ return Objects.equal(fqtn, topic.fqtn) &&
+ Objects.equal(topicName, topic.topicName) &&
+ Objects.equal(tnxEnabled, topic.tnxEnabled) &&
+ Objects.equal(owner, topic.owner);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(fqtn, topicName, tnxEnabled, owner);
+ }
}
diff --git a/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java b/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java
index 3206cf7..01926b7 100644
--- a/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java
+++ b/src/main/java/org/onap/dmaap/dbcapi/resources/TopicResource.java
@@ -63,6 +63,7 @@ public class TopicResource extends BaseLoggingClass {
private TopicService mr_topicService = new TopicService();
private ResponseBuilder responseBuilder = new ResponseBuilder();
private RequiredChecker checker = new RequiredChecker();
+ static final String UNSUPPORTED_PUT_MSG = "Method /PUT not supported for /topics";
public TopicResource() {
DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
@@ -157,7 +158,7 @@ public class TopicResource extends BaseLoggingClass {
ApiError apiError = new ApiError();
apiError.setCode(Status.BAD_REQUEST.getStatusCode());
- apiError.setMessage( "Method /PUT not supported for /topics");
+ apiError.setMessage(UNSUPPORTED_PUT_MSG);
return responseBuilder.error(apiError);
}
diff --git a/src/test/java/org/onap/dmaap/dbcapi/resources/TopicResourceTest.java b/src/test/java/org/onap/dmaap/dbcapi/resources/TopicResourceTest.java
index 04c1bda..5b7c46d 100644
--- a/src/test/java/org/onap/dmaap/dbcapi/resources/TopicResourceTest.java
+++ b/src/test/java/org/onap/dmaap/dbcapi/resources/TopicResourceTest.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* org.onap.dmaap
* ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2019 Nokia Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,189 +19,338 @@
*/
package org.onap.dmaap.dbcapi.resources;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+import java.util.List;
import javax.ws.rs.client.Entity;
-import javax.ws.rs.core.Application;
+import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.eclipse.jetty.http.HttpStatus;
import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.JerseyTest;
+import org.junit.AfterClass;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.onap.dmaap.dbcapi.database.DatabaseClass;
+import org.onap.dmaap.dbcapi.model.ApiError;
import org.onap.dmaap.dbcapi.model.DcaeLocation;
-import org.onap.dmaap.dbcapi.model.Dmaap;
+import org.onap.dmaap.dbcapi.model.DmaapObject.DmaapObject_Status;
+import org.onap.dmaap.dbcapi.model.FqtnType;
import org.onap.dmaap.dbcapi.model.MR_Cluster;
+import org.onap.dmaap.dbcapi.model.ReplicationType;
import org.onap.dmaap.dbcapi.model.Topic;
import org.onap.dmaap.dbcapi.testframework.DmaapObjectFactory;
+public class TopicResourceTest {
-public class TopicResourceTest extends JerseyTest {
-
- static DmaapObjectFactory factory = new DmaapObjectFactory();
-
- @Override
- protected Application configure() {
-
- return new ResourceConfig()
- .register( TopicResource.class )
- .register( MR_ClusterResource.class )
- .register( DcaeLocationResource.class )
- .register( DmaapResource.class );
- }
-
- private static final String fmt = "%24s: %s%n";
-
- private boolean is2xx(int val ) {
- if ( val >= 200 && val < 300 ) {
- return true;
- }
- return false;
- }
-
- @Before
- public void preTest() throws Exception {
- DatabaseClass.clearDatabase();
- try {
-
- Dmaap dmaap = factory.genDmaap();
- Entity<Dmaap> reqEntity = Entity.entity( dmaap, MediaType.APPLICATION_JSON );
- Response resp = target( "dmaap").request().post( reqEntity, Response.class );
- System.out.println( "POST dmaap resp=" + resp.getStatus() );
- assertTrue( is2xx( resp.getStatus()) );
-
- }catch (Exception e ) {
- }
- try {
- DcaeLocation loc = factory.genDcaeLocation( "central" );
- Entity<DcaeLocation> reqEntity = Entity.entity( loc, MediaType.APPLICATION_JSON );
- Response resp = target( "dcaeLocations").request().post( reqEntity, Response.class );
- System.out.println( "POST dcaeLocation resp=" + resp.getStatus() + " " + resp.readEntity( String.class ));
- if ( resp.getStatus() != 409 ) {
- assertTrue( is2xx( resp.getStatus()) );
- }
- } catch (Exception e ) {
- }
- try {
- MR_Cluster cluster = factory.genMR_Cluster( "central" );
- Entity<MR_Cluster> reqEntity = Entity.entity( cluster, MediaType.APPLICATION_JSON );
- Response resp = target( "mr_clusters").request().post( reqEntity, Response.class );
- System.out.println( "POST MR_Cluster resp=" + resp.getStatus() + " " + resp.readEntity( String.class ) );
- if (resp.getStatus() != 409 ) {
- assertTrue( is2xx( resp.getStatus()) );
- }
- } catch (Exception e ) {
-
- }
-
- }
- /* may conflict with test framework!
- @After
- public void tearDown() throws Exception {
- }
-*/
-
-
- @Test
- public void GetTest() {
- Response resp = target( "topics").request().get( Response.class );
- System.out.println( "GET feed resp=" + resp.getStatus() );
-
- assertTrue( resp.getStatus() == 200 );
- }
-
-
- @Test
- public void PostTest() {
- Topic topic = factory.genSimpleTopic( "test1" );
- Entity<Topic> reqEntity = Entity.entity( topic, MediaType.APPLICATION_JSON );
- Response resp = target( "topics").request().post( reqEntity, Response.class );
- System.out.println( "POST Topic resp=" + resp.getStatus() + " " + resp.readEntity( String.class ) );
- if (resp.getStatus() != 409 ) {
- assertTrue( resp.getStatus() == 201);
- }
- resp = target( "topics").
- path( topic.genFqtn() ).request().get( Response.class );
- System.out.println( "GET Topic resp=" + resp.getStatus() + " " + resp.readEntity( String.class ) );
-
- assertTrue( resp.getStatus() == 200 );
-
- }
-
-
- @Test
- public void PutTest() {
-
- Topic topic = factory.genSimpleTopic( "test2" );
- Entity<Topic> reqEntity = Entity.entity( topic, MediaType.APPLICATION_JSON );
- Response resp = target( "topics").request().post( reqEntity, Response.class );
- String json = resp.readEntity(String.class);
- System.out.println( "POST Topic resp=" + resp.getStatus() + " " + json );
- if (resp.getStatus() != 409 ) {
- assertTrue( resp.getStatus() == 201);
- }
-
-
- // now change a field
- topic.setOwner( "newbody" );
- reqEntity = Entity.entity( topic, MediaType.APPLICATION_JSON );
-
- // update with incorrect key
- resp = target( "topics")
- .path( "org.onap.dmaap.notATopic" )
- .request()
- .put( reqEntity, Response.class );
-
- System.out.println( "PUT Topic resp=" + resp.getStatus() + " expect 400" );
- assertTrue( resp.getStatus() == 400 );
-
- // update with correct key
- topic = new Topic( json );
- reqEntity = Entity.entity( topic, MediaType.APPLICATION_JSON );
- resp = target( "topics")
- .path( topic.getFqtn())
- .request()
- .put( reqEntity, Response.class );
- System.out.println( "PUT Topic resp=" + resp.getStatus() + " " + resp.readEntity(String.class));
- assertTrue( resp.getStatus() == 400 ); // PUT is not allowed even with the right key
- }
-
- @Test
- public void DelTest() {
-
- Topic topic = factory.genSimpleTopic( "test3" );
- topic.setFqtn( "org.onap.unittest.test3" );
-
- Response resp = target( "topics").
- path( topic.getFqtn() ).
- request().
- delete( Response.class );
-
- // confirm topic is not there
- System.out.println( "DELETE Topic resp=" + resp.getStatus() + " " + resp.readEntity( String.class ) );
- assertTrue( resp.getStatus() == 404 );
-
- // now, add it
- Entity<Topic> reqEntity = Entity.entity( topic, MediaType.APPLICATION_JSON );
- resp = target( "topics").request().post( reqEntity, Response.class );
- String json = resp.readEntity( String.class );
- System.out.println( "POST Topic resp=" + resp.getStatus() + " " + json );
- assertTrue( resp.getStatus() == 201 );
-
- topic = new Topic( json );
- // now really delete it
- resp = target( "topics").
- path( topic.getFqtn()).
- request().
- delete( Response.class );
- System.out.println( "DELETE Topic resp=" + resp.getStatus() + " " + resp.readEntity( String.class ) );
- assertTrue( resp.getStatus() == 204 );
-
- }
+ private static final DmaapObjectFactory DMAAP_OBJECT_FACTORY = new DmaapObjectFactory();
+ private static final String TOPICS_TARGET = "topics";
+ private static FastJerseyTestContainer testContainer;
+ @BeforeClass
+ public static void setUpClass() throws Exception {
+ //TODO: init is still needed here to assure that dmaap is not null
+ DatabaseClass.getDmaap().init(DMAAP_OBJECT_FACTORY.genDmaap());
+
+ testContainer = new FastJerseyTestContainer(new ResourceConfig()
+ .register(TopicResource.class));
+ testContainer.init();
+ }
+
+ @AfterClass
+ public static void tearDownClass() throws Exception {
+ testContainer.destroy();
+ }
+
+ @Before
+ public void setUpClusterAndLocation() {
+ DatabaseClass.clearDatabase();
+
+ DcaeLocation centralDcaeLoc = DMAAP_OBJECT_FACTORY.genDcaeLocation("central");
+ centralDcaeLoc.setStatus(DmaapObject_Status.VALID);
+ DatabaseClass.getDcaeLocations().put(centralDcaeLoc.getDcaeLocationName(), centralDcaeLoc);
+
+ MR_Cluster cluster = DMAAP_OBJECT_FACTORY.genMR_Cluster("central");
+ cluster.setStatus(DmaapObject_Status.VALID);
+ DatabaseClass.getMr_clusters().put(cluster.getDcaeLocationName(), cluster);
+ }
+
+ @Test
+ public void getTopics_shouldReturnEmptyList_whenNoTopicsInDataBase() {
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().get(Response.class);
+
+ //then
+ assertEquals(HttpStatus.OK_200, resp.getStatus());
+ assertTrue(resp.hasEntity());
+
+ List<Topic> topics = resp.readEntity(new GenericType<List<Topic>>() {
+ });
+ assertTrue(topics.isEmpty());
+ }
+
+ @Test
+ public void getTopics_shouldReturnTopicsRegisteredInDataBase() {
+ //given
+ Topic topic1 = DMAAP_OBJECT_FACTORY.genSimpleTopic("testTopic1");
+ Topic topic2 = DMAAP_OBJECT_FACTORY.genSimpleTopic("testTopic2");
+ DatabaseClass.getTopics().put(topic1.getFqtn(), topic1);
+ DatabaseClass.getTopics().put(topic2.getFqtn(), topic2);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().get(Response.class);
+
+ //then
+ assertEquals(HttpStatus.OK_200, resp.getStatus());
+ assertTrue(resp.hasEntity());
+
+ List<Topic> topics = resp.readEntity(new GenericType<List<Topic>>() {
+ });
+ assertEquals(2, topics.size());
+ assertTrue(topics.contains(topic1));
+ assertTrue(topics.contains(topic2));
+ }
+
+ @Test
+ public void getTopics_shouldReturnValidationError_whenTopicNameIsInvalid() {
+ //given
+ String topicName = "wrong Topic Name";
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).path(topicName).request().get(Response.class);
+
+ //then
+ assertEquals(HttpStatus.BAD_REQUEST_400, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("topicName", errorObj.getFields());
+ }
+
+ @Test
+ public void getTopic_shouldReturnError_whenRequestedTopicNotFound() {
+ //given
+ String topicName = "notExistingTopic";
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).path(topicName).request().get(Response.class);
+
+ //then
+ assertEquals(HttpStatus.NOT_FOUND_404, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("fqtn", errorObj.getFields());
+ }
+
+ @Test
+ public void getTopic_shouldReturnTopicInformation_whenRequestedTopicExists() {
+ //given
+ Topic topic1 = DMAAP_OBJECT_FACTORY.genSimpleTopic("testTopic1");
+ DatabaseClass.getTopics().put(topic1.getFqtn(), topic1);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).path(topic1.getFqtn()).request().get(Response.class);
+
+ //then
+ assertEquals(HttpStatus.OK_200, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ Topic retrievedTopic = resp.readEntity(Topic.class);
+ assertEquals(topic1, retrievedTopic);
+ }
+
+
+ @Test
+ public void deleteTopic_shouldReturnError_whenTopicNotFound() {
+ //given
+ String topicName = "notExisting";
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).path(topicName).request().delete(Response.class);
+
+ //then
+ assertEquals(HttpStatus.NOT_FOUND_404, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("fqtn", errorObj.getFields());
+ }
+
+ @Test
+ public void deleteTopic_shouldDeleteTopicFromDataBase_whenFound() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("testTopic");
+ DatabaseClass.getTopics().put(topic.getFqtn(), topic);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).path(topic.getFqtn()).request().delete(Response.class);
+
+ //then
+ assertEquals(HttpStatus.NO_CONTENT_204, resp.getStatus());
+ assertFalse(resp.hasEntity());
+ }
+
+ @Test
+ public void addTopic_shouldReturnValidationError_whenTopicNameIsInvalid() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("wrong topic name with spaces");
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.BAD_REQUEST_400, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("topicName", errorObj.getFields());
+ }
+
+ @Test
+ public void addTopic_shouldReturnValidationError_whenTopicDescriptionNotProvided() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ topic.setTopicDescription(null);
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.BAD_REQUEST_400, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("topicDescription", errorObj.getFields());
+ }
+
+ @Test
+ public void addTopic_shouldReturnValidationError_whenTopicOwnerNotProvided() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ topic.setOwner(null);
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.BAD_REQUEST_400, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("owner", errorObj.getFields());
+ }
+
+ @Test
+ public void addTopic_shouldReturnError_whenTopicAlreadyExist() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ DatabaseClass.getTopics().put(topic.getFqtn(), topic);
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.CONFLICT_409, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("fqtn", errorObj.getFields());
+ }
+
+ @Test
+ public void addTopic_shouldReturnExistingTopic_whenTopicAlreadyExist_andUseExistingQueryParamUsed() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ DatabaseClass.getTopics().put(topic.getFqtn(), topic);
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).queryParam("useExisting", true).request()
+ .post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.CREATED_201, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ assertEquals(topic, resp.readEntity(Topic.class));
+ }
+
+ @Test
+ public void addTopic_shouldReturnError_whenAddingTopicWithInvalidGlobalMRclusterHostname() {
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ topic.setReplicationCase(ReplicationType.REPLICATION_CENTRAL_TO_GLOBAL);
+ topic.setGlobalMrURL("some.invalid.Glob$al.M@R.ur)l");
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.INTERNAL_SERVER_ERROR_500, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals("globalMrURL", errorObj.getFields());
+ }
+
+ @Test
+ public void addTopic_shouldAddTopicWithDefaultOptionalValues_whenNotProvided() {
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.CREATED_201, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ Topic createdTopic = resp.readEntity(Topic.class);
+ assertEquals(topic, createdTopic);
+ assertEquals(FqtnType.FQTN_LEGACY_FORMAT, createdTopic.getFqtnStyle());
+ assertEquals("2", createdTopic.getPartitionCount());
+ assertEquals("1", createdTopic.getReplicationCount());
+ }
+
+ @Test
+ public void addTopic_shouldAddTopicWithOriginalOptionalValues_whenProvided() {
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ topic.setFqtnStyle(FqtnType.FQTN_PROJECTID_FORMAT);
+ topic.setFqtn(topic.genFqtn());
+ topic.setPartitionCount("6");
+ topic.setReplicationCount("9");
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).request().post(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.CREATED_201, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ Topic createdTopic = resp.readEntity(Topic.class);
+ assertEquals(topic, createdTopic);
+ assertEquals(FqtnType.FQTN_PROJECTID_FORMAT, createdTopic.getFqtnStyle());
+ assertEquals("6", createdTopic.getPartitionCount());
+ assertEquals("9", createdTopic.getReplicationCount());
+ }
+
+ @Test
+ public void updateTopic_shouldReturnError_withInformationThatItIsNotSupported() {
+ //given
+ Topic topic = DMAAP_OBJECT_FACTORY.genSimpleTopic("topicName");
+ DatabaseClass.getTopics().put(topic.getFqtn(), topic);
+ topic.setOwner("newOwner");
+ Entity<Topic> requestedEntity = Entity.entity(topic, MediaType.APPLICATION_JSON);
+
+ //when
+ Response resp = testContainer.target(TOPICS_TARGET).path(topic.getFqtn()).request()
+ .put(requestedEntity, Response.class);
+
+ //then
+ assertEquals(HttpStatus.BAD_REQUEST_400, resp.getStatus());
+ assertTrue(resp.hasEntity());
+ ApiError errorObj = resp.readEntity(ApiError.class);
+ assertEquals(TopicResource.UNSUPPORTED_PUT_MSG, errorObj.getMessage());
+ }
}