示例#1
0
def test_property_tags(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_tags/test_property_tags'

    dynamic_tags = {'this': 'is', 'dynamic': 'tags'}
    dynamic_tags_full = dynamic_tags
    dynamic_tags_full.update(nA.name_uuid())

    dynamic_tags2 = {'this': 'is', 'dynamic': 'tags', 'additional': 'tag'}
    dynamic_tags2_full = dynamic_tags2
    dynamic_tags2_full.update(nA.name_uuid())

    ivA = IsacValue(nA,
                    uri,
                    randint(0, 100),
                    dynamic_tags=dict(dynamic_tags),
                    survey_last_value=False,
                    survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.tags == dynamic_tags_full
    assert ivB.tags == dynamic_tags_full

    ivA.tags['additional'] = 'tag'
    ivA.value = randint(0, 100)
    assert ivA.tags == dynamic_tags2_full
    assert ivB.tags == dynamic_tags2_full
示例#2
0
def test_creation_no_init(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_creation_no_init/test_no_init'
    ivA = IsacValue(nA, uri, survey_static_tags=False)
    assert ivA.value is None
    assert ivA.timestamp == datetime(1970, 1, 1, 0, 0)
    assert ivA.static_tags == {}
    assert ivA.tags == {}
    assert ivA.metadata is None

    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivB.value is None
    assert ivB.timestamp == datetime(1970, 1, 1, 0, 0)
    assert ivB.static_tags == {}
    assert ivB.tags == {}
    assert ivB.metadata is None

    ivB = None
    ivA.value = randint(0, 100)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivB.value == ivA.value
    assert ivB.timestamp == ivA.timestamp
    assert ivB.static_tags == {}
    assert ivB.tags == nA.name_uuid()
    assert ivB.metadata is None
示例#3
0
def test_observer_metadata(two_nodes):  # noqa: F811
    nA, nB = two_nodes
    obs = Observer()

    try:
        nB.transport.join_event()  # Necesarry, but not user friendly
        uri = 'test://test_isac_value/test_observer_metadata/test_observer'
        ivA = IsacValue(nA,
                        uri,
                        survey_last_value=False,
                        survey_static_tags=False)
        ivB = IsacValue(nB,
                        uri,
                        survey_last_value=False,
                        survey_static_tags=False)
        ivB.metadata_observers += obs.observer
        green.sleep(0.25)
        ivA.metadata = {'this': 'is', 'meta': 'data'}

        for i in range(10):
            green.sleep(0.5)
            if obs.args is not None:
                break

        assert obs.args, 'Callback not received'
        iv_recv, metadata, source_peer = obs.args
        assert iv_recv == ivB
        assert metadata == ivA.metadata
        assert source_peer['peer_name'] == nA.name
        assert source_peer['peer_uuid'] == str(nA.transport.uuid())

    finally:
        nB.transport.leave_event()
示例#4
0
def test_creation_dynamic_tags(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_creation_dynamic_tags/test_dynamic_tags'

    dynamic_tags = {'this': 'is', 'dynamic': 'tags'}
    dynamic_tags_full = dynamic_tags
    dynamic_tags_full.update(nA.name_uuid())

    ivA = IsacValue(nA,
                    uri,
                    dynamic_tags=dynamic_tags,
                    survey_last_value=False,
                    survey_static_tags=False)
    assert ivA.tags == dynamic_tags

    ivB = IsacValue(nB, uri, survey_static_tags=False)
    # Did not get stored because the default timestamps (0) were equal in both cases
    assert ivB.tags == {}

    ivB = None
    ivA.value = randint(0, 100)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.tags == dynamic_tags_full
    assert ivB.value == ivA.value
    assert ivB.timestamp == ivA.timestamp
    assert ivB.tags == dynamic_tags_full
示例#5
0
def test_property_value_ts_tags(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_value_ts_tags/test_property_value_ts_tags'

    dynamic_tags = {'this': 'is', 'dynamic': 'tags'}
    dynamic_tags_full = dynamic_tags
    dynamic_tags_full.update(nA.name_uuid())

    dynamic_tags2 = {'this': 'is', 'dynamic': 'tags', 'additional': 'tag'}
    dynamic_tags2_full = dynamic_tags2
    dynamic_tags2_full.update(nA.name_uuid())

    ivA = IsacValue(nA,
                    uri,
                    randint(0, 100),
                    dynamic_tags=dynamic_tags,
                    survey_last_value=False,
                    survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.value_ts_tags == (ivA.value, ivA.timestamp, dynamic_tags_full)
    assert ivB.value_ts_tags == (ivA.value, ivA.timestamp, dynamic_tags_full)

    v = ivA.value + 10
    ts = ivA.timestamp + timedelta(hours=1)
    ivA.value_ts_tags = v, ts, dynamic_tags2
    assert ivA.value_ts_tags == (v, ts, dynamic_tags2_full)
    assert ivB.value_ts_tags == (v, ts, dynamic_tags2_full)
示例#6
0
def test_survey_values_metadata(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri_nometa = 'test://test_survey_value/test_survey_values_metadata/iv_nometa'
    iv_nometa = IsacValue(nA, uri_nometa, survey_last_value=False, survey_static_tags=False)
    uri_meta1 = 'test://test_survey_value/test_survey_value_metadata/iv_meta1'
    iv_meta1 = IsacValue(
        nA, uri_meta1, metadata={'a': 1, 'b': 2}, survey_last_value=False, survey_static_tags=False)
    uri_meta2 = 'test://test_survey_value/test_survey_value_metadata/iv_meta2'
    iv_meta2 = IsacValue(
        nA, uri_meta2, metadata={'c': 3, 'd': 4}, survey_last_value=False, survey_static_tags=False)

    assert nB.survey_values_metadata([uri_meta1]) == {uri_meta1: iv_meta1.metadata}
    assert nB.survey_values_metadata([uri_meta1, uri_meta2]) == {
        uri_meta1: iv_meta1.metadata,
        uri_meta2: iv_meta2.metadata,
    }
    assert nB.survey_values_metadata('.*meta.$', is_re=True) == {
        uri_meta1: iv_meta1.metadata,
        uri_meta2: iv_meta2.metadata,
    }
    assert nB.survey_values_metadata('.*nometa$', is_re=True, timeout=0.1) == {}
    assert nB.survey_values_metadata(
        'test://test_survey_value/test_survey_value_metadata/unknown', timeout=0.1) == {}

    # Wrong RE should return an empty set AND not cause remote nodes to crash
    assert nB.survey_values_metadata('*', is_re=True, timeout=0.1) == {}
    assert nB.survey_values_metadata(
        [uri_meta1]) == {uri_meta1: iv_meta1.metadata}, 'Remote node crashed'
示例#7
0
def test_property_value(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_value/test_property_value'
    ivA = IsacValue(nA, uri, survey_last_value=False, survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.value is None
    assert ivB.value is None

    v1 = randint(0, 100)
    ivA.value = v1
    ts1 = ivA.timestamp
    assert ivA.value == v1
    assert ivB.value == v1
示例#8
0
def test_survey_value_metadata(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri_nometa = 'test://test_survey_value/test_survey_value_metadata/iv_nometa'
    iv_nometa = IsacValue(nA, uri_nometa, survey_last_value=False, survey_static_tags=False)
    uri_meta = 'test://test_survey_value/test_survey_value_metadata/iv_meta'
    iv_meta = IsacValue(
        nA, uri_meta, metadata={'a': 1, 'b': 2},
        survey_last_value=False, survey_static_tags=False
    )

    assert nB.survey_value_metadata(uri_nometa, timeout=0.1) == (None, None)
    assert nB.survey_value_metadata(
        'test://test_survey_value/test_survey_value_metadata/unknown', timeout=0.1) == (None, None)
    assert nB.survey_value_metadata(uri_meta) == (iv_meta.metadata, nA.name_uuid())
示例#9
0
def test_weakref(one_node):  # noqa: F811
    iv = IsacValue(one_node,
                   'test://test_isac_value/test_weakref/test_iv',
                   survey_last_value=False,
                   survey_static_tags=False)
    del iv
    assert one_node.isac_values.valuerefs() == []
示例#10
0
def test_survey_value_static_tags(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri_nostatictags = 'test://test_survey_value/test_survey_value_static_tags/iv_nostatictags'
    iv_nostatictags = IsacValue(
        nA, uri_nostatictags, survey_last_value=False, survey_static_tags=False)
    uri_statictags = 'test://test_survey_value/test_survey_value_static_tags/iv_statictags'
    iv_statictags = IsacValue(
        nA, uri_statictags, static_tags={'this': 'is', 'static': 'tags'},
        survey_last_value=False, survey_static_tags=False
    )

    assert nB.survey_value_static_tags(uri_nostatictags, timeout=0.1) == {}
    assert nB.survey_value_static_tags(
        'test://test_survey_value/test_survey_value_static_tags/unknown', timeout=0.1) == {}
    assert nB.survey_value_static_tags(uri_statictags) == iv_statictags.static_tags
示例#11
0
def test_property_metadata(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_metadata/test_property_metadata'
    ivA = IsacValue(nA, uri, survey_last_value=False, survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.metadata is None
    assert ivB.metadata is None

    metadata = {'this': 'is', 'meta': 'data'}
    ivA.metadata = metadata
    assert ivA.metadata == metadata
    assert ivB.metadata is None

    ivB.survey_metadata()
    assert ivB.metadata == metadata
示例#12
0
def test_creation_double():
    nA = IsacNode('A')
    nB = IsacNode('B')

    uri = 'test://test_isac_value/test_creation_double/my_value'
    try:
        ivA = IsacValue(nA,
                        uri,
                        survey_last_value=False,
                        survey_static_tags=False)
        ivB = IsacValue(nB,
                        uri,
                        survey_last_value=False,
                        survey_static_tags=False)
    finally:
        nA.shutdown()
        nB.shutdown()
示例#13
0
def test_creation_static_tags(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_creation_static_tags/test_static_tags'
    static_tags = {'this': 'is', 'static': 'tags'}
    ivA = IsacValue(nA,
                    uri,
                    static_tags=static_tags,
                    survey_last_value=False,
                    survey_static_tags=False)
    assert ivA.static_tags == static_tags

    ivB = IsacValue(nB, uri, survey_last_value=False)
    assert ivB.static_tags == static_tags

    iv2A = IsacValue(nA, uri + '_dont_exists', survey_last_value=False)
    assert iv2A.static_tags == {}
示例#14
0
def test_property_timestamp(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_timestamp/test_property_timestamp'
    ivA = IsacValue(nA, uri, survey_last_value=False, survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.timestamp == datetime(1970, 1, 1, 0, 0)
    assert ivA.timestamp_float == 0
    assert ivB.timestamp == datetime(1970, 1, 1, 0, 0)
    assert ivB.timestamp_float == 0

    v1 = randint(0, 100)
    ivA.value = v1
    ts1 = ivA.timestamp
    assert datetime.fromtimestamp(ivA.timestamp_float) == ts1
    assert ivB.value == v1
    assert ivB.timestamp == ts1
    assert datetime.fromtimestamp(ivB.timestamp_float) == ts1
示例#15
0
def test_property_ts_tags(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_ts_tags/test_property_ts_tags'

    dynamic_tags = {'this': 'is', 'dynamic': 'tags'}
    dynamic_tags_full = dynamic_tags
    dynamic_tags_full.update(nA.name_uuid())

    ivA = IsacValue(nA,
                    uri,
                    randint(0, 100),
                    dynamic_tags=dynamic_tags,
                    survey_last_value=False,
                    survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.ts_tags == (ivA.timestamp, dynamic_tags_full)
    assert ivB.ts_tags == (ivA.timestamp, dynamic_tags_full)
示例#16
0
def test_creation_with_full_init(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_creation_with_full_init/test_with_full_init'
    v1 = randint(0, 100)
    ts1 = datetime.now() - timedelta(hours=1)
    ivA = IsacValue(nA,
                    uri, (v1, ts1),
                    survey_last_value=False,
                    survey_static_tags=False)
    assert ivA.value == v1
    assert ivA.timestamp == ts1
    assert ivA.static_tags == {}
    assert ivA.tags == nA.name_uuid()
    assert ivA.metadata is None

    v2 = v1 + 10
    ts2 = datetime.now() - timedelta(hours=2)
    ivB = IsacValue(nB, uri, (v2, ts2), survey_static_tags=False)
    assert ivB.value == v1
    assert ivB.timestamp == ts1
    assert ivB.static_tags == {}
    assert ivB.tags == nA.name_uuid()
    assert ivB.metadata is None
    assert ivA.value == v1
    assert ivA.timestamp == ts1
    assert ivA.static_tags == {}
    assert ivA.tags == nA.name_uuid()
    assert ivA.metadata is None

    ivB = None
    v3 = v2 + 10
    ts3 = datetime.now()
    ivB = IsacValue(nB, uri, (v3, ts3), survey_static_tags=False)
    assert ivB.value == v3
    assert ivB.timestamp == ts3
    assert ivB.static_tags == {}
    assert ivB.tags == nB.name_uuid()
    assert ivB.metadata is None
    assert ivA.value == v3
    assert ivA.timestamp == ts3
    assert ivA.static_tags == {}
    assert ivA.tags == nB.name_uuid()
    assert ivA.metadata is None
示例#17
0
def test_property_value_ts(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_property_value_ts/test_property_value_ts'
    ivA = IsacValue(nA, uri, survey_last_value=False, survey_static_tags=False)
    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivA.value_ts == (None, datetime(1970, 1, 1, 0, 0))
    assert ivB.value_ts == (None, datetime(1970, 1, 1, 0, 0))

    v1 = randint(0, 100)
    ts1 = datetime.now() + timedelta(hours=1)
    ivA.value_ts = v1, ts1
    assert ivA.value_ts == (v1, ts1)
    assert ivA.value == v1
    assert datetime.fromtimestamp(ivA.timestamp_float) == ts1
    assert ivB.value_ts == (v1, ts1)
    assert ivB.value == v1
    assert ivB.timestamp == ts1
    assert datetime.fromtimestamp(ivB.timestamp_float) == ts1
示例#18
0
def test_survey_value_uri(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    iv1 = IsacValue(nA, 'iv1', survey_last_value=False, survey_static_tags=False)
    iv2 = IsacValue(nA, 'iv2', survey_last_value=False, survey_static_tags=False)

    assert nB.survey_value_uri('', limit_peers=1) >= set(['iv1', 'iv2'])
    assert nB.survey_value_uri('i', limit_peers=1) >= set(['iv1', 'iv2'])
    assert nB.survey_value_uri('v', limit_peers=1) >= set(['iv1', 'iv2'])
    assert nB.survey_value_uri('1', limit_peers=1) >= set(['iv1'])
    assert nB.survey_value_uri('2', limit_peers=1) >= set(['iv2'])
    assert nB.survey_value_uri('^i', limit_peers=1) >= set(['iv1', 'iv2'])
    assert nB.survey_value_uri('[1|2]$', limit_peers=1) >= set(['iv1', 'iv2'])
    assert nB.survey_value_uri('^.*1', limit_peers=1) >= set(['iv1'])
    assert nB.survey_value_uri('^v', limit_peers=1, timeout=0.1) == set([])
    assert nB.survey_value_uri('nothing', limit_peers=1, timeout=0.1) == set([])

    # Wrong RE should return an empty set AND not cause remote nodes to crash
    assert nB.survey_value_uri('*', limit_peers=1, timeout=0.1) == set([])
    assert nB.survey_value_uri('', limit_peers=1) >= set(['iv1', 'iv2']), 'Remote node crashed'
示例#19
0
def test_creation_with_init(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_creation_with_init/test_with_init'
    v = randint(0, 100)
    ivA = IsacValue(nA,
                    uri,
                    v,
                    survey_last_value=False,
                    survey_static_tags=False)
    assert ivA.value == v
    assert ivA.static_tags == {}
    assert ivA.tags == nA.name_uuid()
    assert ivA.metadata is None
    t = ivA.timestamp

    ivB = IsacValue(nB, uri, survey_static_tags=False)
    assert ivB.value == v
    assert ivB.timestamp == t
    assert ivB.static_tags == {}
    assert ivB.tags == nA.name_uuid()
    assert ivB.metadata is None
示例#20
0
def test_observer_at_creation(two_nodes):  # noqa: F811
    nA, nB = two_nodes
    obs = Observer()

    uri = 'test://test_isac_value/test_observer_at_creation/test_observer'
    ivA = IsacValue(nA,
                    uri,
                    randint(0, 100),
                    static_tags={
                        'this': 'is',
                        'static': 'tags'
                    },
                    survey_last_value=False,
                    survey_static_tags=False)
    ivB = IsacValue(nB, uri, observers=Observable([obs.observer]))
    green.sleep(0.5)
    assert obs.args, 'Callback not received'
    iv_recv, value, ts, tags = obs.args
    assert iv_recv == ivB
    assert value == ivA.value
    assert ts == ivA.timestamp
    assert tags == ivA.tags
    assert obs.static_tags == ivA.static_tags
示例#21
0
def test_survey_value_history(two_nodes):  # noqa: F811
    nA, nB = two_nodes
    time_period = (time.time()-86400, time.time())

    uri_arch = 'test://test_survey_value/test_survey_value_history/archived_iv'
    archived_iv = ArchivedValue(nA, uri_arch, survey_last_value=False, survey_static_tags=False)
    uri_simple = 'test://test_survey_value/test_survey_value_history/simple_iv'
    simple_iv = IsacValue(nA, uri_simple, survey_last_value=False, survey_static_tags=False)

    assert nB.survey_value_history(uri_simple, (0, 1000), timeout=0.1) is None
    assert nB.survey_value_history(uri_arch, (0, 1000)) == b'testA'
    assert nB.survey_value_history(
        'test://test_survey_value/test_survey_value_history/unknown',
        (0, 1000), timeout=0.1
    ) is None
示例#22
0
def test_history(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_isac_value/test_history/test_history'
    ivA = IsacValue(nA, uri, survey_last_value=False, survey_static_tags=False)
    ivB = FakeArchivedValue(nB, uri, survey_static_tags=False)
    time_period = (0, 20)
    data = ivA.get_history(time_period)
    data_fixture_converted = [(point[0], datetime.fromtimestamp(point[1]),
                               point[2]) for point in ivB._test_data]
    assert ivB._test_time_period, 'History callback not called'
    assert ivB._test_time_period == list(time_period)
    assert data == data_fixture_converted

    with pytest.raises(NoPeerWithHistoryException):
        ivB.get_history(time_period)
示例#23
0
def test_survey_last_value(two_nodes):  # noqa: F811
    nA, nB = two_nodes

    uri = 'test://test_survey_value/test_survey_last_value/my_value'
    iv = IsacValue(nA, uri, survey_last_value=False, survey_static_tags=False)

    # Uninitialised/new value have a None value at time 0
    assert nB.survey_last_value(uri, limit_peers=1) == (None, 0, {})

    iv.value = randint(0, 100)
    assert nB.survey_last_value(
        uri, limit_peers=1) == (iv.value, iv.timestamp_float, nA.name_uuid())

    # Inexistent value are not an error, they simply return None at time 0
    # (That is actually what give the default state of an uninitialised/new value behind the scene)
    assert nB.survey_last_value(
        'test://test_survey_value/test_survey_last_value/inexistent',
        limit_peers=1
    ) == (None, 0, {})