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:
parent
c411a1468f
commit
429d5db3d9
|
@ -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";
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue