コード例 #1
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_restart__should_call_sdk_function(self):
        obj = ZKAccess(connstr=self.connstr)
        obj.restart()

        self.sdk.control_device.assert_called_once_with(
            ControlOperation.restart.value, 0, 0, 0, 0)
        assert obj.connstr == self.connstr
コード例 #2
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_connect__if_connected_and_trying_connect_with_same_connstr__should_do_nothing(
            self):
        obj = ZKAccess(connstr=self.connstr)
        obj.connect(self.connstr)

        self.sdk.connect.assert_not_called()
        assert obj.connstr == self.connstr
コード例 #3
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_disconnect__should_call_sdk_function(self):
        obj = ZKAccess(connstr=self.connstr)

        obj.disconnect()

        self.sdk.disconnect.assert_called_once_with()
        assert obj.connstr == self.connstr
コード例 #4
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_connect__if_connected_and_trying_connect_with_another_connstr__should_raise_error(
            self):
        obj = ZKAccess(connstr=self.connstr)
        connstr2 = 'protocol=TCP,ipaddress=192.168.1.202,port=4370,timeout=4000,passwd='

        with pytest.raises(ValueError):
            obj.connect(connstr2)
コード例 #5
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_table__should_return_different_queryset_objects(self, table_name):
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)

        res1 = obj.table(table_name)
        res2 = obj.table(table_name)

        assert res1 is not res2
        assert res1._sdk is res2._sdk
コード例 #6
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_change_ip_address__shoudl_call_sdk_function(self):
        self.sdk.modify_ip_address.return_value = None

        ZKAccess.change_ip('00:17:61:01:88:27', '192.168.1.100',
                           '255.255.255.0', ChangeIPProtocol.udp, 'path')

        self.sdk.modify_ip_address.assert_called_once_with(
            '00:17:61:01:88:27', '192.168.1.100', '255.255.255.0', 'UDP')
コード例 #7
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_cancel_alarm__should_call_sdk(self):
        self.sdk.control_device.return_value = 0
        obj = ZKAccess(connstr=self.connstr)

        obj.cancel_alarm()

        self.sdk.control_device.assert_called_once_with(
            ControlOperation.cancel_alarm.value, 0, 0, 0, 0)
コード例 #8
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_upload_file__should_upload_file(self):
        self.sdk.set_device_file_data.return_value = None
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)
        data_stream = io.BytesIO(b'file_data!')

        obj.upload_file('test_file.dat', data_stream)

        self.sdk.set_device_file_data.assert_called_once_with(
            'test_file.dat', b'file_data!', 10)
コード例 #9
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_table__should_return_queryset(self, table_name):
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)

        res = obj.table(table_name)

        assert isinstance(res, QuerySet)
        assert res._sdk is obj.sdk
        assert res._table_cls == User
        assert res._buffer_size is None
コード例 #10
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_table__should_return_instance_of_queryset_class(self):
        class QuerySetStub(QuerySet):
            pass

        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)
        obj.queryset_class = QuerySetStub

        res = obj.table('User')

        assert isinstance(res, QuerySetStub)
コード例 #11
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_connect__should_call_sdk_function(self):
        connstr = 'protocol=TCP,ipaddress=192.168.1.201,port=4370,timeout=4000,passwd='
        obj = ZKAccess()
        self.sdk.handle = None
        self.sdk.is_connected = False

        obj.connect(connstr)

        self.sdk.connect.assert_called_once_with(connstr)
        assert obj.connstr == connstr
コード例 #12
0
ファイル: test_pyzkaccess.py プロジェクト: syshack/pyzkaccess
    def test_connect_if_connstr_set_in_contructor(self):
        test_connstr = 'protocol=TCP,ipaddress=10.0.3.201,port=4370,timeout=4000,passwd='
        # self.obj.connect = Mock()

        with patch('ctypes.WinDLL', create=True) as m:
            obj = Mock(spec=ZKAccess)
            # obj.__init__ = Mock(wraps=ZKAccess.__init__)

            ZKAccess.__init__(obj, 'somedll', test_connstr)

        obj.connect.assert_called_once_with(test_connstr)
コード例 #13
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_upload_file__should_preserve_stream_pointer_position(self):
        self.sdk.set_device_file_data.return_value = None
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)
        data_stream = io.BytesIO(b'file_data!')
        data_stream.seek(3)

        obj.upload_file('test_file.dat', data_stream)

        self.sdk.set_device_file_data.assert_called_once_with(
            'test_file.dat', b'e_data!', 7)
        assert data_stream.tell() == 3
コード例 #14
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_download_file__if_buffer_size_explicitly_set__should_call_sdk_once(
            self, buffer_size):
        file_data = b'a' * buffer_size
        self.sdk.get_device_file_data.return_value = file_data
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)

        res = obj.download_file('test_file.dat', buffer_size)

        assert isinstance(res, io.BytesIO)
        assert res.getvalue() == file_data
        self.sdk.get_device_file_data.assert_called_once_with(
            'test_file.dat', buffer_size)
コード例 #15
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_download_file__should_download_file_with_default_buffer_size(
            self):
        file_data = b'file_data!'
        self.sdk.get_device_file_data.return_value = file_data
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)

        res = obj.download_file('test_file.dat')

        assert isinstance(res, io.BytesIO)
        assert res.getvalue() == file_data
        self.sdk.get_device_file_data.assert_called_once_with(
            'test_file.dat', 1 * 1024 * 1024)
コード例 #16
0
    def test_init__if_no_autoconnect__should_initialize_default_attributes(self):
        obj = ZKAccess()

        assert obj.connstr is None
        assert obj.device_model == ZK400
        assert obj.sdk is self.sdk
        assert obj._device is None
コード例 #17
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_device_prop__if_not_connected__should_raise_error(self):
        self.sdk.handle = None
        self.sdk.is_connected = False
        obj = ZKAccess()

        with pytest.raises(RuntimeError):
            _ = obj.device
コード例 #18
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_parameters_prop__should_return_object_of_device_parameters(self):
        obj = ZKAccess(connstr=self.connstr, device_model=ZK200)
        res = obj.parameters

        assert type(res) == DeviceParameters
        assert res._sdk == self.sdk
        assert res.device_model == ZK200
コード例 #19
0
ファイル: cli.py プロジェクト: bdragon300/pyzkaccess
 def _search_devices():
     devices = ZKAccess.search_devices(broadcast_address, dllpath=self._dllpath)
     for device in devices:
         values = [
             device.mac, device.ip, device.serial_number, device.model.name, device.version
         ]
         yield dict(zip(headers, values))
コード例 #20
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_context_manager__should_disconnect_after_exit(self):
        obj = ZKAccess(connstr=self.connstr)

        with obj:
            pass

        self.sdk.disconnect.assert_called_once_with()
コード例 #21
0
    def test_init__if_no_autoconnect__should_initialize_default_event_log_attributes(self):
        obj = ZKAccess()

        assert type(obj._event_log) == EventLog
        assert obj._event_log._sdk is self.sdk
        assert obj._event_log.buffer_size == 4096
        assert obj._event_log.data.maxlen is None
        assert obj._event_log.only_filters == {}
コード例 #22
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_search_devices__if_other_error_raised__should_reraise_it(self):
        self.sdk.search_device.side_effect = ZKSDKError(
            "Empty command response", -5)

        with pytest.raises(ZKSDKError) as e:
            res = ZKAccess.search_devices('192.168.1.255')

        assert e.value.err == -5
コード例 #23
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_search_devices__if_no_devices_found_error_raise__should_return_empty_tuple(
            self):
        self.sdk.search_device.side_effect = ZKSDKError(
            "Empty command response", -2)
        expect = ()

        res = ZKAccess.search_devices('192.168.1.255')
        assert res == expect
コード例 #24
0
    def test_doors_prop__should_return_object_sequence(self, model, doors_count):
        obj = ZKAccess(connstr=self.connstr, device_model=model)
        res = obj.doors

        assert len(res) == doors_count
        assert type(res) == DoorList
        assert all(type(x) == Door for x in res)
        assert all(obj.number == num for obj, num in zip(res, model.doors_def))
コード例 #25
0
    def test_aux_inputs_prop__should_return_object_sequence(self, model, aux_input_count):
        obj = ZKAccess(connstr=self.connstr, device_model=model)
        res = obj.aux_inputs

        assert len(res) == aux_input_count
        assert type(res) == AuxInputList
        assert all(type(x) == AuxInput for x in res)
        assert all(obj.number == num for obj, num in zip(res, model.aux_inputs_def))
コード例 #26
0
    def test_relays_prop__should_return_object_sequence(self, model, relay_count):
        obj = ZKAccess(connstr=self.connstr, device_model=model)
        res = obj.relays

        assert len(res) == relay_count
        assert type(res) == RelayList
        assert all(type(x) == Relay for x in res)
        assert all(obj.number == num for obj, num in zip(res, model.relays_def))
        assert all(obj.group == group for obj, group in zip(res, model.groups_def))
コード例 #27
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_init__if_device_is_specified__should_override_device_model(self):
        device = ZKDevice(mac='00:17:61:C8:EC:17',
                          ip='192.168.1.201',
                          serial_number='DGD9190019050335134',
                          model=ZK100,
                          version='AC Ver 4.3.4 Apr 28 2017')

        obj = ZKAccess(device=device, device_model=ZK200)

        assert obj.device_model == ZK200
コード例 #28
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_download_file__if_buffer_got_overflowed__should_repeat_with_double_buffer_size(
            self, data_size):
        def se(*a, **kw):
            return file_data[:a[1]]

        file_data = b'a' * data_size
        self.sdk.get_device_file_data.side_effect = se
        obj = ZKAccess(connstr=self.connstr, device_model=ZK400)
        expect_calls = [
            call('test_file.dat', 1 * 1024 * 1024),
            call('test_file.dat', 2 * 1024 * 1024)
        ]

        res = obj.download_file('test_file.dat')

        self.sdk.get_device_file_data.assert_has_calls(expect_calls)
        assert isinstance(res, io.BytesIO)
        assert res.tell() == 0
        assert len(res.getvalue()) == len(file_data)
コード例 #29
0
ファイル: cli.py プロジェクト: bdragon300/pyzkaccess
    def change_ip(
            self, mac_address: str, new_ip: str, *, broadcast_address: str = '255.255.255.255'
    ):
        """
        Classmethod that changes IP address on a device without
        making a connection to it -- by sending broadcast packets to
        the given broadcast address. For security reasons, network
        settings can be changed by this command on devices with
        no password only.

        Args:
            mac_address: MAC address of a device
            new_ip: new IP address to be set on a device
            broadcast_address: broadcast network address to send
                broadcast packets to
        """
        ZKAccess.change_ip(
            mac_address, new_ip, broadcast_address, ChangeIPProtocol.udp, self._dllpath
        )
コード例 #30
0
ファイル: test_main.py プロジェクト: bdragon300/pyzkaccess
    def test_device_prop__if_device_was_passed_to_init__should_return_it(self):
        device = ZKDevice(mac='00:17:61:C8:EC:17',
                          ip='192.168.1.201',
                          serial_number='DGD9190019050335134',
                          model=ZK100,
                          version='AC Ver 4.3.4 Apr 28 2017')
        obj = ZKAccess(device=device)

        res = obj.device

        assert res is device