public void setUp() throws Exception {
   super.setUp();
   mockWebServer = new MockWebServer();
   mockWebServer.play(9000);
   FH.init(getContext(), null); // this will load fhconfig.local.properties file
   FH.setLogLevel(FH.LOG_LEVEL_VERBOSE);
   DataManager.getInstance().save(FHAuthSession.SESSION_TOKEN_KEY, "testsessiontoken");
 }
  private void actTest(boolean async) throws Exception {
    String cloudHost = FH.getCloudHost();
    System.out.println("cloud host is " + cloudHost);

    // the fhconfig.local.properties file exists, use the host value from that
    // file as the cloud host
    assertEquals("http://localhost:9000", cloudHost);

    // mock response for act call
    MockResponse actSuccessResponse = new MockResponse();
    actSuccessResponse.addHeader("Content-Type", "application/json");

    actSuccessResponse.setBody("{'status':'ok', 'type': 'act'}");
    mockWebServer.enqueue(actSuccessResponse);
    FHAct actCall = FH.buildActRequest("test", new JSONObject());
    FHActCallback callback =
        new FHActCallback() {

          @Override
          public void success(FHResponse pResponse) {
            resJson = pResponse.getJson();
          }

          @Override
          public void fail(FHResponse pResponse) {
            resJson = null;
          }
        };

    if (async) {
      runAsyncRequest(actCall, callback);
    } else {
      actCall.execute(callback);
    }

    assertEquals(resJson.getString("type"), "act");
    // verify request object
    RecordedRequest request = mockWebServer.takeRequest();
    assertEquals("POST", request.getMethod().toUpperCase());
    assertEquals("/cloud/test", request.getPath());

    String requestBody = new String(request.getBody(), "UTF-8");
    JSONObject requestJson = new JSONObject(requestBody);
    assertTrue(requestJson.has("__fh"));

    JSONObject fhParams = requestJson.getJSONObject("__fh");
    String deviceId = fhParams.optString("cuid", null);
    assertEquals(getDeviceId(), deviceId);
  }
  private void makeCloudRequest(String method, Header[] headers, JSONObject params, boolean pAsync)
      throws JSONException, Exception {
    FHCloudRequest cloudRequest = FH.buildCloudRequest("/v1/cloud/test", method, headers, params);
    FHActCallback callback =
        new FHActCallback() {

          @Override
          public void success(FHResponse pResponse) {
            resJson = pResponse.getJson();
          }

          @Override
          public void fail(FHResponse pResponse) {
            resJson = null;
          }
        };
    if (pAsync) {
      runAsyncRequest(cloudRequest, callback);
    } else {
      cloudRequest.execute(callback);
    }

    assertNotNull(resJson);
    assertEquals("cloud", resJson.getString("type"));
  }
  /**
   * Set the parameters for the cloud side function
   *
   * @param pArgs the parameters that will be passed to the cloud side function
   */
  public void setArgs(JSONObject pArgs) {
    mArgs = pArgs;
    // keep backward compatibility
    if (!mArgs.has("__fh")) {
      try {
        mArgs.put("__fh", FH.getDefaultParams());
      } catch (Exception e) {

      }
    }
  }
 @Override
 protected Header[] buildHeaders(Header[] pHeaders) {
   return FH.getDefaultParamsAsHeaders(pHeaders);
 }
 public void tearDown() throws Exception {
   super.tearDown();
   shutdownServer();
   FH.stop();
 }