summaryrefslogtreecommitdiff
path: root/wintest/wintest.py
diff options
context:
space:
mode:
Diffstat (limited to 'wintest/wintest.py')
-rw-r--r--wintest/wintest.py40
1 files changed, 36 insertions, 4 deletions
diff --git a/wintest/wintest.py b/wintest/wintest.py
index d7ca5fe067..659b15ec43 100644
--- a/wintest/wintest.py
+++ b/wintest/wintest.py
@@ -19,11 +19,13 @@ class wintest():
def getvar(self, varname):
'''return a substitution variable'''
+ if not varname in self.vars:
+ return None
return self.vars[varname]
def setwinvars(self, vm, prefix='WIN'):
'''setup WIN_XX vars based on a vm name'''
- for v in ['VM', 'HOSTNAME', 'USER', 'PASS', 'SNAPSHOT', 'BASEDN', 'REALM', 'DOMAIN']:
+ for v in ['VM', 'HOSTNAME', 'USER', 'PASS', 'SNAPSHOT', 'BASEDN', 'REALM', 'DOMAIN', 'IP']:
vname = '%s_%s' % (vm, v)
if vname in self.vars:
self.setvar("%s_%s" % (prefix,v), self.substitute("${%s}" % vname))
@@ -343,13 +345,32 @@ class wintest():
child.expect([pexpect.EOF, pexpect.TIMEOUT], timeout=5)
return True
-
- def open_telnet(self, hostname, username, password, retries=60, delay=5, set_time=False, set_ip=False, disable_firewall=True, run_tlntadmn=True):
+
+
+ def resolve_ip(self, hostname, retries=60, delay=5):
+ '''resolve an IP given a hostname, assuming NBT'''
+ while retries > 0:
+ child = self.pexpect_spawn("bin/nmblookup %s" % hostname)
+ i = child.expect(['\d+.\d+.\d+.\d+', "Lookup failed"])
+ if i == 0:
+ return child.after
+ retries -= 1
+ time.sleep(delay)
+ raise RuntimeError("Failed to resolve IP of %s" % hostname)
+
+
+ def open_telnet(self, hostname, username, password, retries=60, delay=5, set_time=False, set_ip=False,
+ disable_firewall=True, run_tlntadmn=True):
'''open a telnet connection to a windows server, return the pexpect child'''
set_route = False
set_dns = False
+ if self.getvar('WIN_IP'):
+ ip = self.getvar('WIN_IP')
+ else:
+ ip = self.resolve_ip(hostname)
+ self.setvar('WIN_IP', ip)
while retries > 0:
- child = self.pexpect_spawn("telnet " + hostname + " -l '" + username + "'")
+ child = self.pexpect_spawn("telnet " + ip + " -l '" + username + "'")
i = child.expect(["Welcome to Microsoft Telnet Service",
"Denying new connections due to the limit on number of connections",
"No more connections are allowed to telnet server",
@@ -415,3 +436,14 @@ class wintest():
child.expect("Password for")
child.sendline(password)
child.expect("Authenticated to Kerberos")
+
+
+ def get_domains(self):
+ '''return a dictionary of DNS domains and IPs for named.conf'''
+ ret = {}
+ for v in self.vars:
+ if v[-6:] == "_REALM":
+ base = v[:-6]
+ if base + '_IP' in self.vars:
+ ret[self.vars[base + '_REALM']] = self.vars[base + '_IP']
+ return ret