annotate src/test/test_core_xmpp.py @ 853:c2f6ada7858f

core (sqlite): automatic database update: - new Updater class check database consistency (by calculating a hash on the .schema), and updates base if necessary - database now has a version (1 for current, 0 will be for 0.3's database), for each change this version will be increased - creation statements and update statements are in the form of dict of dict with tuples. There is a help text at the top of the module to explain how it works - if we are on a development version, the updater try to update the database automaticaly (without deleting table or columns). The Updater.generateUpdateData method can be used to ease the creation of update data (i.e. the dictionary at the top, see the one for the key 1 for an example). - if there is an inconsistency, an exception is raised, and a message indicate the SQL statements that should fix the situation. - well... this is rather complicated, a KISS method would maybe have been better. The future will say if we need to simplify it :-/ - new DatabaseError exception
author Goffi <goffi@goffi.org>
date Sun, 23 Feb 2014 23:30:32 +0100
parents 1fe00f0c9a91
children e1842ebcb2f3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
335
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/python
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
Goffi <goffi@goffi.org>
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
4 # SAT: a jabber client
811
1fe00f0c9a91 dates update
Goffi <goffi@goffi.org>
parents: 792
diff changeset
5 # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
7 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
10 # (at your option) any later version.
335
Goffi <goffi@goffi.org>
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
12 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
15 # GNU Affero General Public License for more details.
335
Goffi <goffi@goffi.org>
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 591
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
335
Goffi <goffi@goffi.org>
parents:
diff changeset
19
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from sat.test import helpers
780
9810f22ba733 test: store the constants in constants.py + better PEP8 compliance
souliane <souliane@mailoo.org>
parents: 649
diff changeset
21 from constants import Const
335
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from twisted.trial import unittest
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from sat.core.sat_main import SAT
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from sat.core import xmpp
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from twisted.internet import defer
Goffi <goffi@goffi.org>
parents:
diff changeset
26 from twisted.words.protocols.jabber.jid import JID
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from wokkel.generic import parseXml
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from wokkel.xmppim import RosterItem
Goffi <goffi@goffi.org>
parents:
diff changeset
29
Goffi <goffi@goffi.org>
parents:
diff changeset
30
Goffi <goffi@goffi.org>
parents:
diff changeset
31 class SatXMPPClientTest(unittest.TestCase):
Goffi <goffi@goffi.org>
parents:
diff changeset
32
Goffi <goffi@goffi.org>
parents:
diff changeset
33 def setUp(self):
Goffi <goffi@goffi.org>
parents:
diff changeset
34 self.host = helpers.FakeSAT()
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
35 self.client = xmpp.SatXMPPClient(self.host, Const.PROFILE[0], JID("test@example.org"), "test")
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
36
335
Goffi <goffi@goffi.org>
parents:
diff changeset
37 def test_init(self):
Goffi <goffi@goffi.org>
parents:
diff changeset
38 """Check that init values are correctly initialised"""
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
39 self.assertEqual(self.client.profile, Const.PROFILE[0])
335
Goffi <goffi@goffi.org>
parents:
diff changeset
40 print self.client.host
Goffi <goffi@goffi.org>
parents:
diff changeset
41 self.assertEqual(self.client.host_app, self.host)
Goffi <goffi@goffi.org>
parents:
diff changeset
42 self.assertTrue(isinstance(self.client.client_initialized, defer.Deferred))
Goffi <goffi@goffi.org>
parents:
diff changeset
43
591
65821b3fa7ab Fix pep8 support in src/test.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
44
335
Goffi <goffi@goffi.org>
parents:
diff changeset
45 class SatMessageProtocolTest(unittest.TestCase):
Goffi <goffi@goffi.org>
parents:
diff changeset
46
Goffi <goffi@goffi.org>
parents:
diff changeset
47 def setUp(self):
Goffi <goffi@goffi.org>
parents:
diff changeset
48 self.host = helpers.FakeSAT()
Goffi <goffi@goffi.org>
parents:
diff changeset
49 self.message = xmpp.SatMessageProtocol(self.host)
649
e20c823f23e2 tests: helpers improvments:
Goffi <goffi@goffi.org>
parents: 648
diff changeset
50 self.message.parent = helpers.FakeClient(self.host)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
51
Goffi <goffi@goffi.org>
parents:
diff changeset
52 def test_onMessage(self):
Goffi <goffi@goffi.org>
parents:
diff changeset
53 xml = """
Goffi <goffi@goffi.org>
parents:
diff changeset
54 <message type="chat" from="sender@example.net/house" to="test@example.org/SàT" id="test_1">
Goffi <goffi@goffi.org>
parents:
diff changeset
55 <body>test</body>
Goffi <goffi@goffi.org>
parents:
diff changeset
56 </message>
Goffi <goffi@goffi.org>
parents:
diff changeset
57 """
Goffi <goffi@goffi.org>
parents:
diff changeset
58 stanza = parseXml(xml)
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
59 self.host.bridge.expectCall("newMessage", u"sender@example.net/house", u"test", u"chat", u"test@example.org/SàT", {}, profile=Const.PROFILE[0])
335
Goffi <goffi@goffi.org>
parents:
diff changeset
60 self.message.onMessage(stanza)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
61
591
65821b3fa7ab Fix pep8 support in src/test.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
62
335
Goffi <goffi@goffi.org>
parents:
diff changeset
63 class SatRosterProtocolTest(unittest.TestCase):
Goffi <goffi@goffi.org>
parents:
diff changeset
64
Goffi <goffi@goffi.org>
parents:
diff changeset
65 def setUp(self):
Goffi <goffi@goffi.org>
parents:
diff changeset
66 self.host = helpers.FakeSAT()
Goffi <goffi@goffi.org>
parents:
diff changeset
67 self.roster = xmpp.SatRosterProtocol(self.host)
649
e20c823f23e2 tests: helpers improvments:
Goffi <goffi@goffi.org>
parents: 648
diff changeset
68 self.roster.parent = helpers.FakeClient(self.host)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
69
Goffi <goffi@goffi.org>
parents:
diff changeset
70 def test_onRosterSet(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
71 roster_item = RosterItem(Const.JID[0])
335
Goffi <goffi@goffi.org>
parents:
diff changeset
72 roster_item.name = u"Test Man"
Goffi <goffi@goffi.org>
parents:
diff changeset
73 roster_item.subscriptionTo = True
Goffi <goffi@goffi.org>
parents:
diff changeset
74 roster_item.subscriptionFrom = True
Goffi <goffi@goffi.org>
parents:
diff changeset
75 roster_item.ask = False
Goffi <goffi@goffi.org>
parents:
diff changeset
76 roster_item.groups = set([u"Test Group 1", u"Test Group 2", u"Test Group 3"])
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
77 self.host.bridge.expectCall("newContact", Const.JID_STR[0], {'to': 'True', 'from': 'True', 'ask': 'False', 'name': u'Test Man'}, set([u"Test Group 1", u"Test Group 2", u"Test Group 3"]), Const.PROFILE[0])
335
Goffi <goffi@goffi.org>
parents:
diff changeset
78 self.roster.onRosterSet(roster_item)
Goffi <goffi@goffi.org>
parents:
diff changeset
79
591
65821b3fa7ab Fix pep8 support in src/test.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
80
335
Goffi <goffi@goffi.org>
parents:
diff changeset
81 class SatPresenceProtocolTest(unittest.TestCase):
Goffi <goffi@goffi.org>
parents:
diff changeset
82
Goffi <goffi@goffi.org>
parents:
diff changeset
83 def setUp(self):
Goffi <goffi@goffi.org>
parents:
diff changeset
84 self.host = helpers.FakeSAT()
Goffi <goffi@goffi.org>
parents:
diff changeset
85 self.presence = xmpp.SatPresenceProtocol(self.host)
649
e20c823f23e2 tests: helpers improvments:
Goffi <goffi@goffi.org>
parents: 648
diff changeset
86 self.presence.parent = helpers.FakeClient(self.host)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
87
Goffi <goffi@goffi.org>
parents:
diff changeset
88 def test_availableReceived(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
89 self.host.bridge.expectCall("presenceUpdate", Const.JID_STR[0], "xa", 15, {'default': "test status", 'fr': 'statut de test'}, Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
90 self.presence.availableReceived(Const.JID[0], 'xa', {None: "test status", 'fr': 'statut de test'}, 15)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
91
Goffi <goffi@goffi.org>
parents:
diff changeset
92 def test_availableReceived_empty_statuses(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
93 self.host.bridge.expectCall("presenceUpdate", Const.JID_STR[0], "xa", 15, {}, Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
94 self.presence.availableReceived(Const.JID[0], 'xa', None, 15)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
95
Goffi <goffi@goffi.org>
parents:
diff changeset
96 def test_unavailableReceived(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
97 self.host.bridge.expectCall("presenceUpdate", Const.JID_STR[0], "unavailable", 0, {}, Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
98 self.presence.unavailableReceived(Const.JID[0], None)
335
Goffi <goffi@goffi.org>
parents:
diff changeset
99
Goffi <goffi@goffi.org>
parents:
diff changeset
100 def test_subscribedReceived(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
101 self.host.bridge.expectCall("subscribe", "subscribed", Const.JID[0].userhost(), Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
102 self.presence.subscribedReceived(Const.JID[0])
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
103
335
Goffi <goffi@goffi.org>
parents:
diff changeset
104 def test_unsubscribedReceived(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
105 self.host.bridge.expectCall("subscribe", "unsubscribed", Const.JID[0].userhost(), Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
106 self.presence.unsubscribedReceived(Const.JID[0])
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
107
335
Goffi <goffi@goffi.org>
parents:
diff changeset
108 def test_subscribeReceived(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
109 self.host.bridge.expectCall("subscribe", "subscribe", Const.JID[0].userhost(), Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
110 self.presence.subscribeReceived(Const.JID[0])
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
111
335
Goffi <goffi@goffi.org>
parents:
diff changeset
112 def test_unsubscribeReceived(self):
792
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
113 self.host.bridge.expectCall("subscribe", "unsubscribe", Const.JID[0].userhost(), Const.PROFILE[0])
2136be5a44a8 test: define the constants JIDs and profiles as lists
souliane <souliane@mailoo.org>
parents: 780
diff changeset
114 self.presence.unsubscribeReceived(Const.JID[0])