mirror of
				https://github.com/peeringdb/peeringdb.git
				synced 2024-05-11 05:55:09 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import py.test
 | 
						|
import pytest
 | 
						|
import json
 | 
						|
 | 
						|
from rest_framework.test import APIClient
 | 
						|
from django.test import Client, TestCase
 | 
						|
 | 
						|
from peeringdb_server import maintenance, settings
 | 
						|
from peeringdb_server.models import REFTAG_MAP, User
 | 
						|
import peeringdb_server.views as views
 | 
						|
 | 
						|
from util import ClientCase
 | 
						|
 | 
						|
class TestMaintenanceMode(ClientCase):
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def setUpTestData(cls):
 | 
						|
        super(TestMaintenanceMode, cls).setUpTestData()
 | 
						|
        cls.superuser = User.objects.create_user("su","su@localhost","su",is_superuser=True)
 | 
						|
        cls.org = REFTAG_MAP["org"].objects.create(name="Test Org",
 | 
						|
                                                   status="ok")
 | 
						|
 | 
						|
 | 
						|
    @pytest.fixture(autouse=True)
 | 
						|
    def init_lockfile(self, tmpdir):
 | 
						|
        settings.MAINTENANCE_MODE_LOCKFILE = str(tmpdir.join("maintenance.lock"))
 | 
						|
 | 
						|
 | 
						|
    def test_signup(self):
 | 
						|
        """
 | 
						|
        user signup should be blocked during maintenance
 | 
						|
        """
 | 
						|
 | 
						|
        maintenance.on()
 | 
						|
 | 
						|
        client = Client()
 | 
						|
        resp = client.post("/register", data={})
 | 
						|
        assert resp.status_code == 503
 | 
						|
        assert resp.content.find("maintenance mode") > -1
 | 
						|
 | 
						|
        maintenance.off()
 | 
						|
 | 
						|
 | 
						|
    def test_api(self):
 | 
						|
        """
 | 
						|
        test that maintenance mode on blocks all write ops to the rest api
 | 
						|
        """
 | 
						|
 | 
						|
        # set maintenance on
 | 
						|
        maintenance.on()
 | 
						|
 | 
						|
        # init api client
 | 
						|
        self.client = APIClient()
 | 
						|
        self.client.force_authenticate(self.superuser)
 | 
						|
 | 
						|
        err_str = "in maintenance mode"
 | 
						|
 | 
						|
        # GET requests should work as expected
 | 
						|
        r = self.client.get("/api/org/1", format="json")
 | 
						|
        content = json.loads(r.content)
 | 
						|
        assert r.status_code == 200
 | 
						|
 | 
						|
        # POST should be blocked
 | 
						|
        r = self.client.post("/api/net", {
 | 
						|
            "org_id": 1,
 | 
						|
            "name": "Test net",
 | 
						|
            "asn": 9000000
 | 
						|
        }, format="json")
 | 
						|
        content = json.loads(r.content)
 | 
						|
        assert r.status_code == 503
 | 
						|
        assert content["meta"]["error"].find(err_str) > -1
 | 
						|
        net = {"id": 1}
 | 
						|
 | 
						|
        # PUT should be blocked
 | 
						|
        r = self.client.put("/api/net/{}".format(net["id"]), net,
 | 
						|
                            format="json")
 | 
						|
        content = json.loads(r.content)
 | 
						|
        assert r.status_code == 503
 | 
						|
        assert content["meta"]["error"].find(err_str) > -1
 | 
						|
 | 
						|
 | 
						|
        # DELETE should be blocked
 | 
						|
        r = self.client.delete("/api/net/{}".format(net["id"]), {},
 | 
						|
                               format="json")
 | 
						|
        content = json.loads(r.content)
 | 
						|
        assert r.status_code == 503
 | 
						|
        assert content["meta"]["error"].find(err_str) > -1
 | 
						|
 | 
						|
        # set maintenance mode off
 | 
						|
        maintenance.off()
 |