@Override public void go() throws Exception { try (FSDataOutputStream stream = fs.create(path, WriteMode.OVERWRITE)) { assertTrue(fs.getNumberOfOpenOutputStreams() <= maxConcurrentOutputStreams); assertTrue(fs.getTotalNumberOfOpenStreams() <= maxConcurrentStreamsTotal); final Random rnd = new Random(); final byte[] data = new byte[rnd.nextInt(10000) + 1]; rnd.nextBytes(data); stream.write(data); } } }
@Override public void go() throws Exception { try (FSDataOutputStream stream = fs.create(path, WriteMode.OVERWRITE)) { assertTrue(fs.getNumberOfOpenOutputStreams() <= maxConcurrentOutputStreams); assertTrue(fs.getTotalNumberOfOpenStreams() <= maxConcurrentStreamsTotal); final Random rnd = new Random(); final byte[] data = new byte[rnd.nextInt(10000) + 1]; rnd.nextBytes(data); stream.write(data); waitTillWokenUp(); // try to write one more thing, which might/should fail with an I/O exception stream.write(rnd.nextInt()); } } }
@Test public void testFailingStreamsUnregister() throws Exception { final LimitedConnectionsFileSystem fs = new LimitedConnectionsFileSystem(new FailFs(), 1); assertEquals(0, fs.getNumberOfOpenInputStreams()); assertEquals(0, fs.getNumberOfOpenOutputStreams()); assertEquals(0, fs.getTotalNumberOfOpenStreams()); try { fs.open(new Path(tempFolder.newFile().toURI())); fail("this is expected to fail with an exception"); } catch (IOException e) { // expected } try { fs.create(new Path(tempFolder.newFile().toURI()), WriteMode.NO_OVERWRITE); fail("this is expected to fail with an exception"); } catch (IOException e) { // expected } assertEquals(0, fs.getNumberOfOpenInputStreams()); assertEquals(0, fs.getNumberOfOpenOutputStreams()); assertEquals(0, fs.getTotalNumberOfOpenStreams()); }