Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- encoding: utf-8 -*-
- """
- filename: descriptor_2_1.py
- description: python descriptor
- License: GPL V2
- Author: 天使de眼睛
- 除特别声明,所有代码均是 python3.6 在 iOS 环境下编写测试。
- 运行代码需要 pytest
- pip install pytest
- """
- from ipaddress import ip_address
- import pytest
- class Server:
- def __init__(self, name, ip, rack):
- self._name = None
- self._ip = None
- self.name = name
- self.ip = ip
- self._rack = None
- self.rack = rack
- @property
- def name(self):
- return self._name
- @name.setter
- def name(self, value):
- if not isinstance(value, str):
- raise TypeError(f'Expected {str}')
- self._name = value.upper()
- @property
- def ip(self):
- return self._ip
- @ip.setter
- def ip(self, value):
- if not isinstance(value, str):
- raise TypeError(f'Expected {str}')
- self._ip = ip_address(value)
- @property
- def rack(self):
- return self._rack
- @rack.setter
- def rack(self, value):
- if not isinstance(value, int):
- raise TypeError(f'Expected {int}')
- self._rack = value
- class Protocol:
- def __init__(self, protocol, source, destination, port):
- self._protocol = None
- self._source = None
- self._destination = None
- self._port = None
- self.protocol = protocol
- self.source = source
- self.destination = destination
- self.port = port
- @property
- def protocol(self):
- return self._protocol
- @protocol.setter
- def protocol(self, value):
- if not isinstance(value, str):
- raise TypeError(f'Expected {str}')
- self._protocol = value.upper()
- @property
- def source(self):
- return self._source
- @source.setter
- def source(self, value):
- if not isinstance(value, str):
- raise TypeError(f'Expected {str}')
- self._source = ip_address(value)
- @property
- def destination(self):
- return self._destination
- @destination.setter
- def destination(self, value):
- if not isinstance(value, str):
- raise TypeError(f'Expected {str}')
- self._destination = ip_address(value)
- @property
- def port(self):
- return self._port
- @port.setter
- def port(self, value):
- if not isinstance(value, int):
- raise TypeError(f'Expected {int}')
- if value < 1:
- raise ValueError('port must >= 1')
- if value > 65535:
- raise ValueError('port must <= 65535')
- self._port = value
- class TestClasses:
- def test_Server(self):
- server = Server('myserver1', '192.168.1.1', 5)
- assert server.name == 'MYSERVER1'
- assert server.ip == ip_address('192.168.1.1')
- with pytest.raises(TypeError) as error:
- server.name = 1234
- assert str(error.value) == "Expected <class 'str'>"
- with pytest.raises(TypeError) as error:
- server.ip = 1234
- assert str(error.value) == "Expected <class 'str'>"
- assert server.rack == 5
- with pytest.raises(TypeError) as error:
- server.rack = 'up'
- assert str(error.value) == "Expected <class 'int'>"
- def test_Protocol(self):
- logger = Protocol('tcp', '192.168.1.1', '10.1.1.1', 8080)
- assert logger.protocol == 'TCP'
- assert logger.source == ip_address('192.168.1.1')
- assert logger.destination == ip_address('10.1.1.1')
- with pytest.raises(TypeError) as error:
- logger.protocol = ['tcp']
- assert str(error.value) == "Expected <class 'str'>"
- with pytest.raises(TypeError) as error:
- logger.source = ['tcp']
- assert str(error.value) == "Expected <class 'str'>"
- assert logger.port == 8080
- with pytest.raises(ValueError) as error:
- logger.port = 0
- assert str(error.value) == "port must >= 1"
- with pytest.raises(ValueError) as error:
- logger.port = 65536
- assert str(error.value) == "port must <= 65535"
- if __name__ == '__main__':
- import sys
- pytest.main(sys.argv + ['-v'])
Add Comment
Please, Sign In to add comment