public static void main(String[] args) throws IOException { ConnectionOptions options = new ConnectionOptions(); options.set(ADDRESS, "unix-box"); options.set(USERNAME, "demo"); options.set(PASSWORD, "secret"); options.set(OPERATING_SYSTEM, UNIX); options.set(CONNECTION_TYPE, SFTP); OverthereConnection connection = Overthere.getConnection("ssh", options); try { connection.execute(CmdLine.build("cp", "-r", "/var/log/apt", "/tmp/logs1")); OverthereFile logs1 = connection.getFile("/tmp/logs1"); OverthereFile logs2 = connection.getFile("/tmp/logs2"); logs2.delete(); System.err.println("Exists #1: " + logs1.exists()); System.err.println("Exists #2: " + logs2.exists()); logs1.renameTo(logs2); System.err.println("Exists #1: " + logs1.exists()); System.err.println("Exists #2: " + logs2.exists()); logs2.copyTo(logs1); System.err.println("Exists #1: " + logs1.exists()); System.err.println("Exists #2: " + logs2.exists()); logs1.deleteRecursively(); logs2.deleteRecursively(); System.err.println("Exists #1: " + logs1.exists()); System.err.println("Exists #2: " + logs2.exists()); } finally { connection.close(); } }
@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)); }
@Test public void shouldCreatePopulateListAndRemoveTemporaryDirectory() { final String prefix = "prefix"; final String suffix = "suffix"; OverthereFile tempDir = connection.getTempFile(prefix, suffix); assertThat( "Expected a non-null return value from HostConnection.getTempFile()", tempDir, notNullValue()); assertThat( "Expected name of temporary file to start with the prefix", tempDir.getName(), startsWith(prefix)); assertThat( "Expected name of temporary file to end with the suffix", tempDir.getName(), endsWith(suffix)); assertThat("Expected temporary file to not exist yet", tempDir.exists(), equalTo(false)); tempDir.mkdir(); assertThat( "Expected temporary directory to exist after creating it", tempDir.exists(), equalTo(true)); assertThat( "Expected temporary directory to be a directory", tempDir.isDirectory(), equalTo(true)); OverthereFile anotherTempDir = connection.getTempFile(prefix, suffix); assertThat( "Expected temporary directories created with identical prefix and suffix to still be different", tempDir.getPath(), not(equalTo(anotherTempDir.getPath()))); OverthereFile nested1 = tempDir.getFile("nested1"); OverthereFile nested2 = nested1.getFile("nested2"); OverthereFile nested3 = nested2.getFile("nested3"); assertThat("Expected deeply nested directory to not exist", nested3.exists(), equalTo(false)); try { nested3.mkdir(); fail("Expected not to be able to create a deeply nested directory in one go"); } catch (RuntimeIOException expected1) { } assertThat( "Expected deeply nested directory to still not exist", nested3.exists(), equalTo(false)); nested3.mkdirs(); assertThat( "Expected deeply nested directory to exist after invoking mkdirs on it", nested3.exists(), equalTo(true)); final byte[] contents = ("Contents of the temporary file created at " + System.currentTimeMillis() + "ms since the epoch") .getBytes(); OverthereFile regularFile = tempDir.getFile("somefile.txt"); OverthereUtils.write(contents, regularFile); List<OverthereFile> dirContents = tempDir.listFiles(); assertThat("Expected directory to contain two entries", dirContents.size(), equalTo(2)); assertThat( "Expected directory to contain parent of deeply nested directory", dirContents.contains(nested1), equalTo(true)); assertThat( "Expected directory to contain regular file that was just created", dirContents.contains(regularFile), equalTo(true)); try { nested1.delete(); } catch (RuntimeIOException expected2) { } nested1.deleteRecursively(); assertThat( "Expected parent of deeply nested directory to have been removed recursively", nested1.exists(), equalTo(false)); regularFile.delete(); tempDir.delete(); assertThat( "Expected temporary directory to not exist after removing it when it was empty", tempDir.exists(), equalTo(false)); }