Browse Source

Add basic VPN tests

Baptiste Jonglez 10 years ago
parent
commit
7db0f62de8
2 changed files with 82 additions and 1 deletions
  1. 20 0
      coin/resources/fixtures/example_pools.json
  2. 62 1
      coin/vpn/tests.py

+ 20 - 0
coin/resources/fixtures/example_pools.json

@@ -0,0 +1,20 @@
+[
+    {
+        "pk": 1,
+        "model": "resources.ippool",
+        "fields": {
+            "default_subnetsize": 32,
+            "name": "Test IPv4 pool",
+            "inet": "192.168.42.0/24"
+        }
+    },
+    {
+        "pk": 2,
+        "model": "resources.ippool",
+        "fields": {
+            "default_subnetsize": 56,
+            "name": "Test IPv6 pool",
+            "inet": "2001:db8:4200::/40"
+        }
+    }
+]

+ 62 - 1
coin/vpn/tests.py

@@ -1,3 +1,64 @@
 from django.test import TestCase
 
-# Create your tests here.
+from coin.offers.models import Offer, OfferSubscription
+from coin.vpn.models import VPNSubscription
+from coin.resources.models import IPPool, IPSubnet
+from coin.members.models import Member
+from coin.members.tests import MemberTestsUtils
+
+
+class VPNTestCase(TestCase):
+    fixtures = ['example_pools.json', 'offers.json']
+
+    def setUp(self):
+        self.v6_pool = IPPool.objects.get(default_subnetsize=56)
+        self.v4_pool = IPPool.objects.get(default_subnetsize=32)
+        self.offer = Offer.objects.filter(backend="openvpn_ldap")[0]
+
+        # Create a member.
+        cn = MemberTestsUtils.get_random_ldap_cn()
+        self.member = Member.objects.create(first_name=u"Toto",
+                                            last_name=u"L'artichaut",
+                                            ldap_cn=cn)
+
+        # Create a new VPN with subnets.
+        # We need Django to call clean() so that magic happens.
+        abo = OfferSubscription(offer=self.offer, member=self.member)
+        abo.full_clean()
+        abo.save()
+        v6 = IPSubnet(ip_pool=self.v6_pool, offer_subscription=abo)
+        v6.full_clean()
+        v6.save()
+        v4 = IPSubnet(ip_pool=self.v4_pool, offer_subscription=abo)
+        v4.full_clean()
+        v4.save()
+        vpn = VPNSubscription(administrative_subscription=abo,
+                              login=cn + "_vpn",
+                              password="tata")
+        vpn.full_clean()
+        vpn.save()
+
+    def test_has_ipv4_endpoint(self):
+        vpn = VPNSubscription.objects.get()
+        self.assertIsNotNone(vpn.ipv4_endpoint)
+
+    def test_has_correct_ipv4_endpoint(self):
+        """If there is not endpoint, we consider it to be correct."""
+        vpn = VPNSubscription.objects.get()
+        if vpn.ipv4_endpoint is not None:
+            abo = OfferSubscription.objects.get()
+            subnet = abo.ip_subnet.get(ip_pool=self.v4_pool)
+            self.assertIn(vpn.ipv4_endpoint, subnet.inet)
+
+    def test_has_ipv6_endpoint(self):
+        vpn = VPNSubscription.objects.get()
+        self.assertIsNotNone(vpn.ipv6_endpoint)
+
+    def test_has_correct_ipv6_endpoint(self):
+        """If there is not endpoint, we consider it to be correct."""
+        vpn = VPNSubscription.objects.get()
+        if vpn.ipv6_endpoint is not None:
+            abo = OfferSubscription.objects.get()
+            subnet = abo.ip_subnet.get(ip_pool=self.v6_pool)
+            self.assertIn(vpn.ipv6_endpoint, subnet.inet)
+