591: Let Testing Middleware check for staticdirect() usage
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Mon, 3 Oct 2011 23:03:43 +0000 (01:03 +0200)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Wed, 19 Oct 2011 19:37:19 +0000 (21:37 +0200)
All references to static, shipped content should go via
request.staticdirect().

So insert a TestingMiddleware in the chain, which tests for
this on all requests/reponses happening in the test suite.
It's a simple text search for a bogus usage pattern.

mediagoblin/middleware/testing.py [new file with mode: 0644]
mediagoblin/tests/test_mgoblin_app.ini
mediagoblin/tests/test_paste.ini
mediagoblin/tests/tools.py

diff --git a/mediagoblin/middleware/testing.py b/mediagoblin/middleware/testing.py
new file mode 100644 (file)
index 0000000..0671476
--- /dev/null
@@ -0,0 +1,34 @@
+# GNU MediaGoblin -- federated, autonomous media hosting
+# Copyright (C) 2011 MediaGoblin contributors.  See AUTHORS.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+class TestingMiddleware(object):
+
+    def __init__(self, mg_app):
+        self.app = mg_app
+
+    def process_request(self, request):
+        pass
+
+    def process_response(self, request, response):
+        if response.content_type != "text/html":
+            # Get out early
+            return
+        if response.text.find("/mgoblin_static/") >= 0:
+            raise AssertionError(
+                "Response HTML contains reference to /mgoblin_static/ "
+                "instead of staticdirect. Request was for: "
+                + request.full_path)
+        return
index ab32cccc84f99b7710c87c10f783affe038cfbe8..f979e810714d63ad97beeda1829474e3038ce66d 100644 (file)
@@ -1,5 +1,5 @@
 [mediagoblin]
-direct_remote_path = /mgoblin_static/
+direct_remote_path = /test_static/
 email_sender_address = "notice@mediagoblin.example.org"
 email_debug_mode = true
 db_name = __mediagoblin_tests__
index e7574b7afbb8aa1e2a7c7c1d02acbb79b359b9f5..bd57994b092d357cab9192b23803cf70271efdae 100644 (file)
@@ -5,7 +5,7 @@ debug = true
 use = egg:Paste#urlmap
 / = mediagoblin
 /mgoblin_media/ = publicstore_serve
-/mgoblin_static/ = mediagoblin_static
+/test_static/ = mediagoblin_static
 
 [app:mediagoblin]
 use = egg:mediagoblin#app
index cf84da149b78d7f31c39ebd0cb609d2117f427fa..e8558240ab0cde0fc17ab02a43803c8b75b33dea 100644 (file)
@@ -21,7 +21,9 @@ import os, shutil
 from paste.deploy import loadapp
 from webtest import TestApp
 
+from mediagoblin import mg_globals
 from mediagoblin.tools import testing
+from mediagoblin.middleware.testing import TestingMiddleware
 from mediagoblin.init.config import read_mediagoblin_config
 from mediagoblin.decorators import _make_safe
 from mediagoblin.db.open import setup_connection_and_db_from_config
@@ -103,6 +105,10 @@ def get_test_app(dump_old_app=True):
     test_app = loadapp(
         'config:' + TEST_SERVER_CONFIG)
 
+    # Insert the TestingMiddleware, which can do some
+    # sanity checks on every request/response.
+    mg_globals.app.middleware.insert(0, TestingMiddleware(mg_globals.app))
+
     app = TestApp(test_app)
     MGOBLIN_APP = app