Improve coverage for Intents REST API test
Also, added @Provider annotation to all exception mappers so
the Jersey unit test framework will apply them during
testing.
Change-Id: Ifd9237de2e159cd97b64dcb9bde4a66f14bd0dfc
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/BadRequestMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/BadRequestMapper.java
index fcef3b1..89b1368 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/BadRequestMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/BadRequestMapper.java
@@ -16,11 +16,14 @@
package org.onosproject.rest.exceptions;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
+
import java.io.IOException;
/**
* Mapper for IO exceptions to the BAD_REQUEST response code.
*/
+@Provider
public class BadRequestMapper extends AbstractMapper<IOException> {
@Override
protected Response.Status responseStatus() {
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/EntityNotFoundMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/EntityNotFoundMapper.java
index 63e24b9..9e42a56 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/EntityNotFoundMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/EntityNotFoundMapper.java
@@ -18,10 +18,12 @@
import org.onlab.util.ItemNotFoundException;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
/**
* Mapper for service not found exceptions to the NOT_FOUND response code.
*/
+@Provider
public class EntityNotFoundMapper extends AbstractMapper<ItemNotFoundException> {
@Override
protected Response.Status responseStatus() {
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalArgumentExceptionMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalArgumentExceptionMapper.java
index 6a381f7..2d7a1ea 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalArgumentExceptionMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalArgumentExceptionMapper.java
@@ -16,10 +16,12 @@
package org.onosproject.rest.exceptions;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
/**
* Mapper for illegal argument exceptions to the BAD_REQUEST response code.
*/
+@Provider
public class IllegalArgumentExceptionMapper extends AbstractMapper<IllegalArgumentException> {
@Override
protected Response.Status responseStatus() {
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalStateExceptionMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalStateExceptionMapper.java
index f20daf5..a9f977c 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalStateExceptionMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/IllegalStateExceptionMapper.java
@@ -16,10 +16,12 @@
package org.onosproject.rest.exceptions;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
/**
* Mapper for illegal state exceptions to the BAD_REQUEST response code.
*/
+@Provider
public class IllegalStateExceptionMapper extends AbstractMapper<IllegalStateException> {
@Override
protected Response.Status responseStatus() {
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/NotFoundMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/NotFoundMapper.java
index 1c4135e..2bf3614 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/NotFoundMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/NotFoundMapper.java
@@ -16,12 +16,14 @@
package org.onosproject.rest.exceptions;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
import com.sun.jersey.api.NotFoundException;
/**
* Mapper for api not found exceptions to the NOT_FOUND response code.
*/
+@Provider
public class NotFoundMapper extends AbstractMapper<NotFoundException> {
@Override
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/ServerErrorMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/ServerErrorMapper.java
index 4904c85..5a9050d 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/ServerErrorMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/ServerErrorMapper.java
@@ -16,10 +16,12 @@
package org.onosproject.rest.exceptions;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
/**
* Mapper for service not found exceptions to the INTERNAL_SERVER_ERROR response code.
*/
+@Provider
public class ServerErrorMapper extends AbstractMapper<RuntimeException> {
@Override
protected Response.Status responseStatus() {
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/ServiceNotFoundMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/ServiceNotFoundMapper.java
index 0932bc4..69e5508 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/ServiceNotFoundMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/ServiceNotFoundMapper.java
@@ -18,10 +18,12 @@
import org.onlab.osgi.ServiceNotFoundException;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
/**
* Mapper for service not found exceptions to the SERVICE_UNAVAILABLE response code.
*/
+@Provider
public class ServiceNotFoundMapper extends AbstractMapper<ServiceNotFoundException> {
@Override
protected Response.Status responseStatus() {
diff --git a/web/api/src/main/java/org/onosproject/rest/exceptions/WebApplicationExceptionMapper.java b/web/api/src/main/java/org/onosproject/rest/exceptions/WebApplicationExceptionMapper.java
index f47e604..86d8434 100644
--- a/web/api/src/main/java/org/onosproject/rest/exceptions/WebApplicationExceptionMapper.java
+++ b/web/api/src/main/java/org/onosproject/rest/exceptions/WebApplicationExceptionMapper.java
@@ -17,10 +17,12 @@
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
/**
* Exception mapper for WebApplicationExceptions.
*/
+@Provider
public class WebApplicationExceptionMapper extends AbstractMapper<WebApplicationException> {
/**
diff --git a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
index 7fc7b5d..4943705 100644
--- a/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/IntentsResourceTest.java
@@ -331,15 +331,29 @@
expect(mockIntentService.getIntent(Key.of("0", APP_ID)))
.andReturn(intent)
.anyTimes();
+ expect(mockIntentService.getIntent(Key.of(0, APP_ID)))
+ .andReturn(intent)
+ .anyTimes();
+ expect(mockIntentService.getIntent(Key.of("0x0", APP_ID)))
+ .andReturn(null)
+ .anyTimes();
replay(mockIntentService);
expect(mockCoreService.getAppId(APP_ID.name()))
.andReturn(APP_ID).anyTimes();
replay(mockCoreService);
final WebResource rs = resource();
+
+ // Test get using key string
final String response = rs.path("intents/" + APP_ID.name()
+ "/0").get(String.class);
final JsonObject result = JsonObject.readFrom(response);
assertThat(result, matchesIntent(intent));
+
+ // Test get using numeric value
+ final String responseNumeric = rs.path("intents/" + APP_ID.name()
+ + "/0x0").get(String.class);
+ final JsonObject resultNumeric = JsonObject.readFrom(responseNumeric);
+ assertThat(resultNumeric, matchesIntent(intent));
}
/**
@@ -390,6 +404,23 @@
}
/**
+ * Tests creating an intent with POST and illegal JSON.
+ */
+ @Test
+ public void testBadPost() {
+ replay(mockCoreService);
+ replay(mockIntentService);
+
+ String json = "this is invalid!";
+ WebResource rs = resource();
+
+ ClientResponse response = rs.path("intents")
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .post(ClientResponse.class, json);
+ assertThat(response.getStatus(), is(HttpURLConnection.HTTP_BAD_REQUEST));
+ }
+
+ /**
* Tests removing an intent with DELETE.
*/
@Test
@@ -429,4 +460,33 @@
.delete(ClientResponse.class);
assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
}
+
+ /**
+ * Tests removal of a non existent intent with DELETE.
+ */
+ @Test
+ public void testBadRemove() {
+ final ApplicationId appId = new DefaultApplicationId(2, "app");
+
+ expect(mockCoreService.getAppId("app"))
+ .andReturn(appId).once();
+ replay(mockCoreService);
+
+ expect(mockIntentService.getIntent(Key.of(2, appId)))
+ .andReturn(null)
+ .once();
+ expect(mockIntentService.getIntent(Key.of("0x2", appId)))
+ .andReturn(null)
+ .once();
+
+ replay(mockIntentService);
+
+ WebResource rs = resource();
+
+ ClientResponse response = rs.path("intents/app/0x2")
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .delete(ClientResponse.class);
+ assertThat(response.getStatus(), is(HttpURLConnection.HTTP_NO_CONTENT));
+ }
+
}