Ejemplo n.º 1
0
  @Override
  protected synchronized void executeRequest(
      Request request, String serverURI, String resourceUri) {

    // defensive check for slash
    if (!serverURI.endsWith("/") && !resourceUri.startsWith("/")) {
      resourceUri = "/" + resourceUri;
    }

    URI uri = null;
    try {
      uri = new URI(serverURI + resourceUri);
    } catch (URISyntaxException use) {
      throw new IllegalArgumentException("Invalid URI: " + use.getMessage());
    }

    request.setURI(uri);

    // for observing
    int observeLoop = 5;
    long time = 5000;

    // print request info
    if (verbose) {
      System.out.println("Request for test " + this.testName + " sent");
      Utils.prettyPrint(request);
    }

    // execute the request
    try {
      Response response = null;
      boolean success = true;

      request.send();

      System.out.println();
      System.out.println("**** TEST: " + testName + " ****");
      System.out.println("**** BEGIN CHECK ****");

      response = request.waitForResponse(time);
      if (response != null) {
        success &= checkType(Type.ACK, response.getType());
        success &= checkInt(EXPECTED_RESPONSE_CODE.value, response.getCode().value, "code");
        success &= checkToken(request.getToken(), response.getToken());
        success &= hasContentType(response);
        success &= hasNonEmptyPalyoad(response);
        success &= hasObserve(response);

        time = response.getOptions().getMaxAge() * 1000;
        System.out.println("+++++ Max-Age: " + time + " +++++");
        if (time == 0) time = 5000;
      }

      // receive multiple responses
      for (int l = 0; success && l < observeLoop; ++l) {
        response = request.waitForResponse(time + 1000);

        // checking the response
        if (response != null) {
          System.out.println("Received notification " + l);

          // print response info
          if (verbose) {
            System.out.println("Response received");
            System.out.println("Time elapsed (ms): " + response.getRTT());
            Utils.prettyPrint(response);
          }

          success &= checkResponse(request, response);

          if (!hasObserve(response)) {
            break;
          }
        }
      }

      System.out.println("+++++ De-registering +++++");
      Request deregister = Request.newGet();
      deregister.setURI(uri);
      deregister.setToken(request.getToken());
      deregister.setObserveCancel();
      request = deregister;
      request.send();
      response = request.waitForResponse(10000);

      if (response != null) {
        success &= hasObserve(response, true);
      } else {
        System.out.println("FAIL: No Response after cancellation");
        success = false;
      }

      if (success) {
        System.out.println("**** TEST PASSED ****");
        addSummaryEntry(testName + ": PASSED");
      } else {
        System.out.println("**** TEST FAILED ****");
        addSummaryEntry(testName + ": --FAILED--");
      }

      tickOffTest();

    } catch (InterruptedException e) {
      System.err.println("Interupted during receive: " + e.getMessage());
      System.exit(-1);
    }
  }