public void testExceptionDuringUploadUniqueStart() throws Exception {
    MockFtplet.callback =
        new MockFtpletCallback() {
          public FtpletResult onUploadUniqueStart(FtpSession session, FtpRequest request)
              throws FtpException, IOException {
            throwException();
            return mockReturnValue;
          }
        };

    client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
    try {
      client.storeUniqueFile(TEST_FILE1.getName(), new ByteArrayInputStream(TESTDATA));
      fail("Must throw FTPConnectionClosedException");
    } catch (FTPConnectionClosedException e) {
      // OK
    } catch (SocketException e) {
      // OK
    }

    assertEquals(ROOT_DIR.listFiles().length, 0);
  }
  public void testExceptionDuringUploadUniqueEnd() throws Exception {
    MockFtplet.callback =
        new MockFtpletCallback() {
          public FtpletResult onUploadUniqueEnd(FtpSession session, FtpRequest request)
              throws FtpException, IOException {
            throwException();

            return mockReturnValue;
          }
        };

    client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
    assertTrue(client.storeUniqueFile(new ByteArrayInputStream(TESTDATA)));
    try {
      client.noop();
      fail("Must throw FTPConnectionClosedException");
    } catch (FTPConnectionClosedException e) {
      // OK
    } catch (SocketException e) {
      // OK
    }

    TestUtil.assertFileEqual(TESTDATA, ROOT_DIR.listFiles()[0]);
  }
  public void testUploadUnique() throws Exception {
    client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
    client.storeUniqueFile(new ByteArrayInputStream(TESTDATA));

    TestUtil.assertFileEqual(TESTDATA, ROOT_DIR.listFiles()[0]);
  }