Fix replication initialisation suites
| | |
| | | % (TESTS_DIR)"/> |
| | | <call function="'replication_setup'" /> |
| | | |
| | | <script> |
| | | synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn() |
| | | </script> |
| | | |
| | | <!--- Test Case information |
| | | #@TestMarker Replication Binary Copy Tests |
| | |
| | | #@TestPurpose Initialise replicated servers using off-line |
| | | backup/restore |
| | | #@TestPreamble |
| | | #@TestSteps |
| | | #@TestSteps Call dsreplication pre-external-initialization |
| | | #@TestSteps Stop servers |
| | | #@TestSteps Import data on server A |
| | | #@TestSteps Back-up server A |
| | | #@TestSteps Restore back-up on other servers |
| | | #@TestSteps Start servers |
| | | #@TestSteps Call dsreplication post-external-initialization |
| | | #@TestSteps Add entry on server A |
| | | #@TestPostamble |
| | | #@TestResult |
| | | #@TestResult Success if trees synchronized |
| | | --> |
| | | <testcase name="getTestCaseName('Off-line initialisation')"> |
| | | <sequence> |
| | |
| | | 'Replication: Binary Copy: Off-line initialisation. \ |
| | | Initialise replicated servers using off-line backup/restore' |
| | | </message> |
| | | |
| | | |
| | | <!-- Pre-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ binary copy off-line: prepare servers for external \ |
| | | initialization' |
| | | </message> |
| | | <call function="'preInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'localOnly' : False, |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Stop the servers in the topology --> |
| | | <call function="'stopServers'"> |
| | | [_topologyServerList] |
| | | </call> |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <message> |
| | | '+++++ binary copy off-line: import data on %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'ImportLdifWithScript'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | |
| | | } |
| | | </call> |
| | | |
| | | <!-- Check some data was imported into "master" server --> |
| | | <call function="'checkImport'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsHost' : masterHost, |
| | | 'dsPort' : master.getPort(), |
| | | 'dsDn' : master.getRootDn(), |
| | | 'dsPswd' : master.getRootPwd(), |
| | | 'expectedEntries' : ['uid=scarter,ou=People,o=example', |
| | | 'uid=dmiller, ou=People, o=example', |
| | | 'uid=rhunt, ou=People, o=example'] |
| | | } |
| | | </call> |
| | | |
| | | <!-- Backup "master" server --> |
| | | <message> |
| | | '+++++ binary copy off-line: back-up server %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'backup'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | |
| | | <!-- Copy backup to "consumer" servers and restore it --> |
| | | <paralleliterate var="consumer" in="consumerList"> |
| | | <sequence> |
| | | <if expr="os.path.exists('%s/config/schematokens.dat' |
| | | % masterPath)" > |
| | | <call function="'copyFile'"> |
| | | { 'location' : masterHost, |
| | | 'srcfile' : '%s/config/schematokens.dat' \ |
| | | % masterPath, |
| | | 'destfile' : '%s/%s/config/schematokens.dat' \ |
| | | % (consumer.getDir(),OPENDSNAME), |
| | | 'remotehost' : consumer.getHostname() |
| | | } |
| | | </call> |
| | | </if> |
| | | <call function="'CopyFolderByExtension'"> |
| | | { 'location' : masterHost, |
| | | 'remotehost' : consumer.getHostname(), |
| | |
| | | 'extension' : '*' |
| | | } |
| | | </call> |
| | | |
| | | <message> |
| | | '+++++ binary copy off-line: restore back-up on %s:%s' \ |
| | | % (consumer.getHostname(), consumer.getPort()) |
| | | </message> |
| | | <call function="'restore'"> |
| | | { 'location' : consumer.getHostname(), |
| | | 'dsPath' : '%s/%s' % (consumer.getDir(), OPENDSNAME), |
| | |
| | | [_topologyServerList] |
| | | </call> |
| | | |
| | | <!-- Check some data was imported into "master" server --> |
| | | <call function="'checkImport'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsHost' : masterHost, |
| | | 'dsPort' : master.getPort(), |
| | | 'dsDn' : master.getRootDn(), |
| | | 'dsPswd' : master.getRootPwd(), |
| | | 'expectedEntries' : ['uid=scarter,ou=People,o=example', |
| | | 'uid=dmiller, ou=People, o=example', |
| | | 'uid=rhunt, ou=People, o=example'], |
| | | 'startDS' : 'no' |
| | | } |
| | | </call> |
| | | |
| | | <!-- Post-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ binary copy off-line: end external server initialization' |
| | | </message> |
| | | <call function="'postInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <message> |
| | | '+++++ binary copy off-line: add entry to %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | #@TestPurpose Initialise replicated servers using on-line |
| | | backup/restore |
| | | #@TestPreamble |
| | | #@TestSteps |
| | | #@TestSteps Call dsreplication pre-external-initialization |
| | | #@TestSteps Import data on server A |
| | | #@TestSteps Back-up server A |
| | | #@TestSteps Restore back-up on other servers |
| | | #@TestSteps Call dsreplication post-external-initialization |
| | | #@TestSteps Add entry on server A |
| | | #@TestPostamble |
| | | #@TestResult |
| | | #@TestResult Success if trees synchronized |
| | | --> |
| | | <testcase name="getTestCaseName('On-line initialisation')"> |
| | | <sequence> |
| | |
| | | replicated servers using on-line backup/restore' |
| | | </message> |
| | | |
| | | <!-- Clean the servers in the topology |
| | | <call function="'deleteTrees'"> |
| | | [_topologyServerList, synchroSuffix, False] |
| | | </call> --> |
| | | |
| | | <!-- Delete manually added entry so that replication server won't |
| | | add it automatically later on --> |
| | | <call function="'ldapDeleteWithScript'"> |
| | | <!-- Pre-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ binary copy on-line: prepare servers for external \ |
| | | initialization' |
| | | </message> |
| | | <call function="'preInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : master.getHostname(), |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'dsDn' : ['uid=tfitter, ou=People,%s' \ |
| | | % synchroSuffix] |
| | | 'localOnly' : False, |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <message> |
| | | '+++++ binary copy on-line: import data on %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'importLdifTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | </call> |
| | | |
| | | <!-- Backup "master" server --> |
| | | <message> |
| | | '+++++ binary copy on-line: back-up server %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'backupTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | <!-- Copy backup to "consumer" servers and restore it --> |
| | | <paralleliterate var="consumer" in="consumerList"> |
| | | <sequence> |
| | | <if expr="os.path.exists |
| | | ('%s/config/schematokens.dat' % masterPath)"> |
| | | <call function="'copyFile'"> |
| | | { 'location' : masterHost, |
| | | 'srcfile' : '%s/config/schematokens.dat' \ |
| | | % masterPath, |
| | | 'destfile' : '%s/%s/config/schematokens.dat' \ |
| | | % (consumer.getDir(),OPENDSNAME), |
| | | 'remotehost' : consumer.getHostname() |
| | | } |
| | | </call> |
| | | </if> |
| | | <call function="'CopyFolderByExtension'"> |
| | | { 'location' : masterHost, |
| | | 'remotehost' : consumer.getHostname(), |
| | |
| | | } |
| | | </call> |
| | | |
| | | <message> |
| | | '+++++ binary copy on-line: restore back-up on %s:%s' \ |
| | | % (consumer.getHostname(), consumer.getPort()) |
| | | </message> |
| | | <call function="'restoreTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | </sequence> |
| | | </paralleliterate> |
| | | |
| | | <!-- Post-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ binary copy on-line: end external server initialization' |
| | | </message> |
| | | <call function="'postInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <message> |
| | | '+++++ binary copy on-line: add entry to %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | |
| | | <!--- Test Suite information |
| | | #@TestSuiteName Replication Ldif Import Tests |
| | | #@TestSuitePurpose Verify that the servers in a replicated topology can be initialised by the means of an ldif import. |
| | | #@TestSuitePurpose Verify that the servers in a replicated topology |
| | | can be initialised by the means of an ldif |
| | | import. |
| | | #@TestSuiteID Ldif Import Tests |
| | | #@TestSuiteGroup Ldif Import |
| | | #@TestGroup Replication |
| | |
| | | |
| | | |
| | | <import machine="STAF_LOCAL_HOSTNAME" |
| | | file="'%s/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/> |
| | | file="'%s/testcases/replication/replication_setup.xml' |
| | | % (TESTS_DIR)"/> |
| | | <call function="'replication_setup'" /> |
| | | |
| | | <script> |
| | | synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn() |
| | | </script> |
| | | |
| | | <!--- Test Case information |
| | | #@TestMarker Replication Ldif Import Tests |
| | | #@TestName Replication: Ldif Import: Off-line initialisation |
| | | #@TestName Replication: Ldif Import: Off-line |
| | | initialisation |
| | | #@TestID Off-line initialisation |
| | | #@TestPurpose Initialise replicated servers using off-line export/import |
| | | #@TestPurpose Initialise replicated servers using off-line |
| | | export/import |
| | | #@TestPreamble |
| | | #@TestSteps |
| | | #@TestSteps Call dsreplication pre-external-initialization |
| | | #@TestSteps Stop servers |
| | | #@TestSteps Import data on server A |
| | | #@TestSteps Export suffix on server A |
| | | #@TestSteps Import exported file on other servers |
| | | #@TestSteps Start servers |
| | | #@TestSteps Call dsreplication post-external-initialization |
| | | #@TestSteps Add entry on server A |
| | | #@TestPostamble |
| | | #@TestResult |
| | | #@TestResult Success if trees synchronized |
| | | --> |
| | | <testcase name="getTestCaseName('Off-line initialisation')"> |
| | | <sequence> |
| | | <call function="'testCase_Preamble'"/> |
| | | <message> |
| | | 'Replication: Ldif Import: Off-line initialisation. Initialise replicated servers using off-line export/import' |
| | | 'Replication: Ldif Import: Off-line initialisation. \ |
| | | Initialise replicated servers using off-line export/import' |
| | | </message> |
| | | |
| | | <!-- Pre-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ ldif import off-line: prepare servers for external \ |
| | | initialization' |
| | | </message> |
| | | <call function="'preInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'localOnly' : False, |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Stop the servers in the topology --> |
| | | <call function="'stopServers'"> |
| | | [_topologyServerList] |
| | |
| | | |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <message> |
| | | '+++++ ldif import off-line: import data on %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'ImportLdifWithScript'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | | 'dsBackEnd' : 'userRoot', |
| | | 'dsLdifFile' : '%s/replication/Example.ldif' % masterDataDir } |
| | | 'dsLdifFile' : '%s/replication/Example.ldif' % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Check some data was imported into "master" server --> |
| | | <call function="'checkImport'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsHost' : masterHost, |
| | | 'dsPort' : master.getPort(), |
| | | 'dsDn' : master.getRootDn(), |
| | | 'dsPswd' : master.getRootPwd(), |
| | | 'expectedEntries' : ['uid=scarter,ou=People,o=example', |
| | | 'uid=dmiller, ou=People, o=example', |
| | | 'uid=rhunt, ou=People, o=example'] } |
| | | </call> |
| | | |
| | | |
| | | <!-- Export data from "master" server --> |
| | | <message> |
| | | '+++++ ldif import off-line: export suffix on server %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'exportLdif'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | | 'ldifFile' : '%s/replication/master_export.ldif' % masterDataDir } |
| | | 'ldifFile' : '%s/replication/master_export.ldif' \ |
| | | % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Copy export file to "consumer" servers and import it --> |
| | |
| | | <call function="'copyFile'"> |
| | | { 'location' : masterHost, |
| | | 'remotehost' : consumer.getHostname(), |
| | | 'srcfile' : '%s/replication/master_export.ldif' % masterDataDir, |
| | | 'destfile' : '%s/%s/replication/master_export.ldif' % (consumer.getDir(),relativeDataDir) } |
| | | 'srcfile' : '%s/replication/master_export.ldif' \ |
| | | % masterDataDir, |
| | | 'destfile' : '%s/%s/replication/master_export.ldif' \ |
| | | % (consumer.getDir(),relativeDataDir) |
| | | } |
| | | </call> |
| | | |
| | | <message> |
| | | '+++++ ldif import off-line: import exported file on %s:%s'\ |
| | | % (consumer.getHostname(), consumer.getPort()) |
| | | </message> |
| | | <call function="'ImportLdifWithScript'"> |
| | | { 'location' : consumer.getHostname(), |
| | | 'dsPath' : '%s/%s' % (consumer.getDir(), OPENDSNAME), |
| | | 'dsBackEnd' : 'userRoot', |
| | | 'dsLdifFile' : '%s/%s/replication/master_export.ldif' % (consumer.getDir(),relativeDataDir) } |
| | | 'dsLdifFile' : '%s/%s/replication/master_export.ldif' \ |
| | | % (consumer.getDir(),relativeDataDir) |
| | | } |
| | | </call> |
| | | </sequence> |
| | | </paralleliterate> |
| | |
| | | [_topologyServerList] |
| | | </call> |
| | | |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' % clientDataDir } |
| | | </call> |
| | | |
| | | <!-- Verify the synchronization of the trees among the servers in the topology --> |
| | | <call function="'verifyTrees'"> |
| | | [ clientHost, clientPath, master, consumerList, synchroSuffix ] |
| | | </call> |
| | | |
| | | <call function="'testCase_Postamble'"/> |
| | | </sequence> |
| | | </testcase> |
| | | |
| | | |
| | | |
| | | <!--- Test Case information |
| | | #@TestMarker Replication Ldif Import Tests |
| | | #@TestName Replication: Ldif Import: On-line initialisation |
| | | #@TestID On-line initialisation |
| | | #@TestPurpose Initialise replicated servers using on-line export/import |
| | | #@TestPreamble |
| | | #@TestSteps |
| | | #@TestPostamble |
| | | #@TestResult |
| | | --> |
| | | <testcase name="getTestCaseName('On-line initialisation')"> |
| | | <sequence> |
| | | <call function="'testCase_Preamble'"/> |
| | | <message> |
| | | 'Replication: Ldif Import: On-line initialisation. Initialise replicated servers using on-line export/import' |
| | | </message> |
| | | |
| | | <!-- Clean the servers in the topology |
| | | <call function="'deleteTrees'"> |
| | | [_topologyServerList, synchroSuffix, False] |
| | | </call> --> |
| | | |
| | | <!-- Delete manually added entry so that replication server won't add it automatically later on --> |
| | | <call function="'ldapDeleteWithScript'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : master.getHostname(), |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'dsDn' : ['uid=tfitter, ou=People,%s' % synchroSuffix] } |
| | | </call> |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <call function="'importLdifTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'taskID' : 'import task', |
| | | 'ldifFile' : '%s/replication/Example.ldif' % masterDataDir } |
| | | </call> |
| | | |
| | | <!-- Check some data was imported into "master" server --> |
| | | <call function="'checkImport'"> |
| | | { 'location' : clientHost, |
| | |
| | | 'expectedEntries' : ['uid=scarter,ou=People,o=example', |
| | | 'uid=dmiller, ou=People, o=example', |
| | | 'uid=rhunt, ou=People, o=example'], |
| | | 'startDS' : 'no' } |
| | | 'startDS' : 'no' |
| | | } |
| | | </call> |
| | | |
| | | <!-- Post-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ ldif import off-line: end external server initialization' |
| | | </message> |
| | | <call function="'postInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <message> |
| | | '+++++ ldif import off-line: add entry to %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' \ |
| | | % clientDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Verify the synchronization of the trees among the servers in |
| | | the topology --> |
| | | <call function="'verifyTrees'"> |
| | | [ clientHost, clientPath, master, consumerList, synchroSuffix ] |
| | | </call> |
| | | |
| | | <script> |
| | | knownIssue(3122) |
| | | </script> |
| | | |
| | | <call function="'testCase_Postamble'"/> |
| | | </sequence> |
| | | </testcase> |
| | | |
| | | |
| | | |
| | | <!--- Test Case information |
| | | #@TestMarker Replication Ldif Import Tests |
| | | #@TestName Replication: Ldif Import: On-line initialisation |
| | | #@TestID On-line initialisation |
| | | #@TestPurpose Initialise replicated servers using on-line |
| | | export/import |
| | | #@TestPreamble |
| | | #@TestSteps Call dsreplication pre-external-initialization |
| | | #@TestSteps Import data on server A |
| | | #@TestSteps Export suffix on server A |
| | | #@TestSteps Import exported file on other servers |
| | | #@TestSteps Call dsreplication post-external-initialization |
| | | #@TestSteps Add entry on server A |
| | | #@TestPostamble |
| | | #@TestResult Success if trees synchronized |
| | | --> |
| | | <testcase name="getTestCaseName('On-line initialisation')"> |
| | | <sequence> |
| | | <call function="'testCase_Preamble'"/> |
| | | <message> |
| | | 'Replication: Ldif Import: On-line initialisation. Initialise \ |
| | | replicated servers using on-line export/import' |
| | | </message> |
| | | |
| | | <!-- Pre-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ ldif import on-line: prepare servers for external \ |
| | | initialization' |
| | | </message> |
| | | <call function="'preInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'localOnly' : False, |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <message> |
| | | '+++++ ldif import on-line: import data on %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'importLdifTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'taskID' : 'import task', |
| | | 'ldifFile' : '%s/replication/Example.ldif' \ |
| | | % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Check some data was imported into "master" server --> |
| | | <call function="'checkImport'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsHost' : masterHost, |
| | | 'dsPort' : master.getPort(), |
| | | 'dsDn' : master.getRootDn(), |
| | | 'dsPswd' : master.getRootPwd(), |
| | | 'expectedEntries' : ['uid=scarter,ou=People,o=example', |
| | | 'uid=dmiller, ou=People, o=example', |
| | | 'uid=rhunt, ou=People, o=example'], |
| | | 'startDS' : 'no' |
| | | } |
| | | </call> |
| | | |
| | | <script> |
| | | sourceFile = '%s/replication/master_export_online.ldif' \ |
| | | % masterDataDir |
| | | </script> |
| | | |
| | | <!-- Export data from "master" server --> |
| | | <message> |
| | | '+++++ ldif import on-line: export suffix on server %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'exportLdifTask'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'taskID' : 'export task', |
| | | 'ldifFile' : '%s/replication/master_export_online.ldif' % masterDataDir } |
| | | 'ldifFile' : sourceFile |
| | | } |
| | | </call> |
| | | |
| | | <!-- Copy export file to "consumer" servers and import it --> |
| | | <paralleliterate var="consumer" in="consumerList"> |
| | | <sequence> |
| | | <script> |
| | | filename = 'master_export_online_ldif' |
| | | destinationFile = '%s/%s/replication/%s'\ |
| | | % (consumer.getDir(),relativeDataDir, |
| | | filename) |
| | | </script> |
| | | |
| | | <call function="'copyFile'"> |
| | | { 'location' : masterHost, |
| | | 'remotehost' : consumer.getHostname(), |
| | | 'srcfile' : '%s/replication/master_export_online.ldif' % masterDataDir, |
| | | 'destfile' : '%s/%s/replication/master_export_online.ldif' % (consumer.getDir(),relativeDataDir) } |
| | | 'srcfile' : sourceFile, |
| | | 'destfile' : destinationFile |
| | | } |
| | | </call> |
| | | |
| | | <message> |
| | | '+++++ ldif import on-line: import exported file on %s:%s'\ |
| | | % (consumer.getHostname(), consumer.getPort()) |
| | | </message> |
| | | <call function="'importLdifTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstanceDn' : consumer.getRootDn(), |
| | | 'dsInstancePswd' : consumer.getRootPwd(), |
| | | 'taskID' : 'import task', |
| | | 'ldifFile' : '%s/%s/replication/master_export_online.ldif' % (consumer.getDir(),relativeDataDir) } |
| | | 'ldifFile' : destinationFile |
| | | } |
| | | </call> |
| | | </sequence> |
| | | </paralleliterate> |
| | | |
| | | |
| | | <!-- Post-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ ldif import on-line: end external server initialization' |
| | | </message> |
| | | <call function="'postInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <message> |
| | | '+++++ ldif import on-line: add entry to %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' % clientDataDir } |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' \ |
| | | % clientDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Verify the synchronization of the trees among the servers in the topology --> |
| | | <!-- Verify the synchronization of the trees among the servers in |
| | | the topology --> |
| | | <call function="'verifyTrees'"> |
| | | [ clientHost, clientPath, master, consumerList, synchroSuffix ] |
| | | </call> |
| | |
| | | |
| | | |
| | | <import machine="STAF_LOCAL_HOSTNAME" |
| | | file="'%s/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/> |
| | | file="'%s/testcases/replication/replication_cleanup.xml' |
| | | % (TESTS_DIR)"/> |
| | | <call function="'replication_cleanup'" /> |
| | | |
| | | <call function="'testSuite_Postamble'"/> |
| | |
| | | <call function="'testSuite_Preamble'"/> |
| | | <!--- Test Suite information |
| | | #@TestSuiteName Replication Re-Synchronization Tests |
| | | #@TestSuitePurpose Verify that the servers in a replicated topology can be initialised with an old backup and still re-synchronize. |
| | | #@TestSuitePurpose Verify that the servers in a replicated topology |
| | | can be initialised with an old backup and still |
| | | re-synchronize. |
| | | #@TestSuiteID Re-Synchronization Tests |
| | | #@TestSuiteGroup Re-Synchronization |
| | | #@TestGroup Replication |
| | |
| | | --> |
| | | |
| | | <import machine="STAF_LOCAL_HOSTNAME" |
| | | file="'%s/testcases/replication/replication_setup.xml' % (TESTS_DIR)"/> |
| | | <call function="'replication_setup'" /> |
| | | file="'%s/testcases/replication/replication_setup.xml' |
| | | % (TESTS_DIR)"/> |
| | | <call function="'replication_setup'"> |
| | | { 'dataFile' : 'Example.ldif' } |
| | | </call> |
| | | |
| | | <script> |
| | | synchroSuffix = master.getSynchronizedSuffixList()[0].getSuffixDn() |
| | | </script> |
| | | |
| | | <!--- Test Case information |
| | | #@TestMarker Replication Re-Synchronization Tests |
| | | #@TestName Replication: Re-Synchronization: Off-line initialisation |
| | | #@TestName Replication: Re-Synchronization: Off-line |
| | | initialisation |
| | | #@TestID Off-line initialisation |
| | | #@TestPurpose Initialise replicated servers using off-line backup/restore |
| | | #@TestPreamble |
| | | #@TestSteps |
| | | #@TestPurpose Initialise replicated servers using off-line |
| | | backup/restore |
| | | #@TestPreamble Back-up server A |
| | | #@TestSteps Add entry on server A |
| | | #@TestSteps Stop servers |
| | | #@TestSteps Restore back-up on other servers |
| | | #@TestSteps Start servers |
| | | #@TestPostamble |
| | | #@TestResult |
| | | #@TestResult Success if trees synchronized |
| | | --> |
| | | <testcase name="getTestCaseName('Off-line initialisation')"> |
| | | <sequence> |
| | | <call function="'testCase_Preamble'"/> |
| | | <message> |
| | | 'Replication: Re-Synchronization: Off-line initialisation. Initialise replicated servers using off-line backup/restore' |
| | | 'Replication: Re-Synchronization: Off-line initialisation. \ |
| | | Initialise replicated servers using off-line backup/restore' |
| | | </message> |
| | | |
| | | <!-- Stop the servers in the topology --> |
| | | <call function="'stopServers'"> |
| | | [_topologyServerList] |
| | | </call> |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <call function="'ImportLdifWithScript'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | | 'dsBackEnd' : 'userRoot', |
| | | 'dsLdifFile' : '%s/replication/Example.ldif' % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Check some data was imported into "master" server --> |
| | | <call function="'checkImport'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsHost' : masterHost, |
| | | 'dsPort' : master.getPort(), |
| | | 'dsDn' : master.getRootDn(), |
| | | 'dsPswd' : master.getRootPwd(), |
| | | 'expectedEntries' : ['uid=scarter,ou=People,o=example', |
| | | 'uid=dmiller, ou=People, o=example', |
| | | 'uid=rhunt, ou=People, o=example'] |
| | | } |
| | | </call> |
| | | |
| | | <!-- Backup "master" server --> |
| | | <call function="'backup'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath, |
| | | 'backupDir' : '%s/replication/master_backup' % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Start the "master" server --> |
| | | <call function="'StartDsWithScript'"> |
| | | { 'location' : masterHost, |
| | | 'dsPath' : masterPath |
| | | } |
| | | </call> |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <message> |
| | | '+++++ resynchronization off-line: add entry to %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' % clientDataDir |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' \ |
| | | % clientDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Copy backup to "consumer" servers and restore it --> |
| | | <!-- Stop the "consumer" servers --> |
| | | <call function="'stopServers'"> |
| | | [consumerList] |
| | | </call> |
| | | |
| | | <!-- Copy master backup to "consumer" servers and restore it --> |
| | | <paralleliterate var="consumer" in="consumerList"> |
| | | <sequence> |
| | | <if expr="os.path.exists('%s/config/schematokens.dat' % dsPath)"> |
| | | <call function="'copyFile'"> |
| | | { 'srcfile' : '%s/config/schematokens.dat' % dsPath, |
| | | 'destfile' : '%s/%s/config/schematokens.dat' % (consumer.getDir(),OPENDSNAME), |
| | | 'remotehost' : consumer.getHostname() |
| | | } |
| | | </call> |
| | | </if> |
| | | <call function="'CopyFolderByExtension'"> |
| | | { 'location' : masterHost, |
| | | 'remotehost' : consumer.getHostname(), |
| | | 'srcfolder' : '%s/replication/master_backup' % masterDataDir, |
| | | 'destfolder' : '%s/%s/replication/master_backup' % (consumer.getDir(),relativeDataDir), |
| | | 'srcfolder' : masterBackupDir, |
| | | 'destfolder' : '%s/%s/replication/master_backup' \ |
| | | % (consumer.getDir(),relativeDataDir), |
| | | 'extension' : '*' |
| | | } |
| | | </call> |
| | | |
| | | <message> |
| | | '+++++ resynchronization off-line: restore backup on %s:%s'\ |
| | | % (consumer.getHostname(), consumer.getPort()) |
| | | </message> |
| | | <call function="'restore'"> |
| | | { 'location' : consumer.getHostname(), |
| | | 'dsPath' : '%s/%s' % (consumer.getDir(), OPENDSNAME), |
| | | 'backupDir' : '%s/%s/replication/master_backup' % (consumer.getDir(),relativeDataDir) |
| | | 'backupDir' : '%s/%s/replication/master_backup' \ |
| | | % (consumer.getDir(),relativeDataDir) |
| | | } |
| | | </call> |
| | | </sequence> |
| | |
| | | [consumerList] |
| | | </call> |
| | | |
| | | <!-- Verify the synchronization of the trees among the servers in the topology --> |
| | | <!-- Verify the synchronization of the trees among the servers in |
| | | the topology --> |
| | | <call function="'verifyTrees'"> |
| | | [ clientHost, clientPath, master, consumerList, synchroSuffix ] |
| | | </call> |
| | |
| | | |
| | | <!--- Test Case information |
| | | #@TestMarker Replication Re-Synchronization Tests |
| | | #@TestName Replication: Re-Synchronization: On-line initialisation |
| | | #@TestName Replication: Re-Synchronization: On-line |
| | | initialisation |
| | | #@TestID On-line initialisation |
| | | #@TestPurpose Initialise replicated servers using on-line backup/restore |
| | | #@TestPurpose Initialise replicated servers using on-line |
| | | backup/restore |
| | | #@TestPreamble |
| | | #@TestSteps |
| | | #@TestSteps Call dsreplication pre-external-initialization |
| | | #@TestSteps Import data on server A |
| | | #@TestSteps Back-up server A |
| | | #@TestSteps Add entry on server A |
| | | #@TestSteps Restore back-up on other servers |
| | | #@TestSteps Call dsreplication post-external-initialization |
| | | #@TestPostamble |
| | | #@TestResult |
| | | #@TestResult Success if trees synchronized |
| | | --> |
| | | <testcase name="getTestCaseName('On-line initialisation')"> |
| | | <sequence> |
| | | <call function="'testCase_Preamble'"/> |
| | | <message> |
| | | 'Replication: Re-Synchronization: On-line initialisation. Initialise replicated servers using on-line backup/restore' |
| | | 'Replication: Re-Synchronization: On-line initialisation. \ |
| | | Initialise replicated servers using on-line backup/restore' |
| | | </message> |
| | | |
| | | <!-- Clean the servers in the topology |
| | | <call function="'deleteTrees'"> |
| | | [_topologyServerList, synchroSuffix, False] |
| | | </call> --> |
| | | |
| | | <!-- Delete manually added entry so that replication server won't add it automatically later on --> |
| | | <call function="'ldapDeleteWithScript'"> |
| | | <!-- Pre-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ resynchronization on-line: prepare servers for external \ |
| | | initialization' |
| | | </message> |
| | | <call function="'preInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : master.getHostname(), |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'dsDn' : ['uid=tfitter, ou=People,%s' % synchroSuffix] |
| | | 'localOnly' : False, |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Import data into "master" server --> |
| | | <message> |
| | | '+++++ resynchronization on-line: import data on %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'importLdifTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'taskID' : 'import task', |
| | | 'ldifFile' : '%s/replication/Example.ldif' % masterDataDir |
| | | 'ldifFile' : '%s/replication/Example.ldif' \ |
| | | % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | |
| | | </call> |
| | | |
| | | <!-- Backup "master" server --> |
| | | <message> |
| | | '+++++ resynchronization on-line: back-up server %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'backupTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'taskID' : 'backup task', |
| | | 'backupDir' : '%s/replication/master_backup_online' % masterDataDir |
| | | 'backupDir' : '%s/replication/master_backup_online' \ |
| | | % masterDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Add entry to "master" server --> |
| | | <message> |
| | | '+++++ resynchronization on-line: add entry to %s:%s' \ |
| | | % (masterHost, master.getPort()) |
| | | </message> |
| | | <call function="'addEntry'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'dsInstanceDn' : master.getRootDn(), |
| | | 'dsInstancePswd' : master.getRootPwd(), |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' % clientDataDir |
| | | 'entryToBeAdded' : '%s/replication/tfitter.ldif' \ |
| | | % clientDataDir |
| | | } |
| | | </call> |
| | | |
| | | <!-- Copy backup to "consumer" servers and restore it --> |
| | | <paralleliterate var="consumer" in="consumerList"> |
| | | <sequence> |
| | | <if expr="os.path.exists('%s/config/schematokens.dat' % dsPath)"> |
| | | <call function="'copyFile'"> |
| | | { 'srcfile' : '%s/config/schematokens.dat' % dsPath, |
| | | 'destfile' : '%s/%s/config/schematokens.dat' % (consumer.getDir(),OPENDSNAME), |
| | | 'remotehost' : consumer.getHostname() |
| | | } |
| | | </call> |
| | | </if> |
| | | <call function="'CopyFolderByExtension'"> |
| | | { 'location' : masterHost, |
| | | 'remotehost' : consumer.getHostname(), |
| | | 'srcfolder' : '%s/replication/master_backup_online' % masterDataDir, |
| | | 'destfolder' : '%s/%s/replication/master_backup_online' % (consumer.getDir(),relativeDataDir), |
| | | 'srcfolder' : '%s/replication/master_backup_online' \ |
| | | % masterDataDir, |
| | | 'destfolder' : '%s/%s/replication/master_backup_online' \ |
| | | % (consumer.getDir(),relativeDataDir), |
| | | 'extension' : '*' |
| | | } |
| | | </call> |
| | | |
| | | <message> |
| | | '+++++ resynchronization on-line: restore back-up on %s:%s'\ |
| | | % (consumer.getHostname(), consumer.getPort()) |
| | | </message> |
| | | <call function="'restoreTask'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | |
| | | 'dsInstanceDn' : consumer.getRootDn(), |
| | | 'dsInstancePswd' : consumer.getRootPwd(), |
| | | 'taskID' : 'restore task', |
| | | 'backupDir' : '%s/%s/replication/master_backup_online' % (consumer.getDir(),relativeDataDir) |
| | | 'backupDir' : '%s/%s/replication/master_backup_online' \ |
| | | % (consumer.getDir(),relativeDataDir) |
| | | } |
| | | </call> |
| | | </sequence> |
| | | </paralleliterate> |
| | | |
| | | <!-- Verify the synchronization of the trees among the servers in the topology --> |
| | | <!-- Post-initialise the servers in the topology --> |
| | | <message> |
| | | '+++++ resynchronization on-line: end external server \ |
| | | initialization' |
| | | </message> |
| | | <call function="'postInitializeReplication'"> |
| | | { 'location' : clientHost, |
| | | 'dsPath' : clientPath, |
| | | 'dsInstanceHost' : masterHost, |
| | | 'dsInstancePort' : master.getPort(), |
| | | 'replicationDnList' : [synchroSuffix], |
| | | 'adminUID' : adminUID, |
| | | 'adminPswd' : adminPswd |
| | | } |
| | | </call> |
| | | |
| | | <!-- Verify the synchronization of the trees among the servers in |
| | | the topology --> |
| | | <call function="'verifyTrees'"> |
| | | [ clientHost, clientPath, master, consumerList, synchroSuffix ] |
| | | </call> |
| | |
| | | </testcase> |
| | | |
| | | <import machine="STAF_LOCAL_HOSTNAME" |
| | | file="'%s/testcases/replication/replication_cleanup.xml' % (TESTS_DIR)"/> |
| | | file="'%s/testcases/replication/replication_cleanup.xml' |
| | | % (TESTS_DIR)"/> |
| | | <call function="'replication_cleanup'" /> |
| | | |
| | | <call function="'testSuite_Postamble'"/> |