New test trying out parsing of basic json osrf response
authorkenstir <kenstir@gmail.com>
Sun, 6 Dec 2015 04:16:18 +0000 (23:16 -0500)
committerkenstir <kenstir@gmail.com>
Sun, 6 Dec 2015 04:16:18 +0000 (23:16 -0500)
Open-ILS/src/Android/core/src/org/open_ils/test/org/evergreen_ils/views/VolleyWranglerTest.java
Open-ILS/src/Android/opensrf/src/org/opensrf/net/http/GatewayRequest.java

index c03864d..e8c1c3a 100644 (file)
@@ -7,9 +7,16 @@ import com.android.volley.Request;
 import com.android.volley.RequestQueue;
 import com.android.volley.Response;
 import com.android.volley.VolleyError;
+import com.android.volley.toolbox.JsonObjectRequest;
 import com.android.volley.toolbox.StringRequest;
 import org.evergreen_ils.net.VolleyWrangler;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.opensrf.util.JSONException;
+import org.opensrf.util.JSONReader;
 
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
@@ -26,7 +33,9 @@ public class VolleyWranglerTest
     private VolleyWrangler mVolley;
     private Response.ErrorListener mVolleyErrorListener;
     private Response.Listener<String> mVolleyStringResponseListener;
+    private Response.Listener<JSONObject> mVolleyJsonResponseListener;
     private String mStringResponse = null;
+    private JSONObject mJsonResponse = null;
     private String mError = null;
     private Exception mException = null;
     private long mStartTime;
@@ -42,11 +51,8 @@ public class VolleyWranglerTest
 
     @Override
     protected void setUp() throws Exception {
-        Log.d(TAG, "setUp:start");
         super.setUp();
-        Log.d(TAG, "setUp:getActivity");
         mActivity = getActivity();
-        Log.d(TAG, "setUp:volley stuff");
         mVolley = VolleyWrangler.getInstance(mActivity);
         mVolleyErrorListener = new Response.ErrorListener() {
             @Override
@@ -67,8 +73,17 @@ public class VolleyWranglerTest
                 finishRequest();
             }
         };
+        mVolleyJsonResponseListener = new Response.Listener<JSONObject>() {
+            @Override
+            public void onResponse(JSONObject response) {
+                long duration_ms = System.currentTimeMillis() - mStartTime;
+                Log.d(TAG, "fetch took " + duration_ms + "ms");
+                mJsonResponse = response;
+                Log.d(TAG, "response: " + response);
+                finishRequest();
+            }
+        };
         mStartTime = System.currentTimeMillis();
-        Log.d(TAG, "setUp:end");
     }
 
     private void startRequest(Request<?> request) {
@@ -106,21 +121,81 @@ public class VolleyWranglerTest
         String url = "https://evergreen-ils.org/directory/libraries.json";
         StringRequest request = new StringRequest(Request.Method.GET, url,
                 mVolleyStringResponseListener, mVolleyErrorListener);
-        startRequest(request);
 
+        // volley and wait
+        startRequest(request);
         waitForAllResponses();
-        assertTrue(mStringResponse != null);
+
+        // assertions
+
+        assertNotNull(mStringResponse);
     }
 
     public void testVolley_json() throws Exception {
-        Log.d(TAG, "testVolley_json:start");
         String url = "http://bark.cwmars.org/osrf-gateway-v1?service=open-ils.actor&method=opensrf.open-ils.system.ils_version";
-        RequestQueue q = VolleyWrangler.getInstance(mActivity).getRequestQueue();
+        JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null,
+                mVolleyJsonResponseListener, mVolleyErrorListener);
+
+        // volley and wait
+        startRequest(request);
+        waitForAllResponses();
+
+        // assertions
+
+        assertNotNull(mJsonResponse);
+
+        int status = mJsonResponse.getInt("status");
+        Log.d(TAG, "status => " + status);
+        assertEquals(200, status);
+
+        JSONArray payload = mJsonResponse.getJSONArray("payload");
+        Log.d(TAG, "payload => " + payload);
+        assertEquals(1, payload.length());
+        String version = payload.getString(0);
+        assertNotNull(version);
+    }
+
+    public class OSRFResponse {
+        List<Object> responseList = null;
+        public Map<String, ?> map = null;
+        public Exception ex = null;
+        private OSRFResponse() {
+        }
+        public void parse(String json) {
+            try {
+                map = (Map<String, ?>) new JSONReader(json).readObject();
+                responseList = (List<Object>) map.get("payload");
+            } catch (JSONException e) {
+                ex = e;
+            }
+        }
+    }
+
+    public void testVolley_osrf() throws Exception {
+        String url = "http://bark.cwmars.org/osrf-gateway-v1?service=open-ils.actor&method=opensrf.open-ils.system.ils_version";
         StringRequest request = new StringRequest(Request.Method.GET, url,
                 mVolleyStringResponseListener, mVolleyErrorListener);
-        startRequest(request);
 
+        // volley and wait
+        startRequest(request);
         waitForAllResponses();
-        assertTrue(mStringResponse != null);
+
+        // assertions
+
+        assertNotNull(mStringResponse);
+
+        OSRFResponse response = new OSRFResponse();
+        response.parse(mStringResponse);
+        assertNull(response.ex);
+
+        assertNotNull(response.map);
+        String status = response.map.get("status").toString();
+        assertEquals("200", status);
+
+        assertNotNull(response.responseList);
+        Log.d(TAG, "responseList:" + response.responseList);
+        String version = (String)response.responseList.remove(0);
+        Log.d(TAG, "version:" + version);
+        assertEquals(0, response.responseList.size());
     }
 }
\ No newline at end of file
index be86432..e615528 100644 (file)
@@ -78,26 +78,27 @@ public class GatewayRequest extends HttpRequest {
             netStream.close();
             urlConn = null;
 
+            long start_ms = System.currentTimeMillis();
             Map<String,?> result = null;
 
             //System.out.println("osrf: Received " +  readBuf.toString());
-            Log.d(TAG, "received:" +  readBuf.toString());
             try {
+                Log.d(TAG, "received:" +  readBuf.toString());
                 result = (Map<String, ?>) new JSONReader(readBuf.toString()).readObject();
             } catch (org.opensrf.util.JSONException ex) {
                 Log.d(TAG, "caught", ex);
                 return null;
             }
             //System.out.println("osrf: Converted object " + result);
-            logRequest(this, result);
+            logRequest(this, result, start_ms);
             String status = result.get("status").toString();
             if (!"200".equals(status)) {
                 failed = true;
                 // failure = <some new exception>
             }
 
-             // gateway always returns a wrapper array with the full results set
-             responseList = (List) result.get("payload"); 
+            // gateway always returns a wrapper array with the full results set
+            responseList = (List) result.get("payload");
 
             // System.out.println("Response list : " + responseList);
             Log.d(TAG, "responseList:"+responseList);
@@ -111,15 +112,16 @@ public class GatewayRequest extends HttpRequest {
         return nextResponse();
     }
 
-    private void logRequest(GatewayRequest gatewayRequest, Map<String, ?> result) {
-        Log.d(TAG, "service:" + this.service);
-        Log.d(TAG, "method:" + this.method.getName());
+    private void logRequest(GatewayRequest gatewayRequest, Map<String, ?> result, long start_ms) {
+        Log.d(TAG, "service=" + this.service);
+        Log.d(TAG, "method=" + this.method.getName());
         List params = method.getParams();
         Iterator itr = params.iterator();
         while (itr.hasNext()) {
-            Log.d(TAG, "param:" + itr.next().toString());
+            Log.d(TAG, "param=" + itr.next().toString());
         }
-        Log.d(TAG, "result:" + new JSONObject(result).toString());
+        Log.d(TAG, "result=" + new JSONObject(result).toString());
+        Log.d(TAG, "parse_duration=" + (System.currentTimeMillis() - start_ms));
     }
 
     private String compilePostData(String service, Method method) {