예제 #1
0
 def test_run_with_unit_fallback(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status") as st:
         st.return_value = Status.from_text(self.precise_status_output)
         remote = remote_from_unit(client, unit)
         with patch.object(client, "get_juju_output") as mock_gjo:
             mock_gjo.side_effect = subprocess.CalledProcessError(255,
                                                                  "ssh",
                                                                  output="")
             with patch.object(remote, "_run_subprocess") as mock_run:
                 mock_run.return_value = "contents of /a/file"
                 output = remote.run("cat /a/file")
                 self.assertEqual(output, "contents of /a/file")
     mock_gjo.assert_called_once_with("ssh",
                                      unit,
                                      "cat /a/file",
                                      timeout=120)
     mock_run.assert_called_once_with([
         "ssh",
         "-o",
         "User ubuntu",
         "-o",
         "UserKnownHostsFile /dev/null",
         "-o",
         "StrictHostKeyChecking no",
         "-o",
         "PasswordAuthentication no",
         "10.55.60.1",
         "cat /a/file",
     ])
     self.assertRegexpMatches(
         self.log_stream.getvalue(),
         "(?m)^WARNING juju ssh to 'a-application/0' failed, .*")
예제 #2
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_run_with_unit_fallback(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status") as st:
         st.return_value = Status.from_text(self.precise_status_output)
         remote = remote_from_unit(client, unit)
         with patch.object(client, "get_juju_output") as mock_gjo:
             mock_gjo.side_effect = subprocess.CalledProcessError(
                 255, "ssh", output="")
             with patch.object(remote, "_run_subprocess") as mock_run:
                 mock_run.return_value = "contents of /a/file"
                 output = remote.run("cat /a/file")
                 self.assertEqual(output, "contents of /a/file")
     mock_gjo.assert_called_once_with("ssh", unit, "cat /a/file",
                                      timeout=120)
     mock_run.assert_called_once_with([
         "ssh",
         "-o", "User ubuntu",
         "-o", "UserKnownHostsFile /dev/null",
         "-o", "StrictHostKeyChecking no",
         "-o", "PasswordAuthentication no",
         "10.55.60.1",
         "cat /a/file",
     ])
     self.assertRegexpMatches(
         self.log_stream.getvalue(),
         "(?m)^WARNING juju ssh to 'a-application/0' failed, .*")
예제 #3
0
 def test_remote_from_unit_with_status(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     status = Status.from_text(self.win2012hvr2_status_output)
     remote = remote_from_unit(client, unit, status=status)
     self.assertEqual(
         repr(remote), "<WinRmRemote env='an-env' unit='a-application/0'"
         " addr='10.55.60.2'>")
     self.assertIs(True, remote.is_windows())
예제 #4
0
 def test_remote_from_unit(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.precise_status_output)
         remote = remote_from_unit(client, unit)
     self.assertEqual(repr(remote),
                      "<SSHRemote env='an-env' unit='a-application/0'>")
     self.assertIs(False, remote.is_windows())
예제 #5
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_remote_from_unit_with_status(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     status = Status.from_text(self.win2012hvr2_status_output)
     remote = remote_from_unit(client, unit, status=status)
     self.assertEqual(
         repr(remote),
         "<WinRmRemote env='an-env' unit='a-application/0'"
         " addr='10.55.60.2'>")
     self.assertIs(True, remote.is_windows())
예제 #6
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_remote_from_unit(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.precise_status_output)
         remote = remote_from_unit(client, unit)
     self.assertEqual(
         repr(remote),
         "<SSHRemote env='an-env' unit='a-application/0'>")
     self.assertIs(False, remote.is_windows())
예제 #7
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_cat_on_windows(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.win2012hvr2_status_output)
         response = winrm.Response(("contents of /a/file", "",  0))
         remote = remote_from_unit(client, unit)
         with patch.object(remote.session, "run_cmd", autospec=True,
                           return_value=response) as mock_run:
             output = remote.cat("/a/file")
             self.assertEqual(output, "contents of /a/file")
     st.assert_called_once_with()
     mock_run.assert_called_once_with("type", ["/a/file"])
예제 #8
0
 def test_cat_on_windows(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.win2012hvr2_status_output)
         response = winrm.Response(("contents of /a/file", "", 0))
         remote = remote_from_unit(client, unit)
         with patch.object(remote.session,
                           "run_cmd",
                           autospec=True,
                           return_value=response) as mock_run:
             output = remote.cat("/a/file")
             self.assertEqual(output, "contents of /a/file")
     st.assert_called_once_with()
     mock_run.assert_called_once_with("type", ["/a/file"])
예제 #9
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_run_cmd(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.win2012hvr2_status_output)
         response = winrm.Response(("some out", "some err",  0))
         remote = remote_from_unit(client, unit)
         with patch.object(remote.session, "run_cmd", autospec=True,
                           return_value=response) as mock_run:
             output = remote.run_cmd(
                 ["C:\\Program Files\\bin.exe", "/IN", "Bob's Stuff"])
             self.assertEqual(output, response)
     st.assert_called_once_with()
     mock_run.assert_called_once_with(
         '"C:\\Program Files\\bin.exe"', ['/IN "Bob\'s Stuff"'])
예제 #10
0
 def test_run_cmd(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.win2012hvr2_status_output)
         response = winrm.Response(("some out", "some err", 0))
         remote = remote_from_unit(client, unit)
         with patch.object(remote.session,
                           "run_cmd",
                           autospec=True,
                           return_value=response) as mock_run:
             output = remote.run_cmd(
                 ["C:\\Program Files\\bin.exe", "/IN", "Bob's Stuff"])
             self.assertEqual(output, response)
     st.assert_called_once_with()
     mock_run.assert_called_once_with('"C:\\Program Files\\bin.exe"',
                                      ['/IN "Bob\'s Stuff"'])
예제 #11
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_run_default_command_error_fallback(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     error = subprocess.CalledProcessError(1, "ssh", output="bad command")
     with patch.object(client, "get_status") as st:
         st.return_value = Status.from_text(self.precise_status_output)
         remote = remote_from_unit(client, unit)
         with patch.object(client, "get_juju_output") as mock_gjo:
             mock_gjo.side_effect = error
             with self.assertRaises(subprocess.CalledProcessError) as c:
                 remote.run("cat /a/file")
     self.assertIs(c.exception, error)
     mock_gjo.assert_called_once_with("ssh", unit, "cat /a/file",
                                      timeout=120)
     self.assertRegexpMatches(
         self.log_stream.getvalue(),
         "(?m)^WARNING juju ssh to 'a-application/0' failed, .*")
예제 #12
0
 def test_run_default_command_error_fallback(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     error = subprocess.CalledProcessError(1, "ssh", output="bad command")
     with patch.object(client, "get_status") as st:
         st.return_value = Status.from_text(self.precise_status_output)
         remote = remote_from_unit(client, unit)
         with patch.object(client, "get_juju_output") as mock_gjo:
             mock_gjo.side_effect = error
             with self.assertRaises(subprocess.CalledProcessError) as c:
                 remote.run("cat /a/file")
     self.assertIs(c.exception, error)
     mock_gjo.assert_called_once_with("ssh",
                                      unit,
                                      "cat /a/file",
                                      timeout=120)
     self.assertRegexpMatches(
         self.log_stream.getvalue(),
         "(?m)^WARNING juju ssh to 'a-application/0' failed, .*")
예제 #13
0
파일: test_remote.py 프로젝트: mjs/juju
 def test_copy_on_windows(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     dest = "/local/path"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.win2012hvr2_status_output)
         response = winrm.Response(("fake output", "",  0))
         remote = remote_from_unit(client, unit)
         with patch.object(remote.session, "run_ps", autospec=True,
                           return_value=response) as mock_run:
             with patch.object(remote, "_encoded_copy_to_dir",
                               autospec=True) as mock_cpdir:
                 remote.copy(dest, ["C:\\logs\\*", "%APPDATA%\\*.log"])
     mock_cpdir.assert_called_once_with(dest, "fake output")
     st.assert_called_once_with()
     self.assertEquals(mock_run.call_count, 1)
     self.assertRegexpMatches(
         mock_run.call_args[0][0],
         r'.*"C:\\logs\\[*]","%APPDATA%\\[*].log".*')
예제 #14
0
 def test_copy_on_windows(self):
     env = JujuData("an-env", {"type": "nonlocal"})
     client = ModelClient(env, None, None)
     unit = "a-application/0"
     dest = "/local/path"
     with patch.object(client, "get_status", autospec=True) as st:
         st.return_value = Status.from_text(self.win2012hvr2_status_output)
         response = winrm.Response(("fake output", "", 0))
         remote = remote_from_unit(client, unit)
         with patch.object(remote.session,
                           "run_ps",
                           autospec=True,
                           return_value=response) as mock_run:
             with patch.object(remote,
                               "_encoded_copy_to_dir",
                               autospec=True) as mock_cpdir:
                 remote.copy(dest, ["C:\\logs\\*", "%APPDATA%\\*.log"])
     mock_cpdir.assert_called_once_with(dest, "fake output")
     st.assert_called_once_with()
     self.assertEquals(mock_run.call_count, 1)
     self.assertRegexpMatches(mock_run.call_args[0][0],
                              r'.*"C:\\logs\\[*]","%APPDATA%\\[*].log".*')