package com.constellio.app.modules.es.connectors.smb.jobmanagement; import com.constellio.app.modules.es.connectors.smb.ConnectorSmb; import com.constellio.app.modules.es.connectors.smb.cache.SmbConnectorContext; import com.constellio.app.modules.es.connectors.smb.cache.SmbConnectorContextServices; import com.constellio.app.modules.es.connectors.smb.jobmanagement.SmbJobFactoryImpl.SmbJobCategory; import com.constellio.app.modules.es.connectors.smb.service.SmbRecordService; import com.constellio.app.modules.es.connectors.smb.service.SmbShareService; import com.constellio.app.modules.es.connectors.smb.service.SmbShareServiceSimpleImpl; import com.constellio.app.modules.es.connectors.smb.testutils.SmbServiceTestUtils; import com.constellio.app.modules.es.connectors.smb.testutils.SmbTestParams; import com.constellio.app.modules.es.connectors.smb.utils.ConnectorSmbUtils; import com.constellio.app.modules.es.connectors.spi.ConnectorLogger; import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbFolder; import com.constellio.app.modules.es.model.connectors.smb.ConnectorSmbInstance; import com.constellio.app.modules.es.sdk.TestConnectorEventObserver; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.app.modules.es.services.crawler.DefaultConnectorEventObserver; import com.constellio.model.services.records.RecordServicesException; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.InDevelopmentTest; import com.constellio.sdk.tests.annotations.SlowTest; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.IOException; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; public class SmbJobFactoryImplRealTest extends ConstellioTest { @Mock private ConnectorSmb connector; private ESSchemasRecordsServices es; private ConnectorSmbInstance connectorInstance; @Mock private SmbShareService smbService; private ConnectorLogger logger; private TestConnectorEventObserver eventObserver; private ConnectorSmbUtils smbUtils; private SmbRecordService smbRecordService; private SmbDocumentOrFolderUpdater updater; private SmbServiceTestUtils testUtils; private SmbJobFactory jobFactory; @Before public void setup() { MockitoAnnotations.initMocks(this); prepareSystem(withZeCollection().withConstellioESModule() .withAllTestUsers()); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); smbUtils = new ConnectorSmbUtils(); connectorInstance = es.newConnectorSmbInstance() .setDomain(SmbTestParams.DOMAIN) .setUsername(SmbTestParams.USERNAME) .setPassword(SmbTestParams.PASSWORD) .setSeeds(asList(SmbTestParams.EXISTING_SHARE)) .setCode(SmbTestParams.INSTANCE_CODE) .setTraversalCode(SmbTestParams.TRAVERSAL_CODE) .setInclusions(asList(SmbTestParams.EXISTING_SHARE)) .setExclusions(asList("")) .setTitle(SmbTestParams.CONNECTOR_TITLE); es.getConnectorManager() .createConnector(connectorInstance); logger = new ConsoleConnectorLogger(); when(connector.getLogger()).thenReturn(logger); eventObserver = new TestConnectorEventObserver(es, new DefaultConnectorEventObserver(es, logger, SmbTestParams.CONNECTOR_OBSERVER)); smbRecordService = new SmbRecordService(es, connectorInstance); updater = new SmbDocumentOrFolderUpdater(connectorInstance, smbRecordService); } @Test @SlowTest @InDevelopmentTest public void givenWorstCaseOfSlowRetrievalOfModificationIndicatorsWhenUsingFactoryThenAverageFactoryLockTimeIsLessThan1Second() throws RecordServicesException, IOException, InterruptedException { testUtils = new SmbServiceTestUtils(); smbService = new SmbShareServiceSimpleImpl(testUtils.getValidCredentials(), testUtils.getFetchValidShare(), smbUtils, logger, es); SmbConnectorContextServices contextServices = new SmbConnectorContextServices(es); SmbConnectorContext context = contextServices.createContext(connectorInstance.getId()); jobFactory = new SmbJobFactoryImpl(connector, connectorInstance, eventObserver, smbService, smbUtils, smbRecordService, updater); ConnectorSmbFolder folder = es.newConnectorSmbFolder(connectorInstance) .setUrl(SmbTestParams.EXISTING_SHARE); es.getRecordServices() .update(folder.getWrappedRecord()); es.getRecordServices() .flush(); long average = 0; long firstLockTime = 0; for (int i = 0; i < 10; i++) { long startTime = System.currentTimeMillis(); jobFactory.get(SmbJobCategory.RETRIEVAL, SmbTestParams.EXISTING_SHARE, ""); long endTime = System.currentTimeMillis(); if (i == 0) { firstLockTime = endTime - startTime; } average += (endTime - startTime); } System.out.println("First lock time : " + firstLockTime + " ms"); assertThat(firstLockTime).isLessThan(10_000); average = (average / 10); System.out.println("Average lock time : " + average + " ms"); assertThat(average).isLessThan(1_000); } @After public void after() { eventObserver.close(); } }