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")
|
---|