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())
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")
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
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))
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))
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()
def setUp(self): do_test_login(self, user="******") assign_a_site(self)
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)