2015-02-03 2 views
0

Я пишу модульный тест для своего кода и для целей тестирования Я использую сервер LDAP unboundsId. Я создал и подключился к серверу inmemory, и после этого я хочу выполнить запрос синхронизации, но сервер говорит: «Сервер LDM InMemory не поддерживает contentSyncRequestControl». Я заглянул в серверные документы API, есть количество контролей. Я попытался напечатать OIDs элементов управления, которые поддерживаются, и OID для contentSyncRequestControl отсутствует. так что мой вопрос заключается в том, как включить или добавить элементы управления на сервере MMORPM-сервера? Посмотрите следующий код для ссылки.Как добавить/настроить элементы управления для сервера InMemoryLDAP UnboundID

public class InMemoryLDAPServer { 
    private Logger logger = LoggerFactory.getLogger(InMemoryLDAPServer.class); 

    private InMemoryDirectoryServer mServer; 
    final String DEFAULT_INMEMORY_HOST = "localhost"; 
    final int DEFAULT_INMEMORY_PORT = 5389; 
    final String LDAP_LISTENER_NAME = "LDAP_TEST_SERVER"; 
    final String INMEMORY_BASE = "dc=Contoso,dc=net"; 
    final String INMEMORY_DOMAIN = "Contoso.net"; 
    final String INMEMORY_USER = "uid=TestAdmin"; 
    final String INMEMORY_PASS = "password"; 


    public void start(int port) { 
     try { 

      InMemoryDirectoryServerConfig config = 
       new InMemoryDirectoryServerConfig(INMEMORY_BASE); 
      config.setGenerateOperationalAttributes(true); 
      config.addAdditionalBindCredentials(INMEMORY_USER, INMEMORY_PASS); 
      config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig(LDAP_LISTENER_NAME, port)); 


      mServer = new InMemoryDirectoryServer(config); 
      URI ldifFixture= InMemoryLDAPServer.class.getResource("/Contoso_rootdse_open.ldif").toURI(); 
      mServer.importFromLDIF(true, new LDIFReader(new File(ldifFixture))); 


      mServer.startListening(LDAP_LISTENER_NAME); 
      // I tried here to check which controlls are supported 
//The OID (1.3.6.1.4.1.4203.1.9.1.1) for the sync request control. 
      LDAPConnection con = mServer.getConnection(); 
      RootDSE rootDSE = con.getRootDSE(); 
      String[] oids = rootDSE.getSupportedControlOIDs(); 

      for(int i=0; i<oids.length; i++){ 
       System.out.println(oids[i]); 

      } 
      con.close(); 

     } catch(Exception exception) { 
      logger.error("Failed to start in memory ldap server", exception); 
     } 


    } 

    public void start() { 
     start(DEFAULT_INMEMORY_PORT); 
    } 

    public void stop() { 
     try { 
     mServer.shutDown(LDAP_LISTENER_NAME, true); 
     } catch(Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

результат

здесь по умолчанию управления OIDs поддерживается.

1.2.840.113556.1.4.1413 
1.2.840.113556.1.4.319 
1.2.840.113556.1.4.473 
1.2.840.113556.1.4.805 
1.3.6.1.1.12 
1.3.6.1.1.13.1 
1.3.6.1.1.13.2 
1.3.6.1.1.21.2 
1.3.6.1.1.22 
1.3.6.1.4.1.7628.5.101.1 
2.16.840.1.113730.3.4.12 
2.16.840.1.113730.3.4.16 
2.16.840.1.113730.3.4.18 
2.16.840.1.113730.3.4.2 
2.16.840.1.113730.3.4.9 

Ссылка на API документ: https://docs.ldap.com/ldap-sdk/docs/javadoc/index.html

Пожалуйста, помогите мне в правильной конфигурации, пожалуйста.

ответ

1

Существует не очень хороший способ сделать это. Вы можете добавить поддержку пользовательских расширенных операций и механизмов SASL, поскольку в этих случаях пользовательский код выполняет всю обработку. Но контроль фактически изменяет способ обработки сервером операции, поэтому он должен быть интегрирован в основную обработку, выполняемую сервером.

Однако, если элемент управления, который вы хотите использовать, достаточно прост, чтобы его можно было поддерживать, не изменяя обработку ядра для операции, а просто изменяя запрос или ответ, тогда вы должны быть в состоянии выполнить это, создав пользовательский InMemoryOperationInterceptor (хотя он не будет отображаться в наборе поддерживаемых элементов корневого DSE, если вы также не перехватили запросы для извлечения корневого DSE и ввели туда дополнительный OID).

Какой контроль (и) вас интересует? Являются ли они стандартными или проприетарными? Сервер каталогов в памяти предназначен для создания общего сервера, совместимого с стандартами, и не обязательно включать в него проприетарные элементы. Но если есть стандартный элемент управления, который он в настоящее время не поддерживает, но может быть полезным, мы могли бы рассмотреть возможность добавления к нему прямой поддержки.

+0

Как я уже говорил, я хочу, чтобы запросы на синхронизацию контента, контент-синхронизацию и контроль информации о содержимом. Так что я могу выполнять операции синхронизации при тестировании. Или есть какой-либо способ, с помощью которого я могу перехватить «запрос синхронизации», а затем возвращать содержимое прямой вручную. Любой пример кода будет полезен. – Mubasher

Смежные вопросы