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
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
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()
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
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)
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'
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
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())
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() == []
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
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
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()
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 == {}
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
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)
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
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
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'
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
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
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
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)
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, {})