@Test
  @Transactional
  @Rollback
  public void verify() throws Exception {
    final LinkedBlockingQueue<HttpRequest> requests = new LinkedBlockingQueue<HttpRequest>();

    server.register(
        "/*",
        new HttpRequestHandler() {
          @Override
          public void handle(HttpRequest request, HttpResponse response, HttpContext context)
              throws HttpException, IOException {
            requests.add(request);

            response.setEntity(
                new StringEntity(
                    getQueryParamValue(request.getRequestLine().getUri(), "hub.challenge")));
          }
        });

    subscriber.verify(SubscriptionMode.SUBSCRIBE);

    Assert.assertEquals(1, requests.size());

    HttpRequest actualRequest = requests.poll();
    String requestUri = actualRequest.getRequestLine().getUri();
    Assert.assertEquals("subscribe", getQueryParamValue(requestUri, "hub.mode"));
    Assert.assertEquals(
        subscriber.getTopic().toString(),
        URLDecoder.decode(getQueryParamValue(requestUri, "hub.topic"), "UTF-8"));
    Assert.assertNotNull(getQueryParamValue(requestUri, "hub.challenge"));
    Assert.assertEquals("123", getQueryParamValue(requestUri, "hub.lease_seconds"));
    Assert.assertEquals(
        subscriber.getVerifyToken(), getQueryParamValue(requestUri, "hub.verify_token"));
  }
  @Test(expected = FailedSubscriberVerificationException.class)
  @Transactional
  @Rollback
  public void verifyWithInvalidChallenge() throws Exception {
    server.register(
        "/*",
        new HttpRequestHandler() {
          @Override
          public void handle(HttpRequest request, HttpResponse response, HttpContext context)
              throws HttpException, IOException {
            response.setEntity(HttpUtil.createEntity("dummy"));
          }
        });

    subscriber.verify(SubscriptionMode.SUBSCRIBE);
  }
  @Test(expected = FailedSubscriberVerificationException.class)
  @Transactional
  @Rollback
  public void verifyWithError() throws Exception {
    server.register(
        "/*",
        new HttpRequestHandler() {
          @Override
          public void handle(HttpRequest request, HttpResponse response, HttpContext context)
              throws HttpException, IOException {
            response.setStatusCode(500);
          }
        });

    subscriber.verify(SubscriptionMode.SUBSCRIBE);
  }
  @Test(expected = FailedSubscriberVerificationException.class)
  @Transactional
  @Rollback
  public void verifyWithMissingChallenge() throws Exception {
    server.register(
        "/*",
        new HttpRequestHandler() {
          @Override
          public void handle(HttpRequest request, HttpResponse response, HttpContext context)
              throws HttpException, IOException {
            // do not return challenge
          }
        });

    subscriber.verify(SubscriptionMode.SUBSCRIBE);
  }