| 1 | #!/usr/bin/python | 
|---|
| 2 | # | 
|---|
| 3 | # Samba Testing Framework for Unit-testing | 
|---|
| 4 | # | 
|---|
| 5 |  | 
|---|
| 6 | import os, string, re | 
|---|
| 7 | import osver | 
|---|
| 8 |  | 
|---|
| 9 | def 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 |  | 
|---|
| 39 | def 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 |  | 
|---|
| 53 | def 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 |  | 
|---|
| 76 | def 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 |  | 
|---|
| 100 | if __name__ == "__main__": | 
|---|
| 101 | print get_server(platform = "nt") | 
|---|