@Override public long getLength() { return f.length(); }
@Test public void shouldCreateWriteReadAndRemoveTemporaryFile() throws IOException { final String prefix = "prefix"; final String suffix = "suffix"; final byte[] contents = ("Contents of the temporary file created at " + System.currentTimeMillis() + "ms since the epoch") .getBytes(); OverthereFile tempFile = connection.getTempFile(prefix, suffix); assertThat( "Expected a non-null return value from HostConnection.getTempFile()", tempFile, notNullValue()); assertThat( "Expected name of temporary file to start with the prefix", tempFile.getName(), startsWith(prefix)); assertThat( "Expected name of temporary file to end with the suffix", tempFile.getName(), endsWith(suffix)); assertThat("Expected temporary file to not exist yet", tempFile.exists(), equalTo(false)); OutputStream out = tempFile.getOutputStream(); try { out.write(contents); } finally { closeQuietly(out); } assertThat( "Expected temporary file to exist after writing to it", tempFile.exists(), equalTo(true)); assertThat( "Expected temporary file to not be a directory", tempFile.isDirectory(), equalTo(false)); assertThat( "Expected temporary file to have the size of the contents written to it", tempFile.length(), equalTo((long) contents.length)); assertThat("Expected temporary file to be readable", tempFile.canRead(), equalTo(true)); assertThat("Expected temporary file to be writeable", tempFile.canWrite(), equalTo(true)); // Windows systems don't support the concept of checking for executability if (connection.getHostOperatingSystem() == OperatingSystemFamily.UNIX) { assertFalse("Expected temporary file to not be executable", tempFile.canExecute()); } DataInputStream in = new DataInputStream(tempFile.getInputStream()); try { final byte[] contentsRead = new byte[contents.length]; in.readFully(contentsRead); assertThat( "Expected input stream to be exhausted after reading the full contents", in.available(), equalTo(0)); assertThat( "Expected contents in temporary file to be identical to data written into it", contentsRead, equalTo(contents)); } finally { closeQuietly(in); } tempFile.delete(); assertThat("Expected temporary file to no longer exist", tempFile.exists(), equalTo(false)); }