Beispiel #1
0
    def test_check_not_cancel_if_paid(self):
        ''' This test checks that if the user does not uploads a PO before 30 days, the site will be cancelled
        automatically'''
        today = datetime.today()
        do_test_login(self, user="******")
        # Create site (more than 30 days ago start date)
        site = Site.objects.create(name="testSite",
                                   email='*****@*****.**',
                                   type=ServerType.objects.get(id=1),
                                   start_date=today - timedelta(days=40))
        site.users.add(User.objects.get(username="******"))

        self.assertFalse(hasattr(site, 'billing'))
        pofile = SimpleUploadedFile("file.pdf", "file_content")
        self.client.post(
            reverse('billing_management', kwargs={'site_id': site.id}), {
                'purchase_order_number': 'testOrderNumber',
                'group': 'testGroup',
                'purchase_order': pofile
            })
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertTrue(hasattr(site, 'billing'))

        # Check that the site is not cancelled, it has a PO attached
        self.assertIsNone(site.end_date)
        self.assertIn(User.objects.get(username='******'), site.users.all())
        check_subscription()
        self.assertEqual(len(mail.outbox), 0)
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertIsNone(site.end_date)
        self.assertTrue(site.subscription)
        self.assertTrue(site.users.exists())
Beispiel #2
0
    def test_view_show(self):
        response = self.client.get(reverse('showsite', kwargs={'site_id': 1}))
        self.assertEqual(response.status_code, 302)  # Not logged in, redirected to login
        self.assertTrue(response.url.endswith(
            '%s?next=%s' % (reverse('raven_login'), reverse('showsite', kwargs={'site_id': 1}))))

        do_test_login(self, user="******")

        response = self.client.get(reverse('showsite', kwargs={'site_id': 1}))
        self.assertEqual(response.status_code, 404)  # The Site does not exist

        NetworkConfig.objects.create(IPv4='131.111.58.253', IPv6='2001:630:212:8::8c:253', type='ipvxpub',
                                     name="mws-66424.mws3.csx.cam.ac.uk")

        NetworkConfig.objects.create(IPv4='172.28.18.253', type='ipv4priv',
                                     name='mws-46250.mws3.csx.private.cam.ac.uk')

        NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff4', name='mws-client1', type='ipv6')

        site = Site.objects.create(name="testSite", start_date=datetime.today(), type=ServerType.objects.get(id=1))

        service = Service.objects.create(network_configuration=NetworkConfig.get_free_prod_service_config(), site=site,
                                         type='production', status='requested')

        Vhost.objects.create(name="default", service=service)

        response = self.client.get(site.get_absolute_url())
        self.assertEqual(response.status_code, 403)  # The User is not in the list of auth users

        site.users.add(User.objects.get(username="******"))
        response = self.client.get(site.get_absolute_url())
        self.assertContains(response, "No billing details are available")
Beispiel #3
0
    def test_view_edit(self):
        response = self.client.get(reverse('editsite', kwargs={'site_id': 1}))
        self.assertEqual(response.status_code, 302)  # Not logged in, redirected to login
        self.assertTrue(response.url.endswith(
            '%s?next=%s' % (reverse('raven_login'), reverse('editsite', kwargs={'site_id': 1}))))

        do_test_login(self, user="******")

        response = self.client.get(reverse('editsite', kwargs={'site_id': 1}))
        self.assertEqual(response.status_code, 404)  # The Site does not exist

        site = assign_a_site(self)

        response = self.client.get(reverse('editsite', kwargs={'site_id': site.id}))
        self.assertContains(response, "Managed Web Service account settings")

        response = self.client.get(reverse('editsite', kwargs={'site_id': site.id}))
        self.assertContains(response, "Managed Web Service account settings")

        self.assertNotEqual(site.name, 'testSiteChange')
        self.assertNotEqual(site.description, 'testDescChange')
        self.assertNotEqual(site.email, '*****@*****.**')
        response = self.client.post(reverse('editsite', kwargs={'site_id': site.id}),
                                    {'name': 'testSiteChange', 'description': 'testDescChange',
                                     'email': '*****@*****.**'})
        self.assertRedirects(response, expected_url=site.get_absolute_url())  # Changes done, redirecting

        site_changed = Site.objects.get(pk=site.id)
        self.assertEqual(site_changed.name, 'testSiteChange')
        self.assertEqual(site_changed.description, 'testDescChange')
        self.assertEqual(site_changed.email, '*****@*****.**')

        response = self.client.post(reverse('editsite', kwargs={'site_id': site.id}),
                                    {'name': 'testSiteChange', 'description': 'testDescChange',
                                     'email': 'emailchangetest'})
        self.assertContains(response, '<ul class="errorlist"><li>Enter a valid email address.</li></ul>')
        site_changed = Site.objects.get(pk=site.id)  # Refresh site from DB
        self.assertEqual(site_changed.email, '*****@*****.**')

        response = self.client.get(reverse('showsite', kwargs={'site_id': site_changed.id}))
        self.assertContains(response, "Your email %s is unconfirmed, please check your email inbox and click "
                                      "on the link of the email we have sent you." % site_changed.email)

        site_changed.users.remove(User.objects.get(username="******"))
        response = self.client.get(reverse('editsite', kwargs={'site_id': site_changed.id}))
        self.assertEqual(response.status_code, 403)  # The User is not in the list of auth users

        site_changed.users.add(User.objects.get(username="******"))

        with mock.patch("apimws.vm.change_vm_power_state") as mock_change_vm_power_state:
            mock_change_vm_power_state.return_value = True
            mock_change_vm_power_state.delay.return_value = True
            site.disable()
        site.suspend_now(input_reason="test suspension")
        response = self.client.get(reverse('editsite', kwargs={'site_id': site.id}))
        self.assertEqual(response.status_code, 403)  # The site is suspended
Beispiel #4
0
 def setUp(self):
     do_test_login(self, user="******")
     NetworkConfig.objects.create(IPv4='131.111.58.253', IPv6='2001:630:212:8::8c:253', type='ipvxpub',
                                  name="mws-66424.mws3.csx.cam.ac.uk")
     NetworkConfig.objects.create(IPv4='172.28.18.253', type='ipv4priv',
                                  name='mws-46250.mws3.csx.private.cam.ac.uk')
     NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff4', name='mws-client1', type='ipv6')
     NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff3', name='mws-client2', type='ipv6')
     NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff2', name='mws-client3', type='ipv6')
     NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff1', name='mws-client4', type='ipv6')
    def test_scheduled_deletion_paid_service(self):
        today = datetime.today().date()
        do_test_login(self, user="******")
        site = Site.objects.create(name="testSite",
                                   email='*****@*****.**',
                                   type=ServerType.objects.get(id=1),
                                   start_date=today - timedelta(days=300))
        netconf = NetworkConfig.objects.create(
            IPv4='131.111.58.253',
            IPv6='2001:630:212:8::8c:253',
            type='ipvxpub',
            name="mws-66424.mws3.csx.cam.ac.uk")
        Service.objects.create(site=site,
                               type='production',
                               status="ready",
                               network_configuration=netconf)
        site.users.add(User.objects.get(username="******"))

        self.assertFalse(hasattr(site, 'billing'))
        pofile = SimpleUploadedFile("file.pdf", "file_content")
        self.client.post(
            reverse('billing_management', kwargs={'site_id': site.id}), {
                'purchase_order_number': 'testOrderNumber',
                'group': 'testGroup',
                'purchase_order': pofile
            })
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertTrue(hasattr(site, 'billing'))

        site.end_date = today
        site.save()

        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertEqual(site.end_date, today)

        site.end_date = today - timedelta(days=14)  # Two weeks ago
        site.save()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertEqual(site.end_date, today - timedelta(days=14))

        site.end_date = today - timedelta(days=60)  # > 8 weeks ago
        site.save()
        delete_cancelled()
        # Retrieve object
        self.assertFalse(Site.objects.filter(pk=site.id))
Beispiel #6
0
    def test_view_index(self):
        response = self.client.get(reverse('listsites'))
        self.assertEqual(response.status_code, 302)  # Not logged in, redirected to login
        self.assertTrue(response.url.endswith(
            '%s?next=%s' % (reverse('raven_login'), reverse('listsites'))))

        do_test_login(self, user="******")

        response = self.client.get(reverse('listsites'))
        self.assertInHTML("<p class=\"campl-notifications-icon campl-warning-icon\" style=\"float:none; margin-bottom: "
                          "10px;\">At this moment we cannot process any new requests for the Managed Web Service, "
                          "please try again later.</p>", response.content)

        site = assign_a_site(self)
        response = self.client.get(reverse('listsites'))
        self.assertContains(response, site.name)
    def test_scheduled_deletion_unpaid_service(self):
        today = datetime.today().date()
        do_test_login(self, user="******")
        site = Site.objects.create(name="testSite",
                                   email='*****@*****.**',
                                   type=ServerType.objects.get(id=1),
                                   start_date=today - timedelta(days=15))
        netconf = NetworkConfig.objects.create(
            IPv4='131.111.58.253',
            IPv6='2001:630:212:8::8c:253',
            type='ipvxpub',
            name="mws-66424.mws3.csx.cam.ac.uk")
        Service.objects.create(site=site,
                               type='production',
                               status="ready",
                               network_configuration=netconf)
        site.users.add(User.objects.get(username="******"))

        check_subscription()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertIsNone(site.end_date)
        self.assertTrue(site.subscription)
        self.assertTrue(site.users.exists())

        site.start_date = today - timedelta(days=32)
        site.save()
        check_subscription()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[1].subject,
                         'Your managed web server has been cancelled')
        self.assertEqual(mail.outbox[1].to, [site.email])
        self.assertEqual(site.end_date, today)
        self.assertFalse(site.users.exists())

        site.start_date = today - timedelta(days=62)
        site.end_date = today - timedelta(days=30)
        site.save()
        check_subscription()
        delete_cancelled()
        # Retrieve object
        self.assertFalse(Site.objects.filter(pk=site.id))
    def test_scheduled_cancellation(self):
        today = datetime.today()
        do_test_login(self, user="******")
        # Create site (300 days ago start date)
        site = Site.objects.create(name="testSite",
                                   email='*****@*****.**',
                                   type=ServerType.objects.get(id=1),
                                   start_date=today - timedelta(days=300))
        netconf = NetworkConfig.objects.create(
            IPv4='131.111.58.253',
            IPv6='2001:630:212:8::8c:253',
            type='ipvxpub',
            name="mws-66424.mws3.csx.cam.ac.uk")
        Service.objects.create(site=site,
                               type='production',
                               status="ready",
                               network_configuration=netconf)
        site.users.add(User.objects.get(username="******"))

        self.assertFalse(hasattr(site, 'billing'))
        pofile = SimpleUploadedFile("file.pdf", "file_content")
        self.client.post(
            reverse('billing_management', kwargs={'site_id': site.id}), {
                'purchase_order_number': 'testOrderNumber',
                'group': 'testGroup',
                'purchase_order': pofile
            })
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertTrue(hasattr(site, 'billing'))

        check_subscription()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertEqual(len(mail.outbox), 0)
        self.assertIsNone(site.end_date)
        self.assertTrue(site.subscription)
        self.assertTrue(site.users.exists())

        asdfasd = self.client.post(
            reverse('donotrenew', kwargs={'site_id': site.id}), {})
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertIsNone(site.end_date)
        self.assertFalse(site.subscription)
        self.assertTrue(site.users.exists())

        check_subscription()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertEqual(len(mail.outbox), 0)
        self.assertIsNone(site.end_date)
        self.assertTrue(site.users.exists())

        site.start_date = today - timedelta(days=370)
        site.save()
        check_subscription()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject,
                         'Your managed web server has been cancelled')
        self.assertEqual(mail.outbox[0].to, [site.email])
        self.assertEqual(site.end_date, today.date())
        self.assertFalse(site.users.exists())

        # After 3 weeks the site should have not been deleted yet
        site.end_date = today - timedelta(days=21)
        site.save()
        check_subscription()
        delete_cancelled()
        # Retrieve object
        site = Site.objects.get(pk=site.id)

        # After 9 weeks the site should have been deleted
        site.end_date = today - timedelta(days=60)
        site.save()
        check_subscription()
        delete_cancelled()
        # Retrieve object
        self.assertFalse(Site.objects.filter(pk=site.id))
Beispiel #9
0
    def test_view_billing(self):
        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': 1}))
        self.assertEqual(response.status_code,
                         302)  # Not logged in, redirected to login
        self.assertTrue(
            response.url.endswith(
                '%s?next=%s' %
                (reverse('raven_login'),
                 reverse('billing_management', kwargs={'site_id': 1}))))

        do_test_login(self, user="******")

        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': 1}))
        self.assertEqual(response.status_code, 404)  # The Site does not exist

        cluster = Cluster.objects.create(name="mws-test-1")
        Host.objects.create(hostname="mws-test-1.dev.mws3.cam.ac.uk",
                            cluster=cluster)

        NetworkConfig.objects.create(IPv4='131.111.58.253',
                                     IPv6='2001:630:212:8::8c:253',
                                     type='ipvxpub',
                                     name="mws-66424.mws3.csx.cam.ac.uk")

        NetworkConfig.objects.create(
            IPv4='172.28.18.253',
            type='ipv4priv',
            name='mws-46250.mws3.csx.private.cam.ac.uk')

        NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff4',
                                     name='mws-client1',
                                     type='ipv6')
        NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff3',
                                     name='mws-client2',
                                     type='ipv6')
        NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff2',
                                     name='mws-client3',
                                     type='ipv6')
        NetworkConfig.objects.create(IPv6='2001:630:212:8::8c:ff1',
                                     name='mws-client4',
                                     type='ipv6')

        site = Site.objects.create(name="testSite",
                                   start_date=datetime.today(),
                                   type=ServerType.objects.get(id=1))
        service = Service.objects.create(
            site=site,
            type='production',
            status="ready",
            network_configuration=NetworkConfig.get_free_prod_service_config())
        VirtualMachine.objects.create(
            name="test_vm",
            token=uuid.uuid4(),
            cluster=which_cluster(),
            service=service,
            network_configuration=NetworkConfig.get_free_host_config())
        Vhost.objects.create(name="default", service=service)

        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': site.id}))
        self.assertEqual(response.status_code,
                         403)  # The User is not in the list of auth users

        site.users.add(User.objects.get(username="******"))
        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': site.id}))
        self.assertContains(response, "Billing data")
        response = self.client.get(site.get_absolute_url())
        self.assertContains(response, "No billing details are available")

        with mock.patch("apimws.vm.change_vm_power_state"
                        ) as mock_change_vm_power_state:
            mock_change_vm_power_state.return_value = True
            mock_change_vm_power_state.delay.return_value = True
            site.disable()

        suspension = site.suspend_now(input_reason="test suspension")
        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': site.id}))
        self.assertEqual(response.status_code, 403)  # The site is suspended

        with mock.patch("apimws.vm.change_vm_power_state"
                        ) as mock_change_vm_power_state:
            mock_change_vm_power_state.return_value = True
            mock_change_vm_power_state.delay.return_value = True
            with mock.patch("apimws.ansible.subprocess") as mock_subprocess:
                mock_subprocess.check_output.return_value.returncode = 0
                site.enable()

        suspension.start_date = datetime.today() - timedelta(days=2)
        suspension.end_date = datetime.today() - timedelta(days=1)
        suspension.save()
        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': site.id}))
        self.assertContains(response, "Billing data")

        self.assertFalse(hasattr(site, 'billing'))
        pofile = SimpleUploadedFile("file.pdf", "file_content")
        response = self.client.post(
            reverse('billing_management', kwargs={'site_id': site.id}), {
                'purchase_order_number': 'testOrderNumber',
                'group': 'testGroup',
                'purchase_order': pofile
            })
        self.assertRedirects(
            response,
            expected_url=site.get_absolute_url())  # Changes done, redirecting
        site_changed = Site.objects.get(pk=site.id)
        self.assertEqual(site_changed.billing.purchase_order_number,
                         'testOrderNumber')
        self.assertEqual(site_changed.billing.group, 'testGroup')
        self.assertRegexpMatches(site_changed.billing.purchase_order.name,
                                 'billing/file.*\.pdf')
        self.assertRegexpMatches(site_changed.billing.purchase_order.url,
                                 '/media/billing/file.*\.pdf')
        response = self.client.get(response.url)
        self.assertNotContains(response, "No Billing, please add one.")
        site_changed.billing.purchase_order.delete()

        site = Site.objects.get(pk=site.id)
        response = self.client.get(
            reverse('billing_management', kwargs={'site_id': site.id}))
        self.assertContains(response, "testOrderNumber")
        self.assertContains(response, "testGroup")
        self.assertTrue(hasattr(site, 'billing'))
        pofile = SimpleUploadedFile("file.pdf", "file_content")
        response = self.client.post(
            reverse('billing_management', kwargs={'site_id': site.id}), {
                'purchase_order_number': 'testOrderNumber1',
                'group': 'testGroup1',
                'purchase_order': pofile
            })
        self.assertRedirects(
            response,
            expected_url=site.get_absolute_url())  # Changes done, redirecting
        site_changed = Site.objects.get(pk=site.id)
        self.assertEqual(site_changed.billing.purchase_order_number,
                         'testOrderNumber1')
        self.assertEqual(site_changed.billing.group, 'testGroup1')
        self.assertRegexpMatches(site_changed.billing.purchase_order.name,
                                 'billing/file.*\.pdf')
        self.assertRegexpMatches(site_changed.billing.purchase_order.url,
                                 '/media/billing/file.*\.pdf')
        response = self.client.get(response.url)
        self.assertNotContains(response, "No Billing, please add one.")
        site_changed.billing.purchase_order.delete()
Beispiel #10
0
 def setUp(self):
     do_test_login(self, user="******")
     assign_a_site(self)
Beispiel #11
0
    def test_view_new(self):
        response = self.client.get(reverse('newsite'))
        self.assertEqual(response.status_code,
                         302)  # Not logged in, redirected to login
        self.assertTrue(
            response.url.endswith(
                '%s?next=%s' % (reverse('raven_login'), reverse('newsite'))))

        do_test_login(self, user="******")

        response = self.client.get(reverse('newsite'))
        self.assertRedirects(response, expected_url=reverse('listsites'))

        pre_create_site()

        response = self.client.get(reverse('newsite'))
        self.assertContains(response, "Request new server")

        response = self.client.post(reverse('newsite'), {
            'siteform-description': 'Desc',
            'siteform-email': '*****@*****.**'
        })
        self.assertContains(response,
                            "This field is required.")  # Empty name, error

        test_site = assign_a_site(self, pre_create=False)

        # TODO test email check
        # TODO test dns api
        # TODO test errors

        response = self.client.get(test_site.get_absolute_url())

        self.assertContains(
            response,
            "Your email %s is unconfirmed, please check your email inbox and "
            "click on the link of the email we have sent you." %
            test_site.email)

        self.assertEqual(len(test_site.production_vms), 1)

        # Disable site
        self.assertFalse(test_site.disabled)
        with mock.patch("apimws.vm.change_vm_power_state"
                        ) as mock_change_vm_power_state:
            mock_change_vm_power_state.return_value = True
            mock_change_vm_power_state.delay.return_value = True
            self.client.post(
                reverse('disablesite', kwargs={'site_id': test_site.id}))
        # TODO test that views are restricted
        self.assertTrue(Site.objects.get(pk=test_site.id).disabled)
        # Enable site
        with mock.patch("apimws.ansible_impl.subprocess") as mock_subprocess:
            with mock.patch("apimws.vm.change_vm_power_state"
                            ) as mock_change_vm_power_state:
                mock_subprocess.check_output.return_value.returncode = 0
                mock_change_vm_power_state.return_value = True
                mock_change_vm_power_state.delay.return_value = True
                self.client.post(
                    reverse('enablesite', kwargs={'site_id': test_site.id}))
        # TODO test that views are no longer restricted
        self.assertFalse(Site.objects.get(pk=test_site.id).disabled)

        self.assertEqual(len(test_site.test_vms), 0)

        # TODO Clone first VM into the secondary VM
        # self.client.post(reverse(views.clone_vm_view, kwargs={'site_id': test_site.id}), {'primary_vm': 'true'})
        #
        # self.assertEqual(len(test_site.test_vms), 1)
        #
        # self.client.delete(reverse(views.delete_vm, kwargs={'service_id': test_site.secondary_vm.service.id}))

        with mock.patch("apimws.vm.change_vm_power_state") as mock_vm_api:
            mock_vm_api.return_value = True
            mock_vm_api.delay.return_value = True
            self.client.post(
                reverse('deletesite', kwargs={'site_id': test_site.id}))
        self.assertIsNone(Site.objects.get(pk=test_site.id).end_date)

        with mock.patch("apimws.vm.change_vm_power_state") as mock_vm_api:
            mock_vm_api.return_value = True
            mock_vm_api.delay.return_value = True
            self.client.post(
                reverse('deletesite', kwargs={'site_id': test_site.id}),
                {'confirmation': 'yes'})
        self.assertIsNotNone(Site.objects.get(pk=test_site.id).end_date)