1#!/usr/bin/python 2# 3# Samba Testing Framework for Unit-testing 4# 5 6import os, string, re 7import osver 8 9def get_server_list_from_string(s): 10 11 server_list = [] 12 13 # Format is a list of server:domain\username%password separated 14 # by commas. 15 16 for entry in string.split(s, ","): 17 18 # Parse entry 19 20 m = re.match("(.*):(.*)(\\\\|/)(.*)%(.*)", entry) 21 if not m: 22 raise "badly formed server list entry '%s'" % entry 23 24 server = m.group(1) 25 domain = m.group(2) 26 username = m.group(4) 27 password = m.group(5) 28 29 # Categorise servers 30 31 server_list.append({"platform": osver.os_version(server), 32 "hostname": server, 33 "administrator": {"username": username, 34 "domain": domain, 35 "password" : password}}) 36 37 return server_list 38 39def get_server_list(): 40 """Iterate through all sources of server info and append them all 41 in one big list.""" 42 43 server_list = [] 44 45 # The $STF_SERVERS environment variable 46 47 if os.environ.has_key("STF_SERVERS"): 48 server_list = server_list + \ 49 get_server_list_from_string(os.environ["STF_SERVERS"]) 50 51 return server_list 52 53def get_server(platform = None): 54 """Return configuration information for a server. The platform 55 argument can be a string either 'nt4' or 'nt5' for Windows NT or 56 Windows 2000 servers, or just 'nt' for Windows NT and higher.""" 57 58 server_list = get_server_list() 59 60 for server in server_list: 61 if platform: 62 p = server["platform"] 63 if platform == "nt": 64 if (p == osver.PLATFORM_NT4 or p == osver.PLATFORM_NT5): 65 return server 66 if platform == "nt4" and p == osver.PLATFORM_NT4: 67 return server 68 if platform == "nt5" and p == osver.PLATFORM_NT5: 69 return server 70 else: 71 # No filter defined, return first in list 72 return server 73 74 return None 75 76def dict_check(sample_dict, real_dict): 77 """Check that real_dict contains all the keys present in sample_dict 78 and no extras. Also check that common keys are of them same type.""" 79 tmp = real_dict.copy() 80 for key in sample_dict.keys(): 81 # Check existing key and type 82 if not real_dict.has_key(key): 83 raise ValueError, "dict does not contain key '%s'" % key 84 if type(sample_dict[key]) != type(real_dict[key]): 85 raise ValueError, "dict has differing types (%s vs %s) for key " \ 86 "'%s'" % (type(sample_dict[key]), type(real_dict[key]), key) 87 # Check dictionaries recursively 88 if type(sample_dict[key]) == dict: 89 dict_check(sample_dict[key], real_dict[key]) 90 # Delete visited keys from copy 91 del(tmp[key]) 92 # Any keys leftover are present in the real dict but not the sample 93 if len(tmp) == 0: 94 return 95 result = "dict has extra keys: " 96 for key in tmp.keys(): 97 result = result + key + " " 98 raise ValueError, result 99 100if __name__ == "__main__": 101 print get_server(platform = "nt") 102