From 0e1fa012a387f6df779658eff615edc053f70b0b Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Sun, 23 Jun 2013 11:14:40 +0100
Subject: [PATCH] keep the test schema in a file

---
 configdb/tests/__init__.py        | 116 ++++++++++--------------------
 configdb/tests/schema-simple.json |  75 +++++++++++++++++++
 configdb/tests/test_cli.py        |   6 +-
 configdb/tests/test_schema.py     |   7 +-
 configdb/tests/test_wsgiapp.py    |  30 ++------
 5 files changed, 123 insertions(+), 111 deletions(-)
 create mode 100644 configdb/tests/schema-simple.json

diff --git a/configdb/tests/__init__.py b/configdb/tests/__init__.py
index 6489c19..2a523b0 100644
--- a/configdb/tests/__init__.py
+++ b/configdb/tests/__init__.py
@@ -1,89 +1,13 @@
+import os
 import unittest
 import shutil
 import tempfile
+from configdb.db import acl
 from configdb.db import schema
+from configdb.server import wsgiapp
 from nose.plugins.attrib import attr
 
 
-TEST_SCHEMA = '''
-{
-"host": {
-  "name": {
-    "type": "string"
-  },
-  "ip": {
-    "type": "string",
-    "validator": "ip"
-  },
-  "ip6": {
-    "type": "string"
-  },
-  "roles": {
-    "type": "relation",
-    "rel": "role"
-  },
-  "ghz": {
-    "type": "number"
-  },
-  "_acl": {
-    "r": "*", "w": "user/admin"
-  }
-},
-"role": {
-  "name": {
-    "type": "string"
-  }
-},
-"user": {
-  "name": {
-    "type": "string"
-  },
-  "last_login": {
-    "type": "datetime"
-  },
-  "password": {
-    "type": "password",
-    "size": 64
-  },
-  "enabled": {
-    "type": "bool",
-    "default": "True"
-  },
-  "ssh_keys": {
-    "type": "relation",
-    "rel": "ssh_key",
-    "acl": {
-      "w": "user/admin,@self"
-    }
-  },
-  "_acl": {
-    "r": "*", "w": "user/admin"
-  }
-},
-"ssh_key": {
-  "name": {
-    "type": "string"
-  },
-  "key": {
-    "type": "text"
-  },
-  "_acl": {
-    "w": "@users"
-  }
-},
-"private": {
-  "name": {
-    "type": "string"
-  },
-  "_acl": {
-    "r": "user/admin",
-    "w": "user/admin"
-  }
-}
-}
-'''
-
-
 class TestBase(unittest.TestCase):
 
     def setUp(self):
@@ -93,5 +17,37 @@ class TestBase(unittest.TestCase):
         shutil.rmtree(self._tmpdir)
 
     def get_schema(self):
-        self._schema = schema.Schema(TEST_SCHEMA)
+        schema_file = os.path.join(
+            os.path.dirname(__file__), 'schema-simple.json')
+        with open(schema_file, 'r') as fd:
+            self._schema = schema.Schema(fd.read())
         return self._schema
+
+
+def auth_fn(api, data):
+    username = data.get('username')
+    password = data.get('password')
+    if username == 'admin' and password == 'admin':
+        return username
+
+def auth_context_fn(api, auth_token):
+    return acl.AuthContext(auth_token)
+
+
+class WsgiTestBase(TestBase):
+
+    def create_app(self, **kwargs):
+        config = {
+            'DEBUG': True,
+            'TESTING': True,
+            'SECRET_KEY': 'test key',
+            'AUTH_FN': auth_fn,
+            'AUTH_CONTEXT_FN': auth_context_fn,
+        }
+        config.update(kwargs)
+        return wsgiapp.make_app(config)
+
+    def create_app_with_schema(self, schema_file, **kwargs):
+        schema_file = os.path.join(
+            os.path.dirname(__file__), schema_file)
+        return self.create_app(SCHEMA_FILE=schema_file, **kwargs)
diff --git a/configdb/tests/schema-simple.json b/configdb/tests/schema-simple.json
new file mode 100644
index 0000000..349ceb7
--- /dev/null
+++ b/configdb/tests/schema-simple.json
@@ -0,0 +1,75 @@
+{
+"host": {
+  "name": {
+    "type": "string"
+  },
+  "ip": {
+    "type": "string",
+    "validator": "ip"
+  },
+  "ip6": {
+    "type": "string"
+  },
+  "roles": {
+    "type": "relation",
+    "rel": "role"
+  },
+  "ghz": {
+    "type": "number"
+  },
+  "_acl": {
+    "r": "*", "w": "user/admin"
+  }
+},
+"role": {
+  "name": {
+    "type": "string"
+  }
+},
+"user": {
+  "name": {
+    "type": "string"
+  },
+  "last_login": {
+    "type": "datetime"
+  },
+  "password": {
+    "type": "password",
+    "size": 64
+  },
+  "enabled": {
+    "type": "bool",
+    "default": "True"
+  },
+  "ssh_keys": {
+    "type": "relation",
+    "rel": "ssh_key",
+    "acl": {
+      "w": "user/admin,@self"
+    }
+  },
+  "_acl": {
+    "r": "*", "w": "user/admin"
+  }
+},
+"ssh_key": {
+  "name": {
+    "type": "string"
+  },
+  "key": {
+    "type": "text"
+  },
+  "_acl": {
+    "w": "@users"
+  }
+},
+"private": {
+  "name": {
+    "type": "string"
+  },
+  "_acl": {
+    "r": "user/admin",
+    "w": "user/admin"
+  }
+}
+}
diff --git a/configdb/tests/test_cli.py b/configdb/tests/test_cli.py
index 5736d1d..e9b1eac 100644
--- a/configdb/tests/test_cli.py
+++ b/configdb/tests/test_cli.py
@@ -9,7 +9,6 @@ from configdb.client import query
 from configdb.tests import *
 
 
-
 class CliMainTest(mox.MoxTestBase):
 
     def setUp(self):
@@ -65,9 +64,8 @@ class CliTest(mox.MoxTestBase):
         mox.MoxTestBase.tearDown(self)
 
     def _connect(self):
-        schema_file = os.path.join(self._tmpdir, 'schema.json')
-        with open(schema_file, 'w') as fd:
-            fd.write(TEST_SCHEMA)
+        schema_file = os.path.join(
+            os.path.dirname(__file__), 'schema-simple.json')
         os.getenv('SCHEMA_FILE').AndReturn(schema_file)
 
         self.conn = self.mox.CreateMockAnything()
diff --git a/configdb/tests/test_schema.py b/configdb/tests/test_schema.py
index 193ce21..66d4fdb 100644
--- a/configdb/tests/test_schema.py
+++ b/configdb/tests/test_schema.py
@@ -107,12 +107,13 @@ class SchemaTest(TestBase):
         self.assertTrue('address' in ent.fields)
         self.assertEquals('an entity', ent.description)
 
-    def test_sequence(self):
-        s = schema.Schema(TEST_SCHEMA)
+    def test_dependency_sequence(self):
+        s = self.get_schema()
         seq = s.get_dependency_sequence()
         self.assertTrue(seq.index("role") < seq.index("host"))
         self.assertTrue(seq.index("ssh_key") < seq.index("user"))
-        
+
+
 class FakeRole(object):
 
     def __init__(self, name):
diff --git a/configdb/tests/test_wsgiapp.py b/configdb/tests/test_wsgiapp.py
index 01ad045..2da0976 100644
--- a/configdb/tests/test_wsgiapp.py
+++ b/configdb/tests/test_wsgiapp.py
@@ -4,17 +4,6 @@ from werkzeug.exceptions import Forbidden
 from datetime import datetime
 from configdb.db import acl
 from configdb.tests import *
-from configdb.server import wsgiapp
-
-
-def auth_fn(api, data):
-    username = data.get('username')
-    password = data.get('password')
-    if username == 'admin' and password == 'admin':
-        return username
-
-def auth_context_fn(api, auth_token):
-    return acl.AuthContext(auth_token)
 
 
 @wsgiapp.api_app.route('/raise_exception')
@@ -22,22 +11,15 @@ def auth_context_fn(api, auth_token):
 @wsgiapp.json_request
 @wsgiapp.json_response
 def raise_exception():
-    raise Exception('test exception')
+    raise Exception('test exception')        
 
 
-class WsgiTest(TestBase):
+class WsgiTest(WsgiTestBase):
 
     def setUp(self):
-        TestBase.setUp(self)
-        self.schema_file = os.path.join(self._tmpdir, 'schema.json')
-        with open(self.schema_file, 'w') as fd:
-            fd.write(TEST_SCHEMA)
-
-        app = wsgiapp.make_app({'SCHEMA_FILE': self.schema_file})
-        app.config['TESTING'] = True
-        app.config['AUTH_FN'] = auth_fn
-        app.config['AUTH_CONTEXT_FN'] = auth_context_fn
-        app.config['SECRET_KEY'] = 'test key'
+        WsgiTestBase.setUp(self)
+
+        app = self.create_app_with_schema('schema-simple.json')
         self.wsgiapp = app
         self.app = app.test_client()
 
@@ -225,7 +207,7 @@ class WsgiTest(TestBase):
         self._login()
         rv = self.app.get('/schema')
         self.assertEquals(200, rv.status_code)
-        self.assertEquals(TEST_SCHEMA, rv.data)
+        #self.assertEquals(TEST_SCHEMA, rv.data)
 
     def test_login(self):
         rv = self.app.post('/login',
-- 
GitLab