------------------------------------------------------------
revno: 342
committer: Stefano Candori <stefano.cand...@gmail.com>
branch nick: zeitgeist
timestamp: Wed 2011-12-07 13:17:29 +0100
message:
  [Histogram extension] Fix timezone's hell.
  
  This commit fixes the timezone problem in the histogram extension and adds
  the test for checking this.
added:
  test/dbus/histogram-test.py
modified:
  extensions/histogram.vala
  test/dbus/Makefile.am


--
lp:zeitgeist
https://code.launchpad.net/~zeitgeist/zeitgeist/bluebird

Your team Zeitgeist Framework Team is subscribed to branch lp:zeitgeist.
To unsubscribe from this branch go to 
https://code.launchpad.net/~zeitgeist/zeitgeist/bluebird/+edit-subscription
=== modified file 'extensions/histogram.vala'
--- extensions/histogram.vala	2011-09-25 15:58:52 +0000
+++ extensions/histogram.vala	2011-12-07 12:17:29 +0000
@@ -1,6 +1,7 @@
 /* histogram.vala
  *
  * Copyright © 2011 Michal Hruby <michal....@gmail.com>
+ * Copyright © 2011 Stefano Candori <stefano.cand...@gmail.com>
  *
  * Based upon a Python implementation (2010-2011) by:
  *  Siegfried-Angel Gevatter Pujals <siegfr...@gevatter.com>
@@ -73,8 +74,8 @@
             var builder = new VariantBuilder (new VariantType ("a(xu)"));
 
             string sql = """
-                SELECT strftime('%s', datetime(timestamp/1000, 'unixepoch'),
-                'start of day') AS daystamp,
+                SELECT strftime('%s', datetime(timestamp/1000, 'unixepoch',
+                'localtime'), 'start of day') AS daystamp,
                 COUNT(*)
                 FROM event
                 GROUP BY daystamp

=== modified file 'test/dbus/Makefile.am'
--- test/dbus/Makefile.am	2011-10-29 14:09:14 +0000
+++ test/dbus/Makefile.am	2011-12-07 12:17:29 +0000
@@ -4,6 +4,7 @@
 	blacklist-test.py \
 	dsr-test.py \
 	engine-test.py \
+	histogram-test.py \
 	monitor-test.py \
 	remote-test.py \
 	testutils.py \

=== added file 'test/dbus/histogram-test.py'
--- test/dbus/histogram-test.py	1970-01-01 00:00:00 +0000
+++ test/dbus/histogram-test.py	2011-12-07 12:17:29 +0000
@@ -0,0 +1,106 @@
+#! /usr/bin/python
+# -.- coding: utf-8 -.-
+
+# histogram-test.py
+#
+# Copyright © 2011 Stefano Candori <stefano.cand...@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation, either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Update python path to use local zeitgeist module
+
+import sys
+import os
+import time
+import datetime
+import calendar
+import unittest
+import gobject
+
+sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
+from zeitgeist.client import ZeitgeistDBusInterface
+from zeitgeist.datamodel import *
+from testutils import RemoteTestCase, import_events
+
+#
+# EXPLANATION OF THE TEST:
+# The test checks if the histogram extension works well despite the 
+# ***timezone's hell***.
+# For example the extension, for an user in the GMT+2 timezone, should count 
+# an event inserted on the 2011/12/24 at 1:30 AM as belonging to the day 24.
+# The problem is that in the engine the events are inserted as UTC-relative:
+# for the example our event is inserted for the day 2011/12/23 at 23:30 UTC.
+# The Histogram extension must revert this when collecting data, and this test 
+# check this.
+#
+# ******************************************************************************
+#
+# In the test we create an event in the "borderline" time for the timezone and 
+# then we insert it in the engine as UCT-relative. After, we retrieve the data
+# from the extension and finally we check that the event belong to the right day
+#
+
+class HistogramTest(RemoteTestCase):
+
+	def __init__(self, methodName):
+		super(HistogramTest, self).__init__(methodName)
+		self.histogram = None
+
+	def setUp(self):
+		# lazy import to get a chance to use the private bus
+		import dbus
+		
+		# We set up the connection lazily in order to wait for the
+		# engine to come up
+		super(HistogramTest, self).setUp()
+		obj = dbus.SessionBus().get_object("org.gnome.zeitgeist.Engine",
+			"/org/gnome/zeitgeist/journal/activity")
+		self.histogram = dbus.Interface(obj, "org.gnome.zeitgeist.Histogram")
+		
+	def _createEventOne(self):
+		ev = Event.new_for_values(interpretation=Interpretation.ACCESS_EVENT,
+			subject_uri="file://sisisisisisi")
+		ev.manifestation = Manifestation.USER_ACTIVITY
+		
+		if time.timezone < 0 :
+			start_hour = 24 + int(time.timezone / 3600)
+		else:
+			start_hour =  int(time.timezone / 3600) - 1
+			
+		td = datetime.datetime.today()
+		event_date = datetime.datetime(td.year, td.month, td.day, start_hour, 30)
+		timestamp = calendar.timegm(event_date.timetuple())
+		
+		ev.timestamp = timestamp * 1000
+		
+		return ev, timestamp
+		
+	def testGetHistogramData(self):
+		ev, ev_timestamp = self._createEventOne();
+		
+		inserted_ids = self.insertEventsAndWait([ev])
+		self.assertEquals(1, len(inserted_ids))
+		
+		h_data = self.histogram.GetHistogramData()
+		self.assertEquals(1, len(h_data))
+		
+		h_day_timestamp = h_data[0][0]
+		
+		#Check if the inserted event belong to the right day!
+		day_ev = datetime.date.fromtimestamp(ev_timestamp)
+		start_day = datetime.date.fromtimestamp(h_day_timestamp)
+		self.assertEquals(day_ev.day , start_day.day)
+
+if __name__ == "__main__":
+	unittest.main()

_______________________________________________
Mailing list: https://launchpad.net/~zeitgeist
Post to     : zeitgeist@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zeitgeist
More help   : https://help.launchpad.net/ListHelp

Reply via email to