code: private void performSanityCheckOnProperties() throws SFException
    {
      for (SFSessionProperty property : SFSessionProperty.values())
      {
        if (property.isRequired() &&
            !connectionPropertiesMap.containsKey(property))
        {
          switch (property)
          {
            case SERVER_URL:
              throw new SFException(ErrorCode.MISSING_SERVER_URL);
  
            default:
              throw new SFException(ErrorCode.MISSING_CONNECTION_PROPERTY,
                                    property.getPropertyKey());
          }
        }
      }
  
      String authenticator = (String) connectionPropertiesMap.get(
          SFSessionProperty.AUTHENTICATOR);
      if (isSnowflakeAuthenticator() ||
          ClientAuthnDTO.AuthenticatorType.OKTA.name().equalsIgnoreCase(
              authenticator))
      {
        // userName and password are expected for both Snowflake and Okta.
        String userName = (String) connectionPropertiesMap.get(
            SFSessionProperty.USER);
        if (userName == null || userName.isEmpty())
        {
          throw new SFException(ErrorCode.MISSING_USERNAME);
        }
  
        String password = (String) connectionPropertiesMap.get(
            SFSessionProperty.PASSWORD);
        if (password == null || password.isEmpty())
  
        {
          throw new SFException(ErrorCode.MISSING_PASSWORD);
        }
      }
  
      // perform sanity check on proxy settings
      boolean useProxy = (boolean) connectionPropertiesMap.getOrDefault(
          SFSessionProperty.USE_PROXY, false);
      if (useProxy)
      {
        if (!connectionPropertiesMap.containsKey(SFSessionProperty.PROXY_HOST)
            || !connectionPropertiesMap.containsKey(SFSessionProperty.PROXY_PORT))
        {
          throw new SFException(ErrorCode.INVALID_PROXY_PROPERTIES);
        }
      }
    }
docs: Performs a sanity check on properties. Sanity checking includes:
  - verifying that a server url is present
  - verifying various combinations of properties given the authenticator
  
  @throws SFException