### Question:
KettleDatabaseRepositorySecurityProvider extends BaseRepositorySecurityProvider implements
  RepositorySecurityProvider, RepositorySecurityManager, RepositorySecurityUserValidator { public void saveUserInfo( IUser userInfo ) throws KettleException { normalizeUserInfo( userInfo ); if ( !validateUserInfo( userInfo ) ) { throw new KettleException( BaseMessages.getString( KettleDatabaseRepositorySecurityProvider.class, "KettleDatabaseRepositorySecurityProvider.ERROR_0001_UNABLE_TO_CREATE_USER" ) ); } if ( userInfo.getObjectId() != null ) { throw new IllegalArgumentException( "Use updateUser() for updating" ); } String userLogin = userInfo.getLogin(); ObjectId exactMatch = userDelegate.getUserID( userLogin ); if ( exactMatch != null ) { throw new KettleException( BaseMessages.getString( KettleDatabaseRepositorySecurityProvider.class, "KettleDatabaseRepositorySecurityProvider.ERROR_0001_USER_NAME_ALREADY_EXISTS" ) ); } userDelegate.saveUserInfo( userInfo ); } KettleDatabaseRepositorySecurityProvider( KettleDatabaseRepository repository,
                                                   RepositoryMeta repositoryMeta, IUser userInfo ); boolean isReadOnly(); boolean isLockingPossible(); boolean allowsVersionComments( String fullPath ); boolean isVersionCommentMandatory(); IUser loadUserInfo( String login ); void saveUserInfo( IUser userInfo ); void validateAction( RepositoryOperation... operations ); synchronized void delUser( ObjectId id_user ); synchronized ObjectId getUserID( String login ); ObjectId[] getUserIDs(); synchronized String[] getUserLogins(); synchronized void renameUser( ObjectId id_user, String newname ); void deleteUsers( List<IUser> users ); List<IUser> getUsers(); void setUsers( List<IUser> users ); void delUser( String name ); void updateUser( IUser user ); IUser constructUser(); List<String> getAllRoles(); List<String> getAllUsers(); boolean isManaged(); @Override boolean isVersioningEnabled( String fullPath ); @Override boolean validateUserInfo( IUser user ); @Override void normalizeUserInfo( IUser user );  }### Answer:
@Test( expected = KettleException.class ) public void saveUserInfo_NormalizesInfo_FailsIfStillBreaches() throws Exception { provider.saveUserInfo( new UserInfo( " " ) ); }