public void copyRemoteDirectoryLocal() { var info = util.GetUsernameAndPassword(); using (var s = new SSHConnection(info.Item1, info.Item2)) { // Create a "complex" directory structure on the remote machine s .ExecuteCommand("mkdir -p /tmp/usergwatts/data") .ExecuteCommand("mkdir -p /tmp/usergwatts/data/d1") .ExecuteCommand("mkdir -p /tmp/usergwatts/data/d2") .ExecuteCommand("echo hi1 > /tmp/usergwatts/data/f1") .ExecuteCommand("echo hi2 > /tmp/usergwatts/data/d1/f2") .ExecuteCommand("echo hi3 > /tmp/usergwatts/data/d2/f3") .ExecuteCommand("echo hi4 > /tmp/usergwatts/data/d2/f4"); // Remove everything local var d = new DirectoryInfo("./data"); if (d.Exists) { d.Delete(true); d.Refresh(); } d.Create(); // Do the copy s.CopyRemoteDirectoryLocally("/tmp/usergwatts/data", d); Assert.IsTrue(File.Exists(Path.Combine(d.FullName, "f1"))); Assert.IsTrue(File.Exists(Path.Combine(d.FullName, "d1", "f2"))); Assert.IsTrue(File.Exists(Path.Combine(d.FullName, "d2", "f3"))); Assert.IsTrue(File.Exists(Path.Combine(d.FullName, "d2", "f4"))); } }
public void FetchOneFileWithNoBackupOverNetwork() { // This is a real run (so it is slow), and it will fetch data over the network. var d = new DirectoryInfo("FetchOneFileWithNoBackupOverNetwork"); if (d.Exists) { d.Delete(true); } d.Create(); var c = GenerateLocalConfigWithWorkingRemote(d); Locator.DisableAllLocators(true); var l = LocalMachine.GetLocation(c); var r = l.GetDSInfo("user.gwatts:user.gwatts.301295.EVNT.1"); Assert.AreEqual(1, l.GetDS(r, rep => Console.WriteLine(rep), fslist => fslist.Take(1).ToArray(), null, 0).Length); var dsdir = d.SubDir("user.gwatts.301295.EVNT.1"); Assert.IsTrue(dsdir.Exists); Assert.AreEqual(1, dsdir.EnumerateFiles("*.root.*", SearchOption.AllDirectories).Count()); // Next, make sure that there are no files left over up on the remote machine. var username = c["LinuxUserName"]; var machine = c["LinuxHost"]; using (var s = new SSHConnection(machine, username)) { bool stillThere = false; s.ExecuteCommand(string.Format("ls {0}", c["LinuxTempLocation"]), outLine => { Console.WriteLine("output of ls: " + outLine); stillThere |= !outLine.Contains("cannot access"); } ); Assert.IsFalse(stillThere); } }
/// <summary> /// Execute the command /// </summary> /// <param name="command"></param> /// <param name="output"></param> /// <param name="secondsTimeout"></param> /// <param name="refreshTimeout"></param> /// <param name="failNow"></param> /// <param name="dumpOnly"></param> /// <param name="seeAndRespond"></param> /// <param name="waitForCommandReponse"></param> /// <returns></returns> public ISSHConnection ExecuteCommand(string command, Action <string> output = null, int secondsTimeout = 3600, bool refreshTimeout = false, Func <bool> failNow = null, bool dumpOnly = false, Dictionary <string, string> seeAndRespond = null, bool waitForCommandReponse = true) { MakeConnections().Wait(); return(_deepestConnection.ExecuteCommand(command, output, secondsTimeout, refreshTimeout, failNow, dumpOnly, seeAndRespond, waitForCommandReponse)); }
/// <summary> /// Restore everything /// </summary> public void Dispose() { // Put the prompt back first, so that we come back properly. _connection._prompt = _oldPrompt; _connection.ExecuteCommand("exit"); }
public void ReadBackWithPrompt() { var info = util.GetUsernameAndPassword(); using (var s = new SSHConnection(info.Item1, info.Item2)) { Console.WriteLine("Before we do anything here is the environment:"); s.ExecuteCommand("set", l => Console.WriteLine(" set: " + l)); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); bool valueSet = false; bool sawPrompt = false; s.ExecuteCommand("prompt=\"what is up: \""); s.ExecuteCommandWithInput("read -p \"$prompt\" bogusvalue", new Dictionary<string, string>() { { "up:", "\nthis freak me out is a test" } }, l => { sawPrompt = sawPrompt || l.Contains("what is up"); Console.WriteLine("==> " + l); }) .ExecuteCommand("set", l => Console.WriteLine(" set: " + l)) .ExecuteCommand("echo bogusvalue $bogusvalue", l => { valueSet = valueSet || l.Contains("this"); Console.WriteLine("--> " + l); }); // THis guy isn't working yet because we don't seem to read in any input. Assert.Inconclusive(); Assert.IsTrue(sawPrompt); Assert.IsTrue(valueSet); } }
public void PWDOutputAsExpected() { var info = util.GetUsernameAndPassword(); using (var s = new SSHConnection(info.Item1, info.Item2)) { int count = 0; s.ExecuteCommand("pwd", l => { Assert.IsFalse(l.Contains("\r")); Assert.IsFalse(l.Contains("\n")); Console.WriteLine("--> " + l); count++; }); Assert.AreEqual(1, count); } }
public void ListDirectoryWithNoOutput() { var info = util.GetUsernameAndPassword(); using (var s = new SSHConnection(info.Item1, info.Item2)) { s.ExecuteCommand("ls -a | cat"); } }
public void ListDirectory() { var info = util.GetUsernameAndPassword(); using (var s = new SSHConnection(info.Item1, info.Item2)) { bool foundFile = false; s.ExecuteCommand("ls -a | cat", l => { if (l.Contains(".bash_profile")) { foundFile = true; } Console.WriteLine(l); }); Assert.IsTrue(foundFile); } }