@Test
  public void verifyServiceRemovals() throws Exception {
    final List<RegisteredService> list = new ArrayList<>(5);
    IntStream.range(1, 5)
        .forEach(
            i -> {
              final RegexRegisteredService r = new RegexRegisteredService();
              r.setServiceId("^https://.+");
              r.setName("testServiceType");
              r.setTheme("testtheme");
              r.setEvaluationOrder(1000);
              r.setId(i * 100);
              list.add(this.dao.save(r));
            });

    list.stream()
        .forEach(
            r2 -> {
              try {
                Thread.sleep(500);
                this.dao.delete(r2);
                Thread.sleep(2000);
              } catch (final InterruptedException e) {
                throw Throwables.propagate(e);
              }
              assertNull(this.dao.findServiceById(r2.getId()));
            });
  }
  @Test
  public void verifySaveAttributeReleasePolicyAllowedAttrRulesAndFilter() {
    final RegexRegisteredService r = new RegexRegisteredService();
    r.setName("testSaveAttributeReleasePolicyAllowedAttrRulesAndFilter");
    r.setServiceId("testId");
    r.setTheme("testtheme");
    r.setEvaluationOrder(1000);
    r.setAccessStrategy(new DefaultRegisteredServiceAccessStrategy(true, false));
    r.setProxyPolicy(new RegexMatchingRegisteredServiceProxyPolicy("https://.+"));
    r.setRequiredHandlers(new HashSet<>(Lists.newArrayList("h1", "h2")));

    final ReturnAllowedAttributeReleasePolicy policy = new ReturnAllowedAttributeReleasePolicy();
    policy.setAllowedAttributes(Lists.newArrayList("1", "2", "3"));
    r.setAttributeReleasePolicy(policy);
    r.getAttributeReleasePolicy()
        .setAttributeFilter(new RegisteredServiceRegexAttributeFilter("\\w+"));

    final RegisteredService r2 = this.dao.save(r);
    final RegisteredService r3 = this.dao.findServiceById(r2.getId());

    assertEquals(r, r2);
    assertEquals(r2, r3);
    assertNotNull(r3.getAttributeReleasePolicy());
    assertEquals(r2.getAttributeReleasePolicy(), r3.getAttributeReleasePolicy());
  }
  @Test(expected = RuntimeException.class)
  public void verifyServiceWithInvalidFileName() {
    final RegexRegisteredService r = new RegexRegisteredService();
    r.setServiceId("^https://.+");
    r.setName("hell/o@world:*");
    r.setEvaluationOrder(1000);

    this.dao.save(r);
  }
  @Test
  public void verifyServiceType() {
    final RegexRegisteredService r = new RegexRegisteredService();
    r.setServiceId("^https://.+");
    r.setName("testServiceType");
    r.setTheme("testtheme");
    r.setEvaluationOrder(1000);

    final RegisteredService r2 = this.dao.save(r);
    assertTrue(r2 instanceof RegexRegisteredService);
  }
  @Test
  public void verifyRegexService() {
    final RegexRegisteredService r = new RegexRegisteredService();
    r.setId(10000);
    r.setName("regex test");
    r.setServiceId("^http://www.test.edu.+");
    r.setEvaluationOrder(10000);

    this.defaultServicesManagerImpl.save(r);

    final SimpleService service = new SimpleService("HTTP://www.TEST.edu/param=hello");
    assertEquals(r, this.defaultServicesManagerImpl.findServiceBy(service));
  }