def test_connection_limit_g02(self):
		""" connection_limit_g02 """
		connection_limit = {
			"ipv4": [
				{
					"source_ip": "10.10.10.1",
					"destination_ip": "10.10.10.2",
					"protocol": "TCP",
					"limit_rate": 5,
					"limit_rate_unit": "second",
					"limit_burst": 5
				},
				{
					"source_ip": "10.10.10.1",
					"destination_ip": "10.10.10.2",
					"protocol": "UDP",
					"limit_rate": 5,
					"limit_rate_unit": "minute",
					"limit_burst": 5
				}
			],
			"ipv6": [
				{
					"source_ip": "2001::1",
					"destination_ip": "2001::2",
					"protocol": "TCP",
					"limit_rate": 5,
					"limit_rate_unit": "second",
					"limit_burst": 5
				},
				{
					"source_ip": "2001::1",
					"destination_ip": "2001::2",
					"protocol": "UDP",
					"limit_rate": 5,
					"limit_rate_unit": "minute",
					"limit_burst": 5
				}
			]
		}
		self.maxDiff = None
		e = ml_w_connection_limit.set(None, connection_limit)
		self.assertTrue(e[0], e[1])
		f = open(os.path.join("running", "connection_limit.txt"), "r")
		e = f.readlines()
		f.close()
		if "json" == ml_system.CFG_TYPE:
			self.assertEqual(e, ['{"br": [{"STP": true, "name": "s0b1", "hello_time": 5, "interface": ["s0e2"], "max_message_age": 5, "forward_delay": 5}]}'])
		if "jcfg" == ml_system.CFG_TYPE:
			self.assertEqual(e, ['connection_limit {\n', '    ipv4-array {\n', '        ipv4 { #1\n', '            source_ip 10.10.10.1\n', '            destination_ip 10.10.10.2\n', '            protocol TCP\n', '            limit_rate 5\n', '            limit_rate_unit second\n', '        }\n', '        ipv4 { #2\n', '            source_ip 10.10.10.1\n', '            destination_ip 10.10.10.2\n', '            protocol UDP\n', '            limit_rate 5\n', '            limit_rate_unit minute\n', '        }\n', '    }\n', '    ipv6-array {\n', '        ipv6 { #1\n', '            source_ip 2001::1\n', '            destination_ip 2001::2\n', '            protocol TCP\n', '            limit_rate 5\n', '            limit_rate_unit second\n', '        }\n', '        ipv6 { #2\n', '            source_ip 2001::1\n', '            destination_ip 2001::2\n', '            protocol UDP\n', '            limit_rate 5\n', '            limit_rate_unit minute\n', '        }\n', '    }\n', '}\n'])
			def run(self):
				e = ml_w_connection_limit.set(None, connection_limit, threading.RLock())
Beispiel #3
0
    def connect(self, **kwargs):
        '''
            connection limit getter and setter
            format:
                 {
                    "ipv4": [
                        {
                            "source_ip": "ANY",
                            "destination_ip": "ANY",
                            "protocol": "TCP",
                            "application_port": 80,
                            "limit_rate": 5,
                            "limit_rate_unit": "second",
                            "limit_burst": 5
                        },
                        {
                            "source_ip": "ANY",
                            "destination_ip": "ANY",
                            "protocol": "UDP",
                            "application_port": 80,
                            "limit_rate": 5,
                            "limit_rate_unit": "minute",
                            "limit_burst": 5
                        },
                        ...
                    ],
                    "ipv6": [
                        {
                            "source_ip": "ANY",
                            "destination_ip": "ANY",
                            "protocol": "TCP",
                            "application_port": 80,
                            "limit_rate": 5,
                            "limit_rate_unit": "second",
                            "limit_burst": 5
                        },
                        {
                            "source_ip": "ANY",
                            "destination_ip": "ANY",
                            "protocol": "UDP",
                            "application_port": 80,
                            "limit_rate": 5,
                            "limit_rate_unit": "minute",
                            "limit_burst": 5
                        },
                        ...
                    ]
                }
        '''
        import libs.login
        if False == libs.login.cklogin():
            raise _.HTTPRedirect('/')

        import ml_w_connection_limit as wcl
        import json
        import libs.tools
        if "connect" in kwargs:
            # setter
            dat = kwargs
            res = {}
            opt = []
            goptTmp = []
            nopt = {}

            for k in dat:
                if "@@" in k:
                    kk = k.split("@@")
                    if "list" == type(kk).__name__ and len(kk) > 1:
                        goptTmp = self._unstructDict(dat, "@@")

            gopt = {}

            for k in goptTmp:
                if not "connect" == k:
                    gopt[k] = goptTmp[k]

            for k in gopt:
                nopt[k] = []
                res = self._unstructDict(gopt[k], "@@")
                dd = {}
                for kk in res:
                    dd = self._unstructDict(res[kk], "@@")
                    nopt[k].append(dd)


            res = wcl.set(user = self.getUser(), cfg = nopt)
            if False == res[0]:
                return json.dumps([res[0], libs.tools.translateMessage(res[1])])
            else:
                return json.dumps(res)
        else:
            # getter
            data = wcl.get()
            return json.dumps(data)