Integration test for the build.md file
Change-Id: I93d25f1563636696a5f71471a06056eafee3e9e2
diff --git a/tests/itests/docutests/test_utils.py b/tests/itests/docutests/test_utils.py
new file mode 100644
index 0000000..a0b2422
--- /dev/null
+++ b/tests/itests/docutests/test_utils.py
@@ -0,0 +1,120 @@
+#
+# Copyright 2016 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+import os
+import subprocess
+import socket
+import time
+import re
+
+
+def run_command_to_completion_with_raw_stdout(cmd):
+ try:
+ env = os.environ.copy()
+ proc = subprocess.Popen(
+ cmd,
+ env=env,
+ shell=True,
+ stdout=subprocess.PIPE
+ )
+ out, err = proc.communicate()
+ return out, err, proc.returncode
+ except OSError as e:
+ print 'Exception {} when running command:{}'.format(repr(e), cmd)
+ return None
+
+
+def run_command_to_completion_with_stdout_in_list(cmd):
+ stdout_response = []
+ try:
+ command = cmd
+ env = os.environ.copy()
+ proc = subprocess.Popen(
+ command,
+ env=env,
+ shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ bufsize=1
+ )
+ with proc.stdout:
+ for line in iter(proc.stdout.readline, b''):
+ stdout_response.append(line)
+
+ if proc.wait() != 0:
+ err_msg = 'Command {} did not complete successfully '.format(cmd)
+ return [], err_msg, proc.returncode
+
+ return stdout_response, None, proc.returncode
+ except OSError as e:
+ print 'Exception {} when running command:{}'.format(repr(e), cmd)
+ return None
+
+
+def run_long_running_command_with_timeout(cmd, timeout,
+ return_word_number_x_of_each_line=-1):
+ captured_stdout = []
+ try:
+ t0 = time.time()
+ env = os.environ.copy()
+ proc = subprocess.Popen(
+ cmd,
+ env=env,
+ shell=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ bufsize=1
+ )
+ for line in iter(proc.stdout.readline, b''):
+ if return_word_number_x_of_each_line != -1:
+ ansi_escape = re.compile(r'\x1b[^m]*m')
+ line = ansi_escape.sub('', line)
+ captured_stdout.append(
+ line.split()[return_word_number_x_of_each_line])
+ else:
+ captured_stdout.append(line)
+ if time.time() - t0 > timeout:
+ try:
+ proc.terminate()
+ proc.wait()
+ # In principle this 'reset' should not be required.
+ # However, without it, the terminal is left in a funny
+ # state and required
+ subprocess.Popen(['reset']).wait()
+ except Exception as e:
+ print "Received exception {} when killing process " \
+ "started with {}".format(repr(e), cmd)
+ break
+ return captured_stdout
+ except Exception as e:
+ print 'Exception {} when running command:{}'.format(repr(e), cmd)
+ return None
+
+def is_open(ip_port):
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ try:
+ items = ip_port.split(':')
+ s.connect((items[0], int(items[1])))
+ s.shutdown(2)
+ return True
+ except:
+ return False
+
+def is_valid_ip(ip):
+ try:
+ socket.inet_aton(ip)
+ return True
+ except socket.error:
+ return False