From d14b24b0f501ad764ea07944446d3a882977b889 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Sun, 1 Jul 2012 10:53:54 +0000
Subject: [PATCH] add tests for vpn_app; fix error in to_pkcs12()

---
 autovpn/test/__init__.py     |  0
 autovpn/test/test_vpn_app.py | 65 ++++++++++++++++++++++++++++++++++++
 autovpn/vpn_app.py           |  2 +-
 3 files changed, 66 insertions(+), 1 deletion(-)
 create mode 100644 autovpn/test/__init__.py
 create mode 100644 autovpn/test/test_vpn_app.py

diff --git a/autovpn/test/__init__.py b/autovpn/test/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/autovpn/test/test_vpn_app.py b/autovpn/test/test_vpn_app.py
new file mode 100644
index 0000000..93a796f
--- /dev/null
+++ b/autovpn/test/test_vpn_app.py
@@ -0,0 +1,65 @@
+import tempfile
+import shutil
+import unittest
+from flask import session
+from autovpn import vpn_app
+
+
+class VpnAppTest(unittest.TestCase):
+
+    def setUp(self):
+        self.tmpdir = tempfile.mkdtemp()
+        self.config = {
+            'DEBUG': 'true',
+            'SECRET_KEY': 'somesecret',
+            'VPN_CA_ROOT': self.tmpdir,
+            'VPN_CA_SUBJECT': {'CN': 'test CA', 'O': 'test'},
+            'VPN_CA_BITS': 1024,
+            'VPN_ENDPOINT': 'vpn.example.com',
+            'VPN_SITE_URL': 'http://localhost:4000/',
+            'FOOTER': '''
+<p class="footer">
+  built by <a href="http://www.autistici.org/">autistici.org</a>
+</p>
+''',
+            'AUTH_ENABLE': True,
+            'AUTH_FUNCTION': lambda x, y: (x and y and x == y),
+            }
+
+        self.app = vpn_app.make_app(self.config)
+
+    def tearDown(self):
+        shutil.rmtree(self.tmpdir)
+
+    def test_login_ok(self):
+        with self.app.test_client() as c:
+            rv = c.get('/login')
+            csrf = session['_csrf']
+            rv = c.post('/login', data={
+                    '_csrf': csrf,
+                    'username': 'admin',
+                    'password': 'admin'},
+                        follow_redirects=True)
+            self.assertTrue('download of the ZIP file' in rv.data)
+
+    def test_login_fail(self):
+        with self.app.test_client() as c:
+            rv = c.get('/login')
+            csrf = session['_csrf']
+            rv = c.post('/login', data={
+                    '_csrf': csrf,
+                    'username': 'user',
+                    'password': 'wrong password'},
+                        follow_redirects=True)
+            self.assertFalse(session.get('dl_ok'))
+            self.assertTrue('Authentication failed' in rv.data)
+
+    def test_cert_dl(self):
+        with self.app.test_client() as c:
+            with c.session_transaction() as sess:
+                sess['dl_ok'] = True
+                sess['_csrf'] = 'csrf'
+                sess['logged_in'] = True
+            rv = c.get('/newcertdl?_csrf=csrf')
+            self.assertEquals('200 OK', rv.status)
+            self.assertEquals('application/zip', rv.content_type)
diff --git a/autovpn/vpn_app.py b/autovpn/vpn_app.py
index 5a350ba..d4f50ae 100644
--- a/autovpn/vpn_app.py
+++ b/autovpn/vpn_app.py
@@ -139,7 +139,7 @@ def to_pkcs12(crt_pem, key_pem, ca_pem):
     try:
         for name, content in [
             ('crt.pem', crt_pem), ('key.pem', key_pem), ('ca.pem', ca_pem)]:
-            with open(os.path.join(tmpdir, name)) as fd:
+            with open(os.path.join(tmpdir, name), 'w') as fd:
                 fd.write(content)
         pipe = subprocess.Popen(
             ['openssl', 'pkcs12', '-export', '-password', 'pass:',
-- 
GitLab