1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#! /usr/bin/env python3
# -.- coding: utf-8 -.-
# histogram-test.py
#
# Copyright © 2011 Stefano Candori <stefano.candori@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
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, new_event
#
# 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 = new_event(
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.assertEqual(1, len(inserted_ids))
h_data = self.histogram.GetHistogramData()
self.assertEqual(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.assertEqual(day_ev.day , start_day.day)
if __name__ == "__main__":
unittest.main()
# vim:noexpandtab:ts=4:sw=4
|