HADOOP-16785. followup to abfs close() fix.

Adds one extra test to the ABFS close logic, to explicitly
verify that the close sequence of FilterOutputStream is
not going to fail.

This is just a due-diligence patch, but it helps ensure
that no regressions creep in in future.

Contributed by Steve Loughran.

Change-Id: Ifd33a8c322d32513411405b15f50a1aebcfa6e48
This commit is contained in:
Steve Loughran 2020-01-20 16:23:41 +00:00
parent c411a1468f
commit 429d5db3d9
No known key found for this signature in database
GPG Key ID: D22CF846DBB162A0
1 changed files with 29 additions and 0 deletions

View File

@ -19,6 +19,7 @@
package org.apache.hadoop.fs.azurebfs;
import java.io.FileNotFoundException;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.util.EnumSet;
@ -155,4 +156,32 @@ public class ITestAzureBlobFileSystemCreate extends
GenericTestUtils.assertExceptionContains(fnfe.getMessage(), inner);
}
}
/**
* Attempts to write to the azure stream after it is closed will raise
* an IOException.
*/
@Test
public void testFilterFSWriteAfterClose() throws Throwable {
final AzureBlobFileSystem fs = getFileSystem();
Path testPath = new Path(TEST_FOLDER_PATH, TEST_CHILD_FILE);
FSDataOutputStream out = fs.create(testPath);
intercept(FileNotFoundException.class,
() -> {
try (FilterOutputStream fos = new FilterOutputStream(out)) {
fos.write('a');
fos.flush();
out.hsync();
fs.delete(testPath, false);
// trigger the first failure
throw intercept(FileNotFoundException.class,
() -> {
fos.write('b');
out.hsync();
return "hsync didn't raise an IOE";
});
}
});
}
}