package com.constellio.app.modules.es.connectors.smb; import static com.constellio.model.entities.records.Record.PUBLIC_TOKEN; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.es.model.connectors.ConnectorInstance; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbDocument; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder; import com.constellio.app.modules.es.services.ConnectorManager; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.model.entities.records.Record; import com.constellio.model.services.records.BulkRecordTransactionHandler; import com.constellio.model.services.records.BulkRecordTransactionHandlerOptions; import com.constellio.model.services.records.RecordServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.InDevelopmentTest; import com.constellio.sdk.tests.annotations.UiTest; import com.constellio.sdk.tests.setups.Users; @UiTest public class SmbRecordLoadAcceptTest extends ConstellioTest { public static final String SMB = "smb://"; public static final String FOLDER = "folder"; public static final String DOCUMENT = "document"; Users users = new Users(); RMTestRecords records = new RMTestRecords(zeCollection); RecordServices recordServices; private ConnectorInstance<?> connectorInstance; private ConnectorManager connectorManager; private ESSchemasRecordsServices es; @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withConstellioRMModule().withConstellioESModule().withRobotsModule().withAllTest(users) .withRMTest(records).withFoldersAndContainersOfEveryStatus().withDocumentsHavingContent()); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); connectorManager = es.getConnectorManager(); connectorInstance = connectorManager.createConnector(es.newConnectorSmbInstance().setCode("zeConnector").setEnabled(false) .setTitle("ze connector").setSeeds(asList("share")).setUsername("username").setPassword("password").setDomain( "domain") .setTraversalCode("zeTraversal")); } @Test @InDevelopmentTest public void testName() throws Exception { createTree(10, 10, 3, 2); newWebDriver(loggedAsUserInCollection(admin, zeCollection)); waitUntilICloseTheBrowsers(); } public void createTree(int numberOfFolders, int numberOfSubFolders, int numberOfLevel, int numberOfDocuments) { List<Record> smbRecords = new ArrayList<>(); List<Record> referenceRecords = new ArrayList<>(); BulkRecordTransactionHandlerOptions options = new BulkRecordTransactionHandlerOptions().withRecordsPerBatch(5000); BulkRecordTransactionHandler bulkTransactionsHandler = new BulkRecordTransactionHandler(recordServices, "SmbRecordLoad", options); for (int folderNumber = 0; folderNumber < numberOfFolders; folderNumber++) { ConnectorSmbFolder connectorSmbFolder = createConnectorSmbFolder(smbRecords, folderNumber); for (int documentNumber = 0; documentNumber < numberOfDocuments; documentNumber++) { createDocuments(smbRecords, referenceRecords, folderNumber, connectorSmbFolder); } List<ConnectorSmbFolder> parents = new ArrayList<>(); List<ConnectorSmbFolder> newParents = new ArrayList<>(); parents.add(connectorSmbFolder); referenceRecords.add(connectorSmbFolder.getWrappedRecord()); for (int level = 0; level < numberOfLevel; level++) { if (level != 0) { parents.clear(); parents.addAll(newParents); newParents.clear(); } for (ConnectorSmbFolder parentFolder : parents) { for (int subFolderNumber = 0; subFolderNumber < numberOfSubFolders; subFolderNumber++) { ConnectorSmbFolder newConnectorSmbFolder = createSubFolder(folderNumber, level, parentFolder, subFolderNumber); smbRecords.add(newConnectorSmbFolder.getWrappedRecord()); for (int documentNumber = 0; documentNumber < numberOfDocuments; documentNumber++) { createDocuments(smbRecords, referenceRecords, folderNumber, newConnectorSmbFolder); } newParents.add(newConnectorSmbFolder); if (!referenceRecords.contains(parentFolder.getWrappedRecord())) { referenceRecords.add(parentFolder.getWrappedRecord()); } } } System.out.println("================"); System.out.println(FOLDER + " " + folderNumber); System.out.println("Level " + level); System.out.println("================"); } System.out.println(FOLDER + " " + folderNumber); } try { bulkTransactionsHandler.append(smbRecords, referenceRecords); smbRecords.clear(); referenceRecords.clear(); } finally { bulkTransactionsHandler.closeAndJoin(); } } private ConnectorSmbFolder createSubFolder(int folderNumber, int level, ConnectorSmbFolder parentFolder, int k) { String folderName; String folderId; String folderUrl; folderName = FOLDER + folderNumber + level + k; folderId = UUID.randomUUID().toString(); folderUrl = parentFolder.getUrl() + folderId + "/"; System.out.println(folderUrl); ConnectorSmbFolder newConnectorSmbFolder = es.newConnectorSmbFolderWithId(folderId, connectorInstance); newConnectorSmbFolder.setTitle(folderName).setUrl(folderUrl).setParent(parentFolder.getId()) .setManualTokens( PUBLIC_TOKEN); return newConnectorSmbFolder; } private void createDocuments(List<Record> smbRecords, List<Record> referenceRecords, int folderNumber, ConnectorSmbFolder connectorSmbFolder) { String documentName = connectorSmbFolder.getTitle() + DOCUMENT + folderNumber; String documentId = UUID.randomUUID().toString(); String documentUrl = connectorSmbFolder.getUrl() + documentName + ".txt"; ConnectorSmbDocument connectorSmbDocument = es.newConnectorSmbDocumentWithId(documentId, connectorInstance); connectorSmbDocument.setTitle(documentName).setUrl(documentUrl).setParent(connectorSmbFolder.getId()) .setManualTokens( PUBLIC_TOKEN); smbRecords.add(connectorSmbDocument.getWrappedRecord()); if (!referenceRecords.contains(connectorSmbFolder.getWrappedRecord())) { referenceRecords.add(connectorSmbFolder.getWrappedRecord()); } } private ConnectorSmbFolder createConnectorSmbFolder(List<Record> smbRecords, int folderNumber) { Record parent = null; String folderName = FOLDER + folderNumber; String folderId = UUID.randomUUID().toString(); String folderUrl = SMB + folderId + "/"; ConnectorSmbFolder connectorSmbFolder = es.newConnectorSmbFolderWithId(folderId, connectorInstance); connectorSmbFolder.setTitle(folderName).setUrl(folderUrl).setParent(parent).setManualTokens( PUBLIC_TOKEN); smbRecords.add(connectorSmbFolder.getWrappedRecord()); return connectorSmbFolder; } }