1 import os
2 import socket
3 import subprocess
4 import pytest
5 import logging
6 import tempfile
7
9 """
10 Returns tlib's absolute path
11 """
12 file_folder = os.path.dirname(__file__)
13 return os.path.abspath(os.path.join(file_folder, os.pardir))
14
15
17 """
18 Returns absolute path of tlib's asset folder
19 """
20 return os.path.abspath(os.path.join(tlib_folder(), "asset"))
21
22
24 """
25 Returns absolute path of tlib's config folder
26 """
27 return os.path.abspath(os.path.join(tlib_folder(), "config"))
28
29
31 """
32 Returns absolute path of tlib's template folder\n
33 Template folder contains jinja templates used for generation of reports\n
34 like screenshots
35 """
36 return os.path.abspath(os.path.join(tlib_folder(), "templates"))
37
38
40 """
41 Returns path to Chrome WebDriver executable
42 """
43 return os.path.join(tlib_asset_folder(), "selenium", "chromedriver.exe")
44
45
51
52
54 """
55 Returns path to IE WebDriver executable
56 """
57 return os.path.join(tlib_asset_folder(), "selenium", "IE", "Win32_2.39.0", "IEDriverServer.exe")
58
59
61 """
62 Returns path to IE WebDriver executable
63 """
64 return os.path.join(tlib_asset_folder(), "selenium", "IE", "x64_2.39.0", "IEDriverServer.exe")
65
66
68 """
69 Returns path to Webdriver for android
70 """
71 return os.path.join(tlib_asset_folder(), "selenium", "android-server-2.21.0.apk")
72
73
75 """
76 Returns true if IP parameter is a valid IP address.\n
77 Currently IPs in this format are valid:\n
78 X.X.X.X\n
79 X.X.X.X:PORT
80
81 @type ip: str
82 @return: bool
83 """
84
85 if ip is None:
86 return False
87
88 try:
89 (ip, port) = ip.split(":", 1)
90 except ValueError:
91
92 port = None
93
94 try:
95 socket.inet_aton(ip)
96 except socket.error:
97 return False
98
99 if port is not None:
100 try:
101 return (int(port) >= 1) and (int(port) <= 65535)
102 except ValueError:
103
104 return False
105
106 return True
107
109 """
110 Run a command and skip test if exit code is not 0
111
112 Example:
113 Run 'adb devices' and don't skip test if commands returns non-zero status
114 run_command(logger, ["adb", "devices"], fail_on_error=False)
115
116 @param logger: logger for debugging purposes
117 @type logger: logging.logger
118 @param command: Command to run
119 @type command: list
120 @param fail_on_error: When True, skip test if command returned a non-zero exit code
121 @type fail_on_error: bool
122 @rtype: list
123 @return: Returns a list with stdout and stderr output
124 """
125
126 fd_out = tempfile.NamedTemporaryFile(delete=True)
127
128 fd_err = tempfile.NamedTemporaryFile(delete=True)
129 try:
130 process = subprocess.Popen(command, stdout=fd_out, stderr=fd_err)
131 except WindowsError as e:
132 logger.error(r"Problem running command, skipping test.\n%s" % e)
133
134 if fail_on_error:
135 pytest.fail(r"Problem running command, skipping test.\n%s" % e)
136
137
138 process.communicate()
139 fd_out.seek(0)
140 fd_err.seek(0)
141 out = (fd_out.read(), fd_err.read())
142 fd_out.close()
143 fd_err.close()
144 errcode = process.returncode
145
146 if (errcode != 0) and fail_on_error:
147 logger.error(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out))
148
149 pytest.fail(r"Program exited with code {errcode}, skipping test\n{out}".format(errcode=errcode, out=out))
150
151 return out
152
154 """
155 Sorts a list, and if the list has other objects inside, it will iterate over them
156 @param l: list to sort
157 @type l: list
158 @return: sorted list
159 @rtype: list
160 """
161 if type(l) is not list:
162 pytest.fail("Parameter l is not a list")
163
164 for i, s in enumerate(l):
165 if type(s) is list:
166 l[i] = sort_list(s)
167 if type(s) is dict:
168 l[i] = sort_dict(s)
169
170 l.sort()
171
172 return l
173
174
176 """
177 Sorts a dictionary, and if the list has other objects inside, it will iterate over them
178 @param d: dictionary to sort
179 @type d: dict
180 @return: sorted dictionary
181 @rtype: dict
182 """
183 if type(d) is not dict:
184 pytest.fail("Parameter d is not a dictionary")
185
186 for key in d.keys():
187 if type(d[key]) is list:
188
189 d[key] = sort_list(d[key])
190 elif type(d[key]) is dict:
191 d[key] = sort_dict(d[key])
192
193 return d
194