def test_use_schema_stamp_out_of_date(self): """ If a schema stamp directory is set, then it's used to decide whether to upgrade the schema or not. In case the patch directory has changed a schema upgrade is run. """ self.resource.schema_stamp_dir = self.makeFile() self.resource.make([]) # Simulate a second test run that initializes the zstorm resource # from scratch, using the same schema stamp directory resource2 = ZStormResourceManager(self.databases) resource2.schema_stamp_dir = self.resource.schema_stamp_dir self.makeFile(path=os.path.join(self.patch_dir, "patch_2.py"), content="def apply(store): pass") class FakeStat(object): st_mtime = os.stat(self.patch_dir).st_mtime + 1 stat_mock = self.mocker.replace(os.stat) stat_mock(self.patch_dir) self.mocker.result(FakeStat()) self.mocker.replay() resource2.make([]) result = self.store.execute("SELECT version FROM patch") self.assertEqual([(1,), (2,)], sorted(result.get_all()))
def test_use_schema_stamp_out_of_date(self): """ If a schema stamp directory is set, then it's used to decide whether to upgrade the schema or not. In case the patch directory has changed a schema upgrade is run. """ self.resource.schema_stamp_dir = self.makeFile() self.resource.make([]) # Simulate a second test run that initializes the zstorm resource # from scratch, using the same schema stamp directory resource2 = ZStormResourceManager(self.databases) resource2.schema_stamp_dir = self.resource.schema_stamp_dir self.makeFile(path=os.path.join(self.patch_dir, "patch_2.py"), content="def apply(store): pass") class FakeStat(object): st_mtime = os.stat(self.patch_dir).st_mtime + 1 stat_mock = self.mocker.replace(os.stat) stat_mock(self.patch_dir) self.mocker.result(FakeStat()) self.mocker.replay() resource2.make([]) result = self.store.execute("SELECT version FROM patch") self.assertEqual([(1, ), (2, )], sorted(result.get_all()))
def test_use_schema_stamp(self): """ If a schema stamp directory is set, then it's used to decide whether to upgrade the schema or not. In case the patch directory hasn't been changed since the last known upgrade, no schema upgrade is run. """ self.resource.schema_stamp_dir = self.makeFile() self.resource.make([]) # Simulate a second test run that initializes the zstorm resource # from scratch, using the same schema stamp directory resource2 = ZStormResourceManager(self.databases) resource2.schema_stamp_dir = self.resource.schema_stamp_dir with CaptureTracer() as tracer: resource2.make([]) self.assertEqual([], tracer.queries)
def test_schema_uri_with_schema_stamp_dir(self): """ If a schema stamp directory is set, and the stamp indicates there's no need to update the schema, the resource clean up code will still connect as schema user if it needs to run the schema delete statements because of a commit. """ self.resource.schema_stamp_dir = self.makeFile() self.databases[0]["schema-uri"] = self.databases[0]["uri"] self.resource.make([]) # Simulate a second test run that initializes the zstorm resource # from scratch, using the same schema stamp directory resource2 = ZStormResourceManager(self.databases) resource2.schema_stamp_dir = self.resource.schema_stamp_dir zstorm = resource2.make([]) store = zstorm.get("test") store.execute("INSERT INTO test (foo) VALUES ('data')") store.commit() # Committing will force a schema.delete() run resource2.clean(zstorm) self.assertEqual([], list(store.execute("SELECT * FROM test")))