[tracker/wip/carlosg/graphs: 7/12] trackertestutils: Make await_update handle for InformationElement rewrites



commit 1dab90fe4d242b7361fdbe23465b11b1f484ede8
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Apr 23 12:30:39 2020 +0200

    trackertestutils: Make await_update handle for InformationElement rewrites
    
    With DataObject and InformationElement being split, a file update may result
    in the InformationElement being torn out and completely recreated. Add code
    to handle this situation to await_update.

 utils/trackertestutils/helpers.py | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)
---
diff --git a/utils/trackertestutils/helpers.py b/utils/trackertestutils/helpers.py
index 737a089fa..256ec1144 100644
--- a/utils/trackertestutils/helpers.py
+++ b/utils/trackertestutils/helpers.py
@@ -216,21 +216,34 @@ class await_update():
         if not cursor.next():
             raise AwaitException("Expected data is not present in the store.")
 
+        self.stored_as = cursor.get_string(0)[0]
+
+        query_on_create = 'SELECT nie:isStoredAs(tracker:uri(%s)) { }'
         query_after = ' '.join([
             'SELECT ?urn tracker:id(?urn) '
             ' WHERE { '
             '   ?urn a rdfs:Resource ; ',
             self.after_predicates,
-            '   . FILTER (tracker:id(?urn) = %s) '
+            '   . FILTER (tracker:id(?urn) = %s) ',
             '}'
-        ]) % self.resource_id
+        ])
 
         def match_cb(notifier, service, graph, events):
             for event in events:
-                if event.get_event_type() == Tracker.NotifierEventType.UPDATE and event.get_id() == 
self.resource_id:
-                    log.debug("Processing %s event for id %s", event.get_event_type(), event.get_id())
-                    log.debug("Running %s", query_after)
-                    cursor = self.conn.query(query_after)
+                log.debug("Processing %s event for id %s", event.get_event_type(), event.get_id())
+                if event.get_event_type() == Tracker.NotifierEventType.DELETE and event.get_id() == 
self.resource_id:
+                    self.resource_deleted = True
+                elif event.get_event_type() in [Tracker.NotifierEventType.CREATE,
+                                                Tracker.NotifierEventType.UPDATE]:
+                    if event.get_event_type() == Tracker.NotifierEventType.CREATE:
+                        if not self.resource_deleted:
+                            raise AwaitException("Received insert with no prior delete")
+                        cursor = self.conn.query(query_on_create % event.get_id())
+                        if cursor.next() and cursor.get_string(0)[0] == self.stored_as:
+                            self.resource_id = event.get_id()
+
+                    log.debug("Running %s", query_after % event.get_id())
+                    cursor = self.conn.query(query_after % event.get_id())
 
                     if cursor.next():
                         log.debug("Query matched!")


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]