-
Notifications
You must be signed in to change notification settings - Fork 0
/
paramiko_device_test.py
executable file
·106 lines (82 loc) · 3.01 KB
/
paramiko_device_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/python
#
# Copyright 2014 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Tests for paramiko_device."""
import cStringIO as StringIO
import push_exceptions as exceptions
import gflags
import mox
import paramiko_device
import time
import unittest
FLAGS = gflags.FLAGS
def FakeSshLibrary(stderr='', expected_command=''):
"""Creates a simple fake SSH connection."""
# pylint:disable=g-bad-name
class FakeSshClient(object):
def __init__(self, *unused_args, **unused_kwargs):
self._channels = {}
def close(self):
self._closed = True
def get_transport(self):
return self
def open_session(self):
return self
def settimeout(self, unused_timeout):
pass
def exec_command(self, command):
assert command == expected_command, (
'exec_command(%r) expected, got exec_command(%r)' % (
expected_command, command))
def makefile(self, unused_mode, unused_arg):
return StringIO.StringIO()
def makefile_stderr(self, unused_mode, unused_arg):
return StringIO.StringIO(stderr)
return FakeSshClient()
class ParamikoDeviceTest(unittest.TestCase):
def setUp(self):
self._mox = mox.Mox()
self._mox.StubOutWithMock(time, 'sleep')
self.user = 'joe'
self.pw = 'pass'
def tearDown(self):
self._mox.UnsetStubs()
self._mox.VerifyAll()
def testCommandSuccess(self):
self._mox.StubOutWithMock(paramiko_device.sshclient, 'Connect')
device = paramiko_device.ParamikoDevice()
device.host = '127.0.0.1'
device.loopback_ipv4 = '127.0.0.1'
paramiko_device.sshclient.Connect(
hostname=device.host, password=self.pw, port=22, ssh_keys=(),
username=self.user).AndReturn(
FakeSshLibrary(stderr='', expected_command='show version'))
self._mox.ReplayAll()
device.Connect(username=self.user, password=self.pw)
device.Cmd('show version')
def testCommandError(self):
self._mox.StubOutWithMock(paramiko_device.sshclient, 'Connect')
device = paramiko_device.ParamikoDevice()
device.host = '127.0.0.1'
device.loopback_ipv4 = '127.0.0.1'
paramiko_device.sshclient.Connect(
hostname=device.host, password=self.pw, port=22, ssh_keys=(),
username=self.user).AndReturn(
FakeSshLibrary(stderr='failboat', expected_command='show version'))
self._mox.ReplayAll()
device.Connect(username=self.user, password=self.pw)
self.assertRaises(exceptions.CmdError, device.Cmd, 'show version')
if __name__ == '__main__':
unittest.main()