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 581072a8f0
commit 6a859d33aa
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; package org.apache.hadoop.fs.azurebfs;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FilterOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.EnumSet; import java.util.EnumSet;
@ -155,4 +156,32 @@ public class ITestAzureBlobFileSystemCreate extends
GenericTestUtils.assertExceptionContains(fnfe.getMessage(), inner); 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";
});
}
});
}
} }