package com.constellio.app.modules.es.connectors.smb.service; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Arrays; import com.constellio.app.modules.es.connectors.smb.security.WindowsPermissionsFactoryImpl; import jcifs.smb.SmbException; import jcifs.smb.SmbFile; import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDateTime; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import com.constellio.app.modules.es.connectors.smb.security.TrusteeManager; import com.constellio.app.modules.es.connectors.smb.security.WindowsPermissions; import com.constellio.app.modules.es.connectors.smb.security.WindowsPermissionsFactory; import com.constellio.app.modules.es.connectors.smb.service.SmbFileDTO.SmbFileDTOStatus; import com.constellio.app.modules.es.connectors.smb.testutils.SmbTestParams; import com.constellio.app.modules.es.connectors.spi.ConnectorLogger; import com.constellio.app.modules.es.services.ESSchemasRecordsServices; import com.constellio.sdk.tests.ConstellioTest; public class SmbFileDTOSimpleBuilderAcceptanceTest extends ConstellioTest { private ESSchemasRecordsServices es; @Mock TrusteeManager trusteeManager; @Mock ConnectorLogger logger; @Mock SmbFile smbFile; @Mock WindowsPermissions windowsPermissions; @Mock WindowsPermissionsFactory permissionsFactory; @Before public void setup() { MockitoAnnotations.initMocks(this); prepareSystem(withZeCollection().withConstellioESModule() .withAllTestUsers()); es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory()); } @Test public void givenGoodConditionsWhenBuildingDTOForFileThenGetFullDTO() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(true); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(SmbTestParams.EXISTING_FILE_LENGTH); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FULL_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getAllowTokens()).isEqualTo(Arrays.asList("r,ad,allowToken1", "r,ad,allowToken2")); assertThat(smbFileDTO.getAllowShareTokens()).isEqualTo(Arrays.asList("r,ad,allowShareToken1", "r,ad,allowShareToken2")); assertThat(smbFileDTO.getDenyTokens()).isEqualTo(Arrays.asList("r,ad,denyToken1", "r,ad,denyToken2")); assertThat(smbFileDTO.getDenyShareTokens()).isEqualTo(Arrays.asList("r,ad,denyShareToken1", "r,ad,denyShareToken2")); assertThat(smbFileDTO.getPermissionsHash()).isEqualTo(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); assertThat(smbFileDTO.isFile()).isTrue(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEqualTo(SmbTestParams.EXISTING_FILE_EXT); assertThat(smbFileDTO.getName()).isEqualTo(SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getLength()).isEqualTo(SmbTestParams.EXISTING_FILE_LENGTH); assertThat(smbFileDTO.getParsedContent()).isEqualTo(SmbTestParams.EXISTING_FILE_CONTENT); assertThat(smbFileDTO.getLanguage()).isEqualTo(SmbTestParams.EXISTING_FILE_LANG); assertThat(smbFileDTO.getErrorMessage()).isEmpty(); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenIssueWhenBuildingDTOForFileThenGetFailedDTOAndLog() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenThrow(new SmbException(123, false)); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(SmbTestParams.EXISTING_FILE_LENGTH); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FAILED_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getAllowTokens()).isEqualTo(Arrays.asList("r,ad,allowToken1", "r,ad,allowToken2")); assertThat(smbFileDTO.getAllowShareTokens()).isEqualTo(Arrays.asList("r,ad,allowShareToken1", "r,ad,allowShareToken2")); assertThat(smbFileDTO.getDenyTokens()).isEqualTo(Arrays.asList("r,ad,denyToken1", "r,ad,denyToken2")); assertThat(smbFileDTO.getDenyShareTokens()).isEqualTo(Arrays.asList("r,ad,denyShareToken1", "r,ad,denyShareToken2")); assertThat(smbFileDTO.getPermissionsHash()).isEqualTo(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); assertThat(smbFileDTO.isFile()).isFalse(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEmpty(); assertThat(smbFileDTO.getName()).isEmpty(); assertThat(smbFileDTO.getLength()).isEqualTo(-10); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).isNotEmpty(); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenGoodConditionsWhenBuildingDTOForFolderThenGetFullDTO() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FOLDER); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(false); when(smbFile.isDirectory()).thenReturn(true); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FOLDER); when(smbFile.length()).thenReturn(SmbTestParams.EXISTING_FILE_LENGTH); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FULL_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FOLDER); assertThat(smbFileDTO.getAllowTokens()).isEqualTo(Arrays.asList("r,ad,allowToken1", "r,ad,allowToken2")); assertThat(smbFileDTO.getAllowShareTokens()).isEqualTo(Arrays.asList("r,ad,allowShareToken1", "r,ad,allowShareToken2")); assertThat(smbFileDTO.getDenyTokens()).isEqualTo(Arrays.asList("r,ad,denyToken1", "r,ad,denyToken2")); assertThat(smbFileDTO.getDenyShareTokens()).isEqualTo(Arrays.asList("r,ad,denyShareToken1", "r,ad,denyShareToken2")); assertThat(smbFileDTO.getPermissionsHash()).isEqualTo(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); assertThat(smbFileDTO.isFile()).isFalse(); assertThat(smbFileDTO.isDirectory()).isTrue(); assertThat(smbFileDTO.getExtension()).isEmpty(); assertThat(smbFileDTO.getName()).isEqualTo(StringUtils.removeEnd(SmbTestParams.EXISTING_FOLDER,"/")); assertThat(smbFileDTO.getLength()).isZero(); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).isEmpty(); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenIssueWhenBuildingDTOForFolderThenGetFailedDTOAndLog() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FOLDER); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(false); when(smbFile.isDirectory()).thenThrow(new SmbException(123, false)); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FOLDER); when(smbFile.length()).thenReturn(SmbTestParams.EXISTING_FILE_LENGTH); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FAILED_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FOLDER); assertThat(smbFileDTO.getAllowTokens()).isEqualTo(Arrays.asList("r,ad,allowToken1", "r,ad,allowToken2")); assertThat(smbFileDTO.getAllowShareTokens()).isEqualTo(Arrays.asList("r,ad,allowShareToken1", "r,ad,allowShareToken2")); assertThat(smbFileDTO.getDenyTokens()).isEqualTo(Arrays.asList("r,ad,denyToken1", "r,ad,denyToken2")); assertThat(smbFileDTO.getDenyShareTokens()).isEqualTo(Arrays.asList("r,ad,denyShareToken1", "r,ad,denyShareToken2")); assertThat(smbFileDTO.getPermissionsHash()).isEqualTo(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); assertThat(smbFileDTO.isFile()).isFalse(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEmpty(); assertThat(smbFileDTO.getName()).isEmpty(); assertThat(smbFileDTO.getLength()).isEqualTo(-10); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).isNotEmpty(); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenFileTooBigWhenBuildingDTOForDocumentThenGetFailedDTO() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(true); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(20_000_000_000L); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FAILED_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getAllowTokens()).isEqualTo(Arrays.asList("r,ad,allowToken1", "r,ad,allowToken2")); assertThat(smbFileDTO.getAllowShareTokens()).isEqualTo(Arrays.asList("r,ad,allowShareToken1", "r,ad,allowShareToken2")); assertThat(smbFileDTO.getDenyTokens()).isEqualTo(Arrays.asList("r,ad,denyToken1", "r,ad,denyToken2")); assertThat(smbFileDTO.getDenyShareTokens()).isEqualTo(Arrays.asList("r,ad,denyShareToken1", "r,ad,denyShareToken2")); assertThat(smbFileDTO.getPermissionsHash()).isEqualTo(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); assertThat(smbFileDTO.isFile()).isTrue(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEqualTo(SmbTestParams.EXISTING_FILE_EXT); assertThat(smbFileDTO.getName()).isEqualTo(SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getLength()).isEqualTo(20_000_000_000L); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).contains("exceeds maximum size"); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenFileSizeZeroWhenBuildingDTOForDocumentThenGetFullDTO() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(true); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(0L); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FULL_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getAllowTokens()).isEqualTo(Arrays.asList("r,ad,allowToken1", "r,ad,allowToken2")); assertThat(smbFileDTO.getAllowShareTokens()).isEqualTo(Arrays.asList("r,ad,allowShareToken1", "r,ad,allowShareToken2")); assertThat(smbFileDTO.getDenyTokens()).isEqualTo(Arrays.asList("r,ad,denyToken1", "r,ad,denyToken2")); assertThat(smbFileDTO.getDenyShareTokens()).isEqualTo(Arrays.asList("r,ad,denyShareToken1", "r,ad,denyShareToken2")); assertThat(smbFileDTO.getPermissionsHash()).isEqualTo(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); assertThat(smbFileDTO.isFile()).isTrue(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEqualTo(SmbTestParams.EXISTING_FILE_EXT); assertThat(smbFileDTO.getName()).isEqualTo(SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getLength()).isEqualTo(0L); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).isEmpty(); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenNonExistingFileWhenBuildingDTOForFileThenGetComparativelyFastFailedDTO() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenThrow(new SmbException(123, false)); when(smbFile.isFile()).thenReturn(true); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(SmbTestParams.EXISTING_FILE_LENGTH); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FAILED_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getAllowTokens()).isEmpty(); assertThat(smbFileDTO.getAllowShareTokens()).isEmpty(); assertThat(smbFileDTO.getDenyTokens()).isEmpty(); assertThat(smbFileDTO.getDenyShareTokens()).isEmpty(); assertThat(smbFileDTO.getPermissionsHash()).isEmpty(); assertThat(smbFileDTO.isFile()).isFalse(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEmpty(); assertThat(smbFileDTO.getName()).isEmpty(); assertThat(smbFileDTO.getLength()).isEqualTo(-10L); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).isNotEmpty(); assertThat(smbFileDTO.getLastModified()).isEqualTo(-10L); } @Test public void givenPermissionsIssuesWhenBuildingDTOForFileThenGetFailedDTOWithErrorMessage() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, permissionsFactory)); when(windowsPermissions.getErrors()).thenReturn("Permissions issue"); when(windowsPermissions.getAllowTokenDocument()).thenReturn(SmbTestParams.ALLOW_TOKENS); when(windowsPermissions.getAllowTokenShare()).thenReturn(SmbTestParams.ALLOW_SHARE_TOKENS); when(windowsPermissions.getDenyTokenDocument()).thenReturn(SmbTestParams.DENY_TOKENS); when(windowsPermissions.getDenyTokenShare()).thenReturn(SmbTestParams.DENY_SHARE_TOKENS); when(windowsPermissions.getPermissionsHash()).thenReturn(SmbTestParams.EXISTING_FILE_PERMISSION_HASH); doReturn(windowsPermissions).when(builder) .getWindowsPermissions(any(SmbFile.class)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(true); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(SmbTestParams.EXISTING_FILE_LENGTH); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FAILED_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getAllowTokens()).isEmpty(); assertThat(smbFileDTO.getAllowShareTokens()).isEmpty(); assertThat(smbFileDTO.getDenyTokens()).isEmpty(); assertThat(smbFileDTO.getDenyShareTokens()).isEmpty(); assertThat(smbFileDTO.getPermissionsHash()).isEmpty(); assertThat(smbFileDTO.isFile()).isFalse(); assertThat(smbFileDTO.isDirectory()).isFalse(); assertThat(smbFileDTO.getExtension()).isEmpty(); assertThat(smbFileDTO.getName()).isEmpty(); assertThat(smbFileDTO.getLength()).isEqualTo(-10L); assertThat(smbFileDTO.getParsedContent()).isEmpty(); assertThat(smbFileDTO.getLanguage()).isEmpty(); assertThat(smbFileDTO.getErrorMessage()).contains("Permissions issue"); assertThat(smbFileDTO.getLastModified()).isEqualTo(123456L); } @Test public void givenPermissionsExceptionWhenBuildingDTOForDocumentThenGetFailedDTO() throws IOException { // Given LocalDateTime time1 = new LocalDateTime(); givenTimeIs(time1); WindowsPermissionsFactory windowsPermissionsFactory = new WindowsPermissionsFactoryImpl(trusteeManager, false); when(smbFile.getCanonicalPath()).thenReturn(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); SmbFileDTOSimpleBuilder builder = Mockito.spy(new SmbFileDTOSimpleBuilder(logger, es, windowsPermissionsFactory)); when(smbFile.exists()).thenReturn(true); when(smbFile.isFile()).thenReturn(true); when(smbFile.isDirectory()).thenReturn(false); when(smbFile.getName()).thenReturn(SmbTestParams.EXISTING_FILE); when(smbFile.length()).thenReturn(10_000_000L); when(smbFile.getInputStream()).thenReturn(new ByteArrayInputStream(SmbTestParams.EXISTING_FILE_CONTENT.getBytes())); when(smbFile.getLastModified()).thenReturn(123456L); when(smbFile.getShareSecurity(true)).thenThrow(new IOException("Permissions Exception")); // When SmbFileDTO smbFileDTO = builder.build(smbFile, true); // Then assertThat(smbFileDTO.getStatus()).isEqualTo(SmbFileDTOStatus.FAILED_DTO); assertThat(smbFileDTO.getLastFetchAttempt()).isEqualTo(time1); assertThat(smbFileDTO.getUrl()).isEqualTo(SmbTestParams.EXISTING_SHARE + SmbTestParams.EXISTING_FILE); assertThat(smbFileDTO.getErrorMessage()).contains("Permissions Exception"); } }