From 4be100e01da0d1564be412b040f3a24357ecaf85 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Diemer?= <stephane.diemer@ubicast.eu>
Date: Thu, 19 Jan 2017 15:54:41 +0100
Subject: [PATCH] Added /streaming/ test in Nginx test (refs #20017).

---
 tests/test_apt.sh          |   5 +-
 tests/test_nginx_vhosts.py | 105 +++++++++++++++++++++++--------------
 tests/test_ntp.sh          |   4 +-
 3 files changed, 71 insertions(+), 43 deletions(-)

diff --git a/tests/test_apt.sh b/tests/test_apt.sh
index 74a15877..63152276 100755
--- a/tests/test_apt.sh
+++ b/tests/test_apt.sh
@@ -1,5 +1,5 @@
 #!/bin/bash
-source /root/envsetup/conf.sh
+set -e
 
 echo "Testing apt-get upgrade"
 
@@ -7,9 +7,8 @@ echo "Clean repository"
 apt-get clean
 
 #Testing if sl package exists and remove it
-dpkg -l | awk '{print $2}' | grep '^sl$'
 
-if [ "$?" -eq "0" ]; then
+if ( dpkg -s sl >/dev/null 2>&1 ); then
    echo "Removing already installed testing package"
    apt-get -y remove sl
 fi 
diff --git a/tests/test_nginx_vhosts.py b/tests/test_nginx_vhosts.py
index b4ae969a..9383b71c 100755
--- a/tests/test_nginx_vhosts.py
+++ b/tests/test_nginx_vhosts.py
@@ -3,6 +3,7 @@
 '''
 Check the response status code of all enabled vhosts.
 Allowed status code are: 403 and 200.
+Also check Wowza response for all mediaserver vhosts.
 '''
 import os
 import re
@@ -10,47 +11,75 @@ import requests
 import sys
 
 
+# check that Nginx dir exists
 nginx_dir = '/etc/nginx/sites-enabled'
 if not os.path.exists(nginx_dir):
     print('Nginx dir does not exists ("%s").' % nginx_dir)
+
+# check that Wowza is installed
+wowza_dir = '/usr/local/WowzaStreamingEngine'
+if not os.path.exists(wowza_dir):
+    print('Info: Wowza is not installed ("%s" does not exist).' % wowza_dir)
+    wowza_dir = None
 else:
-    requests.packages.urllib3.disable_warnings()
-    found = False
-    errors = 0
-    for name in os.listdir(nginx_dir):
-        path = os.path.join(nginx_dir, name)
-        with open(path, 'r') as fo:
-            conf = fo.read()
-        conf = conf.replace('\t', ' ')
-        matching = re.search(r'.*server_name\ +([0-9a-zA-Z\.\-\_\ ]+);.*', conf)
-        if not matching:
-            print('The server_name was not found in: "%s".' % path)
+    print('Info: Wowza is installed, /streaming/ will be tested on mediaserver vhosts.' % wowza_dir)
+
+# get enabled vhosts
+requests.packages.urllib3.disable_warnings()
+found = False
+errors = 0
+for name in os.listdir(nginx_dir):
+    path = os.path.join(nginx_dir, name)
+    with open(path, 'r') as fo:
+        conf = fo.read()
+    conf = conf.replace('\t', ' ')
+    matching = re.search(r'.*server_name\ +([0-9a-zA-Z\.\-\_\ ]+);.*', conf)
+    if not matching:
+        print('The server_name was not found in: "%s".' % path)
+        errors += 1
+        continue
+    domains = matching.groups()[0].strip().split(' ')
+    https = re.search(r'listen +\w* +ssl;', conf) is not None \
+        or re.search(r'ssl +on;', conf) is not None
+    for domain in domains:
+        if domain == 'localhost':
+            continue  # status vhost
+        found = True
+        url = '%s://%s' % ('https' if https else 'http', domain)
+        sys.stdout.write('Testing url "%s": ' % url)
+        try:
+            req = requests.get(url, verify=False, proxies={'http': '', 'https': ''}, timeout=10)
+        except Exception as e:
+            code = str(e)
+        else:
+            code = req.status_code
+        if code not in (200, 403):
+            sys.stdout.write('\033[91mKO (%s)\033[0m' % code)
             errors += 1
-            continue
-        domains = matching.groups()[0].strip().split(' ')
-        https = re.search(r'listen +\w* +ssl;', conf) is not None \
-            or re.search(r'ssl +on;', conf) is not None
-        for domain in domains:
-            if domain == 'localhost':
-                continue  # status vhost
-            found = True
-            url = '%s://%s' % ('https' if https else 'http', domain)
-            sys.stdout.write('Testing url "%s": ' % url)
-            try:
-                req = requests.get(url, verify=False, proxies={'http': '', 'https': ''}, timeout=10)
-            except Exception as e:
-                code = str(e)
-            else:
-                code = req.status_code
-            if code == 200 or code == 403:
-                sys.stdout.write('\033[92mOK (%s).\033[0m\n' % code)
-            else:
-                sys.stdout.write('\033[91mKO (%s).\033[0m\n' % code)
-                errors += 1
+        else:
+            sys.stdout.write('\033[92mOK (%s)\033[0m' % code)
+            if 'mediaserver' in name and wowza_dir:
+                # test /streaming url
+                sys.stdout.write(', streaming: ')
+                try:
+                    req = requests.get(url + '/streaming/', verify=False, proxies={'http': '', 'https': ''}, timeout=10)
+                except Exception as e:
+                    code = str(e)
+                else:
+                    code = req.status_code
+                if code != 200:
+                    sys.stdout.write('\033[91mKO (%s)\033[0m' % code)
+                    errors += 1
+                elif 'Wowza Streaming Engine' not in req.text:
+                    sys.stdout.write('\033[91mKO (%s, %s)\033[0m' % (code, req.text.replace('\n', ' ')[:200]))
+                    errors += 1
+                else:
+                    sys.stdout.write('\033[92mOK (%s)\033[0m' % code)
+        sys.stdout.write('.\n')
 
-    if errors:
-        print('%s vhost(s) did not correctly responded.' % errors)
-        sys.exit(1)
-    if not found:
-        print('No vhost found in Nginx sites-enabled dir.')
-        sys.exit(1)
+if errors:
+    print('%s vhost(s) did not correctly responded.' % errors)
+    sys.exit(1)
+if not found:
+    print('No vhost found in Nginx sites-enabled dir.')
+    sys.exit(1)
diff --git a/tests/test_ntp.sh b/tests/test_ntp.sh
index 1a68cacb..b8917be5 100755
--- a/tests/test_ntp.sh
+++ b/tests/test_ntp.sh
@@ -1,8 +1,8 @@
 #!/bin/bash
-source /root/envsetup/conf.sh
-
 set -e
 
+source /root/envsetup/conf.sh
+
 NTP_SERVER="$NTP_SERVER1"
 if [ "${NTP_SERVER}" = "" ]; then
     NTP_SERVER="ntp.ubuntu.com"
-- 
GitLab