@Test
public void testGrantWithGrantOption() throws Exception {

  addGroupsToUser(GRANT_OPTION_USER, GRANT_OPTION_GROUP);
  addGroupsToUser(NO_GRANT_OPTION_USER, NO_GRANT_OPTION_GROUP);
  writePolicyFile();
  String roleName1 = "r1";
  String grantor = "g1";
  sentryStore.createRole(SEARCH, roleName1, grantor);
  /**
   * grant query privilege to role r1 with grant option
   */
  PrivilegeObject queryPrivilege = new Builder()
      .setComponent(SEARCH)
      .setAction(SearchConstants.QUERY)
      .setService(SERVICE)
      .setAuthorizables(Arrays.asList(new Collection(COLLECTION_NAME)))
      .withGrantOption(true)
      .build();
  sentryStore.alterRoleGrantPrivilege(SEARCH, roleName1, queryPrivilege,ADMIN_USER);
  sentryStore.alterRoleAddGroups(SEARCH, roleName1,
      Sets.newHashSet(GRANT_OPTION_GROUP), grantor);
  /**
   * the user with grant option grant query privilege to rolr r2
   */
  String roleName2 = "r2";
  sentryStore.createRole(SEARCH, roleName2, grantor);
  sentryStore.alterRoleGrantPrivilege(SEARCH, roleName2, queryPrivilege, GRANT_OPTION_USER);
  assertEquals(Sets.newHashSet(queryPrivilege),
      sentryStore.getPrivilegesByRole(SEARCH, Sets.newHashSet(roleName2)));
}