Tell the user when a background update completes, not when it starts
[zeroinstall/solver.git] / tests / testwriter.py
blob095b367ae79299f3b9f7f385fc77d989f4fe97c1
1 #!/usr/bin/env python
2 from basetest import BaseTest
3 import sys, io, os, shutil
4 import unittest
6 sys.path.insert(0, '..')
7 from zeroinstall.injector import writer, model, reader, qdom
8 from zeroinstall.support import basedir
10 test_feed = qdom.parse(io.BytesIO(b"""<interface xmlns='http://zero-install.sourceforge.net/2004/injector/interface'>
11 <name>Test</name>
12 <summary>for testing</summary>
13 <implementation id='sha1=3ce644dc725f1d21cfcf02562c76f375944b266a' version='1'/>
14 </interface>
15 """))
17 mydir = os.path.dirname(__file__)
19 class TestWriter(BaseTest):
20 def testFeeds(self):
21 iface = model.Interface('http://test/test')
22 main_feed = model.ZeroInstallFeed(test_feed, local_path = '/Hello')
23 self.config.iface_cache._feeds[iface.uri] = main_feed
24 iface.stability_policy = model.developer
25 main_feed.last_checked = 100
26 iface.extra_feeds.append(model.Feed('http://sys-feed', None, False))
27 iface.extra_feeds.append(model.Feed('http://user-feed', 'Linux-*', True))
28 writer.save_interface(iface)
29 writer.save_feed(main_feed)
31 iface = model.Interface('http://test/test')
32 self.assertEqual(None, iface.stability_policy)
33 main_feed = model.ZeroInstallFeed(test_feed, local_path = '/Hello')
34 self.config.iface_cache._feeds[iface.uri] = main_feed
35 reader.update_user_overrides(iface)
36 reader.update_user_feed_overrides(main_feed)
37 self.assertEqual(model.developer, iface.stability_policy)
38 self.assertEqual(100, main_feed.last_checked)
39 self.assertEqual("[<Feed from http://user-feed>]", str(iface.extra_feeds))
41 feed = iface.extra_feeds[0]
42 self.assertEqual('http://user-feed', feed.uri)
43 self.assertEqual('Linux', feed.os)
44 self.assertEqual(None, feed.machine)
46 def testStoreNothing(self):
47 iface = model.Interface('http://test/test')
48 writer.save_interface(iface)
50 iface = model.Interface('http://test/test')
51 self.assertEqual(None, iface.stability_policy)
52 reader.update_user_overrides(iface)
54 feed = self.config.iface_cache.get_feed(iface.uri)
55 self.assertEqual(None, feed)
57 def testStoreStability(self):
58 main_feed = reader.load_feed('Hello.xml', local = True)
59 impl = main_feed.implementations['sha1=3ce644dc725f1d21cfcf02562c76f375944b266a']
60 impl.user_stability = model.developer
61 writer.save_feed(main_feed)
63 # Rating now visible
64 main_feed = reader.load_feed('Hello.xml', local = True)
65 reader.update_user_feed_overrides(main_feed)
66 self.assertEqual(1, len(main_feed.implementations))
68 impl = main_feed.implementations['sha1=3ce644dc725f1d21cfcf02562c76f375944b266a']
69 self.assertEqual(model.developer, impl.user_stability)
71 def testSitePackages(self):
72 # The old system (0install < 1.9):
73 # - 0compile stores implementations to ~/.cache, and
74 # - adds to extra_feeds
75 # The new system (0install >= 1.9):
76 # - 0compile stores implementations to ~/.local/0install.net/site-packages, and
77 # - 0install finds them automatically
79 # For backwards compatibility, 0install >= 1.9:
80 # - writes discovered feeds to extra_feeds
81 # - skips such entries in extra_feeds when loading
83 meta_dir = basedir.save_data_path('0install.net', 'site-packages',
84 'http:##example.com#prog.xml', '1.0', '0install')
85 feed = os.path.join(meta_dir, 'feed.xml')
86 shutil.copyfile(os.path.join(mydir, 'Local.xml'), feed)
88 # Check that we find the feed without us having to register it
89 iface = self.config.iface_cache.get_interface('http://example.com/prog.xml')
90 self.assertEqual(1, len(iface.extra_feeds))
91 site_feed, = iface.extra_feeds
92 self.assertEqual(True, site_feed.site_package)
94 # Check that we write it out, so that older 0installs can find it
95 writer.save_interface(iface)
97 config_file = basedir.load_first_config('0install.net', 'injector',
98 'interfaces', 'http:##example.com#prog.xml')
99 with open(config_file, 'rb') as s:
100 doc = qdom.parse(s)
102 feed_node = None
103 for item in doc.childNodes:
104 if item.name == 'feed':
105 feed_node = item
106 self.assertEqual('True', feed_node.getAttribute('site-package'))
108 # Check we ignore this element
109 iface.reset()
110 self.assertEqual([], iface.extra_feeds)
111 reader.update_user_overrides(iface)
112 self.assertEqual([], iface.extra_feeds)
114 # Check feeds are automatically removed again
115 reader.update_from_cache(iface)
116 self.assertEqual(1, len(iface.extra_feeds))
117 shutil.rmtree(basedir.load_first_data('0install.net', 'site-packages',
118 'http:##example.com#prog.xml'))
120 reader.update_from_cache(iface)
121 self.assertEqual(0, len(iface.extra_feeds))
123 if __name__ == '__main__':
124 unittest.main()