killbill-aplcache

server: set content-type when sending HTTP notifications This

3/18/2015 2:05:30 PM

Details

diff --git a/profiles/killbill/src/main/java/org/killbill/billing/server/notifications/PushNotificationListener.java b/profiles/killbill/src/main/java/org/killbill/billing/server/notifications/PushNotificationListener.java
index 577f392..16dc8db 100644
--- a/profiles/killbill/src/main/java/org/killbill/billing/server/notifications/PushNotificationListener.java
+++ b/profiles/killbill/src/main/java/org/killbill/billing/server/notifications/PushNotificationListener.java
@@ -43,12 +43,18 @@ import com.ning.http.client.ListenableFuture;
 import com.ning.http.client.Response;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.eventbus.Subscribe;
 
 public class PushNotificationListener {
 
     private static final Logger log = LoggerFactory.getLogger(PushNotificationListener.class);
 
+    @VisibleForTesting
+    public static final String HTTP_HEADER_CONTENT_TYPE = "Content-Type";
+    @VisibleForTesting
+    public static final String CONTENT_TYPE_JSON = "application/json; charset=UTF-8";
+
     private static final int TIMEOUT_NOTIFICATION = 15; // 15 seconds
 
     private final TenantUserApi tenantApi;
@@ -88,6 +94,7 @@ public class PushNotificationListener {
     private boolean doPost(final UUID tenantId, final String url, final String body, final int timeoutSec) {
         final BoundRequestBuilder builder = httpClient.preparePost(url);
         builder.setBody(body == null ? "{}" : body);
+        builder.addHeader(HTTP_HEADER_CONTENT_TYPE, CONTENT_TYPE_JSON);
 
         final Response response;
         try {
diff --git a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPushNotification.java b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPushNotification.java
index 76b0e4d..9184c07 100644
--- a/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPushNotification.java
+++ b/profiles/killbill/src/test/java/org/killbill/billing/jaxrs/TestPushNotification.java
@@ -1,7 +1,7 @@
 /*
  * Copyright 2010-2013 Ning, Inc.
- * Copyright 2014 Groupon, Inc
- * Copyright 2014 The Billing Project, LLC
+ * Copyright 2014-2015 Groupon, Inc
+ * Copyright 2014-2015 The Billing Project, LLC
  *
  * The Billing Project licenses this file to you under the Apache License, version 2.0
  * (the "License"); you may not use this file except in compliance with the
@@ -33,6 +33,8 @@ import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.killbill.billing.client.model.TenantKey;
 import org.killbill.billing.jaxrs.json.NotificationJson;
+import org.killbill.billing.server.notifications.PushNotificationListener;
+import org.killbill.billing.tenant.api.TenantKV;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
@@ -48,7 +50,7 @@ public class TestPushNotification extends TestJaxrsBase {
     private CallbackServer callbackServer;
 
     private static final int SERVER_PORT = 8087;
-    private static final String CALLBACK_ENDPPOINT = "/callmeback";
+    private static final String CALLBACK_ENDPOINT = "/callmeback";
 
     private volatile boolean callbackCompleted;
     private volatile boolean callbackCompletedWithError;
@@ -57,7 +59,7 @@ public class TestPushNotification extends TestJaxrsBase {
     @BeforeMethod(groups = "slow")
     public void beforeMethod() throws Exception {
         super.beforeMethod();
-        callbackServer = new CallbackServer(this, SERVER_PORT, CALLBACK_ENDPPOINT);
+        callbackServer = new CallbackServer(this, SERVER_PORT, CALLBACK_ENDPOINT);
         callbackCompleted = false;
         callbackCompletedWithError = false;
         callbackServer.startServer();
@@ -92,9 +94,9 @@ public class TestPushNotification extends TestJaxrsBase {
     @Test(groups = "slow")
     public void testPushNotification() throws Exception {
         // Register tenant for callback
-        final String callback = "http://127.0.0.1:" + SERVER_PORT + CALLBACK_ENDPPOINT;
+        final String callback = "http://127.0.0.1:" + SERVER_PORT + CALLBACK_ENDPOINT;
         final TenantKey result0 = killBillClient.registerCallbackNotificationForTenant(callback, createdBy, reason, comment);
-        Assert.assertEquals(result0.getKey(), org.killbill.billing.tenant.api.TenantKV.TenantKey.PUSH_NOTIFICATION_CB.toString());
+        Assert.assertEquals(result0.getKey(), TenantKV.TenantKey.PUSH_NOTIFICATION_CB.toString());
         Assert.assertEquals(result0.getValues().size(), 1);
         Assert.assertEquals(result0.getValues().get(0), callback);
 
@@ -111,13 +113,13 @@ public class TestPushNotification extends TestJaxrsBase {
         }
 
         final TenantKey result = killBillClient.getCallbackNotificationForTenant();
-        Assert.assertEquals(result.getKey(), org.killbill.billing.tenant.api.TenantKV.TenantKey.PUSH_NOTIFICATION_CB.toString());
+        Assert.assertEquals(result.getKey(), TenantKV.TenantKey.PUSH_NOTIFICATION_CB.toString());
         Assert.assertEquals(result.getValues().size(), 1);
         Assert.assertEquals(result.getValues().get(0), callback);
 
         killBillClient.unregisterCallbackNotificationForTenant(createdBy, reason, comment);
         final TenantKey result2 = killBillClient.getCallbackNotificationForTenant();
-        Assert.assertEquals(result2.getKey(), org.killbill.billing.tenant.api.TenantKV.TenantKey.PUSH_NOTIFICATION_CB.toString());
+        Assert.assertEquals(result2.getKey(), TenantKV.TenantKey.PUSH_NOTIFICATION_CB.toString());
         Assert.assertEquals(result2.getValues().size(), 0);
     }
 
@@ -176,8 +178,6 @@ public class TestPushNotification extends TestJaxrsBase {
             final int current = receivedCalls.incrementAndGet();
 
             final String body = CharStreams.toString(new InputStreamReader(request.getInputStream(), "UTF-8"));
-
-            response.setContentType("application/json");
             response.setStatus(HttpServletResponse.SC_OK);
 
             log.info("Got body {}", body);
@@ -191,6 +191,8 @@ public class TestPushNotification extends TestJaxrsBase {
                 Assert.assertEquals(notification.getObjectId(), notification.getAccountId());
 
                 test.retrieveAccountWithAsserts(notification.getObjectId());
+
+                Assert.assertEquals(request.getHeader(PushNotificationListener.HTTP_HEADER_CONTENT_TYPE), PushNotificationListener.CONTENT_TYPE_JSON);
             } catch (final AssertionError e) {
                 withError = true;
             }