@Test
  public void testAllPostOps() throws Exception {
    OperationWithAction[] allOps = allOpsForTestAllPostOps();

    for (AuthzCredentialGenerator gen : getDummyGeneratorCombos()) {
      CredentialGenerator cGen = gen.getCredentialGenerator();
      Properties extraAuthProps = cGen.getSystemProperties();
      Properties javaProps = cGen.getJavaProperties();
      Properties extraAuthzProps = gen.getSystemProperties();
      String authenticator = cGen.getAuthenticator();
      String authInit = cGen.getAuthInit();
      String accessor = gen.getAuthorizationCallback();
      TestAuthzCredentialGenerator tgen = new TestAuthzCredentialGenerator(gen);

      getLogWriter().info("testAllPostOps: Using authinit: " + authInit);
      getLogWriter().info("testAllPostOps: Using authenticator: " + authenticator);
      getLogWriter().info("testAllPostOps: Using accessor: " + accessor);

      // Start servers with all required properties
      Properties serverProps =
          buildProperties(authenticator, accessor, true, extraAuthProps, extraAuthzProps);

      // Get ports for the servers
      int[] randomAvailableTCPPorts = AvailablePortHelper.getRandomAvailableTCPPorts(2);
      int port1 = randomAvailableTCPPorts[0];
      int port2 = randomAvailableTCPPorts[1];

      // Close down any running servers
      server1.invoke(() -> closeCache());
      server2.invoke(() -> closeCache());

      // Perform all the ops on the clients
      List<OperationWithAction> opBlock = new ArrayList<>();
      Random rnd = new Random();

      for (int opNum = 0; opNum < allOps.length; ++opNum) {
        // Start client with valid credentials as specified in OperationWithAction
        OperationWithAction currentOp = allOps[opNum];
        if (currentOp.equals(OperationWithAction.OPBLOCK_END)
            || currentOp.equals(OperationWithAction.OPBLOCK_NO_FAILOVER)) {
          // End of current operation block; execute all the operations on the servers with failover
          if (opBlock.size() > 0) {
            // Start the first server and execute the operation block
            server1
                .invoke(() -> createCacheServer(port1, serverProps, javaProps));
            server2.invoke(() -> closeCache());
            executeOpBlock(opBlock, port1, port2, authInit, extraAuthProps, extraAuthzProps, tgen,
                rnd);
            if (!currentOp.equals(OperationWithAction.OPBLOCK_NO_FAILOVER)) {
              // Failover to the second server and run the block again
              server2
                  .invoke(() -> createCacheServer(port2, serverProps, javaProps));
              server1.invoke(() -> closeCache());
              executeOpBlock(opBlock, port1, port2, authInit, extraAuthProps, extraAuthzProps, tgen,
                  rnd);
            }
            opBlock.clear();
          }

        } else {
          currentOp.setOpNum(opNum);
          opBlock.add(currentOp);
        }
      }
    }
  }
Tests for authorization from client to server. This tests for authorization with post-process
callbacks in case return values of operations and for notifications along-with failover.

@since GemFire 5.5
geode-cq/src/distributedTest/java/org/apache/geode/security/ClientPostAuthorizationDUnitTest.java