@Test
  public void testOps1() throws Exception {
    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();

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

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

      int port1 = createCacheServerOnVM(server1, javaProps, serverProps);
      int port2 = createCacheServerOnVM(server2, javaProps, serverProps);

      if (!prepareClientsForOps(gen, cGen,
          new OperationCode[] {OperationCode.PUT, OperationCode.PUT},
          new OperationCode[] {OperationCode.GET, OperationCode.GET}, javaProps, authInit, port1,
          port2)) {
        continue;
      }

      verifyPutsGets();

      if (!prepareClientsForOps(gen, cGen,
          new OperationCode[] {OperationCode.PUT, OperationCode.CONTAINS_KEY},
          new OperationCode[] {OperationCode.DESTROY, OperationCode.DESTROY}, javaProps, authInit,
          port1, port2)) {
        continue;
      }

      verifyContainsKeyDestroys();

      if (!prepareClientsForOps(gen, cGen,
          new OperationCode[] {OperationCode.PUT, OperationCode.CONTAINS_KEY},
          new OperationCode[] {OperationCode.INVALIDATE, OperationCode.INVALIDATE}, javaProps,
          authInit, port1, port2)) {
        continue;
      }

      verifyContainsKeyInvalidates();

      if (!prepareClientsForOps(gen, cGen,
          new OperationCode[] {OperationCode.GET, OperationCode.GET},
          new OperationCode[] {OperationCode.REGION_DESTROY, OperationCode.REGION_DESTROY},
          javaProps, authInit, port1, port2)) {
        continue;
      }

      verifyGetAllInTX();
      verifyGetAllRegionDestroys();
    }
  }
Tests with one user authorized to do puts/gets/containsKey/destroys and another not authorized
for the same.
geode-core/src/distributedTest/java/org/apache/geode/security/ClientMultiUserAuthzDUnitTest.java