Esempio n. 1
0
    def test_dns_record_reset_ttl(self):
        record = r.DNSRecord('irrelevant', const._TYPE_SRV, const._CLASS_IN, const._DNS_HOST_TTL)
        time.sleep(1)
        record2 = r.DNSRecord('irrelevant', const._TYPE_SRV, const._CLASS_IN, const._DNS_HOST_TTL)
        now = r.current_time_millis()

        assert record.created != record2.created
        assert record.get_remaining_ttl(now) != record2.get_remaining_ttl(now)

        record.reset_ttl(record2)

        assert record.ttl == record2.ttl
        assert record.created == record2.created
        assert record.get_remaining_ttl(now) == record2.get_remaining_ttl(now)
Esempio n. 2
0
 def test_dns_record_is_recent(self):
     now = current_time_millis()
     record = r.DNSRecord('irrelevant', const._TYPE_SRV, const._CLASS_IN, 8)
     assert record.is_recent(now + (8 / 4.1 * 1000)) is True
     assert record.is_recent(now + (8 / 3 * 1000)) is False
     assert record.is_recent(now + (8 / 2 * 1000)) is False
     assert record.is_recent(now + (8 * 1000)) is False
Esempio n. 3
0
def test_legacy_record_update_listener():
    """Test a RecordUpdateListener that does not implement update_records."""

    # instantiate a zeroconf instance
    zc = Zeroconf(interfaces=['127.0.0.1'])

    with pytest.raises(RuntimeError):
        r.RecordUpdateListener().update_record(
            zc, 0, r.DNSRecord('irrelevant', const._TYPE_SRV, const._CLASS_IN, const._DNS_HOST_TTL)
        )

    updates = []

    class LegacyRecordUpdateListener(r.RecordUpdateListener):
        """A RecordUpdateListener that does not implement update_records."""

        def update_record(self, zc: 'Zeroconf', now: float, record: r.DNSRecord) -> None:
            nonlocal updates
            updates.append(record)

    listener = LegacyRecordUpdateListener()

    zc.add_listener(listener, None)

    # dummy service callback
    def on_service_state_change(zeroconf, service_type, state_change, name):
        pass

    # start a browser
    type_ = "_homeassistant._tcp.local."
    name = "MyTestHome"
    browser = ServiceBrowser(zc, type_, [on_service_state_change])

    info_service = ServiceInfo(
        type_,
        '%s.%s' % (name, type_),
        80,
        0,
        0,
        {'path': '/~paulsm/'},
        "ash-2.local.",
        addresses=[socket.inet_aton("10.0.1.2")],
    )

    zc.register_service(info_service)

    zc.wait(1)

    browser.cancel()

    assert len(updates)
    assert len([isinstance(update, r.DNSPointer) and update.name == type_ for update in updates]) >= 1

    zc.remove_listener(listener)
    # Removing a second time should not throw
    zc.remove_listener(listener)

    zc.close()
Esempio n. 4
0
 def test_dns_record_abc(self):
     record = r.DNSRecord("irrelevant", r._TYPE_SRV, r._CLASS_IN,
                          r._DNS_TTL)
     self.assertRaises(r.AbstractMethodException, record.__eq__, record)
     self.assertRaises(r.AbstractMethodException, record.write, None)
Esempio n. 5
0
 def test_dns_record_is_expired(self):
     record = r.DNSRecord('irrelevant', const._TYPE_SRV, const._CLASS_IN, 8)
     now = current_time_millis()
     assert record.is_expired(now) is False
     assert record.is_expired(now + (8 / 2 * 1000)) is False
     assert record.is_expired(now + (8 * 1000)) is True