Example #1
0
 def testReducesList(self):
     """Hose.reduceWork removes children elements from list."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     h = Hose()
     self.assertEquals(h.reduceWork(["http://localhost/",
                                     "http://localhost/foo/bar/",
                                     "http://localhost/wibble/",
                                     "file:///usr/"]),
                       ["http://localhost/", "file:///usr/"])
Example #2
0
 def testCreatesFilterObject(self):
     """Hose creates a Filter object."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     from lp.registry.scripts.productreleasefinder.filter import (
         Filter)
     h = Hose()
     self.failUnless(isinstance(h.filter, Filter))
Example #3
0
 def testCreatesChildLogger(self):
     """Hose creates a child logger if given a parent."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     from logging import getLogger
     parent = getLogger("foo")
     h = Hose(log_parent=parent)
     self.assertEquals(h.log.parent, parent)
Example #4
0
 def testCreatesFiltersWithGiven(self):
     """Hose creates Filter object with dictionary given."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     from lp.registry.scripts.productreleasefinder.filter import (
         FilterPattern)
     pattern = FilterPattern("foo", "http:e*")
     h = Hose([pattern])
     self.assertEquals(len(h.filter.filters), 1)
     self.assertEquals(h.filter.filters[0], pattern)
Example #5
0
    def testHoseLimitsWalk(self):
        # Test that the hose limits the directory walk to places that
        # could contain a match.

        # Set up the releases tree:
        for directory in ['bar',
                          'foo',
                          'foo/1.0',
                          'foo/1.0/source',
                          'foo/1.0/x64',
                          'foo/1.5',
                          'foo/1.5/source',
                          'foo/2.0',
                          'foo/2.0/source']:
            os.mkdir(os.path.join(self.release_root, directory))
        for releasefile in ['foo/1.0/foo-1.0.tar.gz',
                            'foo/1.0/source/foo-1.0.tar.gz',
                            'foo/1.0/source/foo-2.0.tar.gz',
                            'foo/1.0/x64/foo-1.0.tar.gz',
                            'foo/1.5/source/foo-1.5.tar.gz',
                            'foo/2.0/source/foo-2.0.tar.gz']:
            fp = open(os.path.join(self.release_root, releasefile), 'wb')
            fp.write('data')
            fp.close()

        # Run the hose over the test data
        from lp.registry.scripts.productreleasefinder.hose import Hose
        from lp.registry.scripts.productreleasefinder.filter import (
            FilterPattern)
        pattern = FilterPattern("key", self.release_url +
                                "/foo/1.*/source/foo-1.*.tar.gz")
        hose = Hose([pattern])

        prefix_len = len(self.release_url)
        matched = []
        unmatched = []
        for key, url in hose:
            if key is None:
                unmatched.append(url[prefix_len:])
            else:
                matched.append(url[prefix_len:])

        # Make sure that the correct releases got found.
        self.assertEqual(sorted(matched),
                         ['/foo/1.0/source/foo-1.0.tar.gz',
                          '/foo/1.5/source/foo-1.5.tar.gz'])

        # The only unmatched files that get checked exist in
        # directories that are parents of potential matches.
        self.assertEqual(sorted(unmatched),
                         ['/foo/1.0/foo-1.0.tar.gz',
                          '/foo/1.0/source/foo-2.0.tar.gz'])
Example #6
0
 def testCallsReduceWork(self):
     """Hose constructor calls reduceWork function."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     h = Hose.__new__(Hose)
     class Observer(InstrumentedMethodObserver):
         def __init__(self):
             self.called_it = False
         def called(self, name, args, kw):
             self.called_it = True
     obs = Observer()
     instrument_method(obs, h, "reduceWork")
     h.__init__()
     self.assert_(obs.called_it)
Example #7
0
 def testPassesUrlList(self):
     """Hose constructor passes url list to reduceWork."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     from lp.registry.scripts.productreleasefinder.filter import (
         FilterPattern)
     pattern = FilterPattern("foo", "http://archive.ubuntu.com/e*")
     h = Hose.__new__(Hose)
     class Observer(InstrumentedMethodObserver):
         def __init__(self):
             self.args = []
         def called(self, name, args, kw):
             self.args.append(args)
     obs = Observer()
     instrument_method(obs, h, "reduceWork")
     h.__init__([pattern])
     self.assertEquals(obs.args[0][0],
                       ["http://archive.ubuntu.com/"])
Example #8
0
 def handleProduct(self, product_name, filters):
     """Scan for tarballs and create ProductReleases for the given product.
     """
     file_names = self.getReleaseFileNames(product_name)
     hose = Hose(filters, log_parent=self.log)
     for series_name, url in hose:
         if series_name is not None:
             try:
                 self.handleRelease(
                     product_name, series_name, url, file_names)
             except (KeyboardInterrupt, SystemExit):
                 raise
             except:
                 self.log.exception("Could not successfully process "
                                    "URL %s for %s/%s",
                                    url, product_name, series_name)
         else:
             self.log.debug("File in %s found that matched no glob: %s",
                            product_name, url)
Example #9
0
 def testDefaultsFiltersToEmptyDict(self):
     """Hose creates Filter object with empty dictionary."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     h = Hose()
     self.assertEquals(h.filter.filters, [])
Example #10
0
 def testCreatesDefaultLogger(self):
     """Hose creates a default logger."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     from logging import Logger
     h = Hose()
     self.failUnless(isinstance(h.log, Logger))
Example #11
0
 def testReducedList(self):
     """Hose.reduceWork returns same list when nothing to do."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     h = Hose()
     self.assertEquals(h.reduceWork(["http://localhost/", "file:///usr/"]),
                       ["http://localhost/", "file:///usr/"])
Example #12
0
 def testEmptyList(self):
     """Hose.reduceWork returns empty list when given one."""
     from lp.registry.scripts.productreleasefinder.hose import Hose
     h = Hose()
     self.assertEquals(h.reduceWork([]), [])