public void visit()

in src/main/java/org/apache/accumulo/testing/randomwalk/security/CreateUser.java [35:79]


  public void visit(State state, RandWalkEnv env, Properties props) throws Exception {
    String sysPrincipal = WalkingSecurity.get(state, env).getSysUserName();
    try (AccumuloClient client =
        env.createClient(sysPrincipal, WalkingSecurity.get(state, env).getSysToken())) {

      String tableUserName = WalkingSecurity.get(state, env).getTabUserName();

      boolean exists = WalkingSecurity.get(state, env).userExists(tableUserName);
      boolean hasPermission = client.securityOperations().hasSystemPermission(sysPrincipal,
          SystemPermission.CREATE_USER);
      PasswordToken tabUserPass = new PasswordToken("Super Sekret Table User Password");
      try {
        client.securityOperations().createLocalUser(tableUserName, tabUserPass);
      } catch (AccumuloSecurityException ae) {
        switch (ae.getSecurityErrorCode()) {
          case PERMISSION_DENIED:
            if (hasPermission)
              throw new AccumuloException(
                  "Got a security exception when I should have had permission.", ae);
            else {
              // create user anyway for sake of state
              if (!exists) {
                env.getAccumuloClient().securityOperations().createLocalUser(tableUserName,
                    tabUserPass);
                WalkingSecurity.get(state, env).createUser(tableUserName, tabUserPass);
                Thread.sleep(1000);
              }
              return;
            }
          case USER_EXISTS:
            if (!exists)
              throw new AccumuloException(
                  "Got security exception when the user shouldn't have existed", ae);
            else
              return;
          default:
            throw new AccumuloException("Got unexpected exception", ae);
        }
      }
      WalkingSecurity.get(state, env).createUser(tableUserName, tabUserPass);
      Thread.sleep(1000);
      if (!hasPermission)
        throw new AccumuloException("Didn't get Security Exception when we should have");
    }
  }