예제 #1
0
 def testGetPatchStatusWithUnknownPatches(self):
     """
     L{getPatchStatus} returns information about patch versions that exist
     in the database, but not in the code base.
     """
     schema = createSchema(self.patchPackage)
     patchDatabase(self.store, schema)
     self.store.execute('INSERT INTO patch (version) VALUES (1)')
     status = getPatchStatus(self.store, schema)
     self.assertEqual([], status.unappliedPatches)
     self.assertEqual([1], status.unknownPatches)
예제 #2
0
 def testGetPatchStatus(self):
     """
     L{getPatchStatus} returns a L{PatchStatus} with information about
     outstanding and unknown patches.  If the database is up-to-date and no
     unknown patches have been applied to it, both of these values are
     empty C{list}s.
     """
     schema = createSchema(self.patchPackage)
     patchDatabase(self.store, schema)
     status = getPatchStatus(self.store, schema)
     self.assertEqual([], status.unappliedPatches)
     self.assertEqual([], status.unknownPatches)
예제 #3
0
 def testGetPatchStatusWithUnappliedPatches(self):
     """
     L{getPatchStatus} returns information about patch versions that need
     to be applied to a database to make it up-to-date with the code base.
     """
     schema = createSchema(self.patchPackage)
     patchDatabase(self.store, schema)
     self.packageBuilder.createModule('patch_1', dedent("""\
         def apply(store):
             store.execute('INSERT INTO person (name) VALUES (\\'Bob\\')')
         """))
     status = getPatchStatus(self.store, schema)
     self.assertEqual([1], status.unappliedPatches)
     self.assertEqual([], status.unknownPatches)
예제 #4
0
 def run(self, database_uri):
     setConfig(setupConfig(None))
     setupLogging(self.outf)
     store = setupStore(database_uri, 'main')
     schema = main.createSchema()
     status = getPatchStatus(store, schema)
     if status.unappliedPatches:
         patches = ', '.join('patch_%d' % version
                             for version in status.unappliedPatches)
         logging.info('Unapplied patches: %s' % patches)
         sys.exit(1)
     if status.unknownPatches:
         patches = ', '.join('patch_%d' % version
                             for version in status.unknownPatches)
         logging.info('Unknown patches: %s' % patches)
         sys.exit(2)
     if not status.unappliedPatches and not status.unknownPatches:
         logging.info('Database is up-to-date.')
         sys.exit(0)
예제 #5
0
 def run(self, database_uri):
     setConfig(setupConfig(None))
     setupLogging(self.outf)
     store = setupStore(database_uri, 'main')
     schema = main.createSchema()
     status = getPatchStatus(store, schema)
     if status.unknownPatches:
         unknownPatches = ', '.join(
             'patch_%d' % version for version in status.unknownPatches)
         logging.critical('Database has unknown patches: %s',
                          unknownPatches)
         return 1
     if status.unappliedPatches:
         unappliedPatches = ', '.join(
             'patch_%d' % version for version in status.unappliedPatches)
         logging.info('Applying patches: %s', unappliedPatches)
         patchDatabase(store, schema)
     else:
         logging.info('Database is up-to-date.')
예제 #6
0
 def run(self, database_uri):
     setConfig(setupConfig(None))
     setupLogging(self.outf)
     store = setupStore(database_uri, 'main')
     schema = main.createSchema()
     status = getPatchStatus(store, schema)
     if status.unappliedPatches:
         patches = ', '.join('patch_%d' % version
                             for version in status.unappliedPatches)
         logging.info('Unapplied patches: %s' % patches)
         sys.exit(1)
     if status.unknownPatches:
         patches = ', '.join('patch_%d' % version
                             for version in status.unknownPatches)
         logging.info('Unknown patches: %s' % patches)
         sys.exit(2)
     if not status.unappliedPatches and not status.unknownPatches:
         logging.info('Database is up-to-date.')
         sys.exit(0)
예제 #7
0
 def run(self, database_uri):
     setConfig(setupConfig(None))
     setupLogging(self.outf)
     store = setupStore(database_uri, 'main')
     schema = main.createSchema()
     status = getPatchStatus(store, schema)
     if status.unknownPatches:
         unknownPatches = ', '.join('patch_%d' % version
                                    for version in status.unknownPatches)
         logging.critical('Database has unknown patches: %s',
                          unknownPatches)
         return 1
     if status.unappliedPatches:
         unappliedPatches = ', '.join(
             'patch_%d' % version for version in status.unappliedPatches)
         logging.info('Applying patches: %s', unappliedPatches)
         patchDatabase(store, schema)
     else:
         logging.info('Database is up-to-date.')
예제 #8
0
def verifyStore():
    """Ensure that the patch level in the database matches the application.

    @raise RuntimeError: Raised if there are unknown or unapplied patches.
    """
    from fluiddb.schema.main import createSchema
    from fluiddb.scripts.schema import getPatchStatus

    schema = createSchema()
    zstorm = getUtility(IZStorm)
    store = zstorm.get('main')
    try:
        status = getPatchStatus(store, schema)
        if status.unappliedPatches:
            patches = ', '.join('patch_%d' % version
                                for version in status.unappliedPatches)
            raise RuntimeError('Database has unapplied patches: %s' % patches)
        if status.unknownPatches:
            patches = ', '.join('patch_%d' % version
                                for version in status.unknownPatches)
            raise RuntimeError('Database has unknown patches: %s' % patches)
    finally:
        zstorm.remove(store)
        store.close()