diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolverTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolverTest.java index fbce42d118e1df3f79b64f9fd8101bede832e38b..f56df8316e7f72ec431fa3f608d040fe2ab950ca 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolverTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/ftp/resolver/TemplateBasedDataSetResourceResolverTest.java @@ -16,6 +16,9 @@ package ch.systemsx.cisd.openbis.dss.generic.server.ftp.resolver; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; @@ -146,8 +149,15 @@ public class TemplateBasedDataSetResourceResolverTest extends AssertJUnit IHierarchicalContent content = getHierarchicalContentMock(dataSetCode); IHierarchicalContentNode rootNode = getHierarchicalRootNodeMock(dataSetCode); - allowing(content).getNode(StringUtils.EMPTY); + one(content).getNode(StringUtils.EMPTY); will(returnValue(rootNode)); + + exactly(2).of(rootNode).isDirectory(); + will(returnValue(true)); + + one(rootNode).getFile(); + will(throwException(new UnsupportedOperationException())); + } }); @@ -186,8 +196,77 @@ public class TemplateBasedDataSetResourceResolverTest extends AssertJUnit allowing(content).getNode(subPath); will(returnValue(mockNode)); - one(mockNode).isDirectory(); + one(mockNode).getRelativePath(); + will(returnValue(subPath)); + + exactly(2).of(mockNode).isDirectory(); + will(returnValue(false)); + + one(mockNode).getFileLength(); + will(returnValue(2L)); + + one(mockNode).getFile(); + will(returnValue(null)); + } + }); + + FtpFile ftpFile = resolver.resolve(path, resolverContext); + + assertNotNull(ftpFile); + assertEquals("fileName.txt", ftpFile.getName()); + assertTrue(ftpFile.isFile()); + } + + @Test + public void testHierarchicalContentClosed() throws IOException + { + FtpServerConfig config = + new FtpServerConfigBuilder().withTemplate(SIMPLE_TEMPLATE).getConfig(); + resolver = new TemplateBasedDataSetResourceResolver(config); + + final String dataSetCode = "dataSetCode"; + final String subPath = "fileName.txt"; + + String path = + EXP_ID + FtpConstants.FILE_SEPARATOR + dataSetCode + FtpConstants.FILE_SEPARATOR + + subPath; + + List<ExternalData> dataSets = Arrays.asList(createDataSet(dataSetCode, DS_TYPE1)); + + prepareExperimentListExpectations(dataSets); + + context.checking(new Expectations() + { + { + IHierarchicalContent content = getHierarchicalContentMock(dataSetCode); + + one(hierarchicalContentProvider).asContent(dataSetCode); + will(returnValue(content)); + one(content).close(); + + IHierarchicalContentNode mockNode = + context.mock(IHierarchicalContentNode.class); + + ByteArrayInputStream is = new ByteArrayInputStream(new byte[] {}); + + allowing(content).getNode(subPath); + will(returnValue(mockNode)); + + one(mockNode).getRelativePath(); + will(returnValue(subPath)); + + exactly(2).of(mockNode).isDirectory(); will(returnValue(false)); + + one(mockNode).getFileLength(); + will(returnValue(2L)); + + one(mockNode).getFile(); + will(returnValue(null)); + + one(mockNode).getInputStream(); + will(returnValue(is)); + } }); @@ -196,6 +275,9 @@ public class TemplateBasedDataSetResourceResolverTest extends AssertJUnit assertNotNull(ftpFile); assertEquals("fileName.txt", ftpFile.getName()); assertTrue(ftpFile.isFile()); + InputStream fileContent = ftpFile.createInputStream(0); + // this call will also close the IHierarchicalContent + fileContent.close(); } @Test @@ -269,8 +351,9 @@ public class TemplateBasedDataSetResourceResolverTest extends AssertJUnit String mockName = getHierarchicalContentMockName(dataSet.getCode()); IHierarchicalContent content = context.mock(IHierarchicalContent.class, mockName); - allowing(hierarchicalContentProvider).asContent(dataSet.getCode()); + one(hierarchicalContentProvider).asContent(dataSet.getCode()); will(returnValue(content)); + one(content).close(); String rootMockName = getRootNodeMockName(dataSet.getCode()); IHierarchicalContentNode rootNode = @@ -338,6 +421,12 @@ public class TemplateBasedDataSetResourceResolverTest extends AssertJUnit context.mock(IHierarchicalContentNode.class, fileName); result.add(mockNode); + allowing(mockNode).getFileLength(); + will(returnValue(10L)); + + allowing(mockNode).getFile(); + will(throwException(new UnsupportedOperationException())); + allowing(mockNode).getName(); will(returnValue(fileName));