Ejemplo n.º 1
0
    def setUp(self):
        print('setup')

        if hasattr(UserTable, 'test_column1'):
            try:
                delattr(UserTable, 'test_column1')
            except:
                pass
            sa.inspect(UserTable).mapper._expire_memoizations()
            del sa.inspect(UserTable).mapper.columns['test_column1']
            del sa.inspect(UserTable).mapper._props['test_column1']

        if hasattr(UserTable, 'test_column3'):
            try:
                delattr(UserTable, 'test_column3')
            except:
                pass
            sa.inspect(UserTable).mapper._expire_memoizations()
            del sa.inspect(UserTable).mapper.columns['test_column3']
            del sa.inspect(UserTable).mapper._props['test_column3']

        try:
            delete_cmd = 'drop table {}'
            self.engine.execute(delete_cmd.format(UserTable.__tablename__))
        except Exception as e:
            pass

        Base.metadata.create_all(self.engine)
        UserTable.register(ArchiveTable, self.engine)
        MultiColumnUserTable.register(MultiColumnArchiveTable, self.engine)
        self.p1 = dict(product_id=10, col1='foobar', col2=10, col3=1)
        self.p2 = dict(product_id=11, col1='baz', col2=11, col3=1)
        self.p3 = dict(product_id=2546, col1='test', col2=12, col3=0)

        self.session = self.Session()
Ejemplo n.º 2
0
 def setUp(self):
     Base.metadata.create_all(self.engine)
     UserTable.register(ArchiveTable, self.engine)
     MultiColumnUserTable.register(MultiColumnArchiveTable, self.engine)
     self.p1 = dict(product_id=10, col1='foobar', col2=10, col3=1)
     self.p2 = dict(product_id=11, col1='baz', col2=11, col3=1)
     self.p3 = dict(product_id=2546, col1='test', col2=12, col3=0)
     self.session = self.Session()
Ejemplo n.º 3
0
def engine():
    """Session-wide test database engine."""
    drop_test_db()
    create_test_db()
    savage.init()
    _engine = create_engine(get_test_database_url(),
                            json_serializer=savage_json_serializer)
    Base.metadata.create_all(_engine)
    UserTable.register(ArchiveTable, _engine)
    MultiColumnUserTable.register(MultiColumnArchiveTable, _engine)
    yield _engine
    _engine.dispose()
    drop_test_db()
Ejemplo n.º 4
0
 def __init__(self, methodName='runTest'):
     self.engine1 = sa.create_engine(self.DATABASE_URL,
                                     isolation_level='READ UNCOMMITTED',
                                     echo='debug',
                                     logging_name='engine1')
     self.engine2 = sa.create_engine(self.DATABASE_URL,
                                     isolation_level='READ UNCOMMITTED',
                                     echo='debug',
                                     logging_name='engine2')
     self.Session1 = sessionmaker(bind=self.engine1)
     self.Session2 = sessionmaker(bind=self.engine2)
     Base.metadata.create_all(self.engine1)
     UserTable.register(ArchiveTable, self.engine1)
     UserTable.register(ArchiveTable, self.engine1)
     self.p1 = dict(product_id=10, col1='foobar', col2=10, col3=True)
     super(TestConcurrentUpdate, self).__init__(methodName)
Ejemplo n.º 5
0
def test_register_bad_archive_table_fails(engine):
    """
    Assert that an archive table with the following conditions fails to get registered:
        * no product_id column
        * the product_id column has the wrong type
    """
    Base_ = declarative_base(
    )  # use alternate base so these tables don't get created
    try:
        # no product_id column
        class ArchiveNoFKey(SavageLogMixin, Base_):
            __tablename__ = "no_fkey"
            user_id = Column(String(50))

        with pytest.raises(LogTableCreationError):
            UserTable.register(ArchiveNoFKey, engine)

        # product_id is not the same type as product_id
        class ArchiveWrongFKey(SavageLogMixin, Base_):
            __tablename__ = "wrong_fkey"
            product_id = Column(String(10))
            user_id = Column(String(50))

        with pytest.raises(LogTableCreationError):
            UserTable.register(ArchiveWrongFKey, engine)

        # column is named something different
        class ArchiveWrongName(SavageLogMixin, Base_):
            __tablename__ = "wrong_name"
            foo = Column(String(10))
            user_id = Column(String(50))

        with pytest.raises(LogTableCreationError):
            UserTable.register(ArchiveWrongName, engine)

        # user did not add user_id column
        class ArchiveNoUserId(SavageLogMixin, Base_):
            __tablename__ = "no_user_id"
            product_id = Column(Integer, nullable=False)

        with pytest.raises(LogTableCreationError):
            UserTable.register(ArchiveNoUserId, engine)

        # no unique constraint on version column
        class ArchiveNoConstraint(SavageLogMixin, Base_):
            __tablename__ = "no_constraint"
            product_id = Column(Integer)
            user_id = Column(String(50))

        with pytest.raises(LogTableCreationError):
            UserTable.register(ArchiveNoConstraint, engine)
    finally:
        UserTable.register(ArchiveTable, engine)
Ejemplo n.º 6
0
def test_register_user_table(engine):
    Base_ = declarative_base()
    try:
        # --- Test failure cases ---
        class WrongVersionColumns(SavageModelMixin, Base_):
            __tablename__ = "wrong_version_cols"
            version_columns = ["id"]
            pid = Column(Integer, primary_key=True)

        class WrongVersionColumnsArchive(SavageLogMixin, Base_):
            __tablename__ = "wrong_version_cols_archive"
            pid = Column(Integer)

        with pytest.raises(LogTableCreationError):
            WrongVersionColumns.register(WrongVersionColumnsArchive, engine)

        class NoVersionCols(SavageModelMixin, Base_):
            __tablename__ = "no_version_cols"
            pid = Column(Integer, primary_key=True)

        class NoVersionColsArchive(SavageLogMixin, Base_):
            __tablename__ = "no_version_cols_archive"
            pid = Column(Integer)

        with pytest.raises(LogTableCreationError):
            NoVersionCols.register(NoVersionColsArchive, engine)

        class NoConstraint(SavageModelMixin, Base_):
            __tablename__ = "no_constraint"
            version_columns = ["pid1", "pid2"]
            pid1 = Column(Integer, primary_key=True)
            pid2 = Column(Integer)

        class NoConstraintArchive(SavageLogMixin, Base_):
            __tablename__ = "no_constraint_archive"
            pid1 = Column(Integer)
            pid2 = Column(Integer)

        with pytest.raises(LogTableCreationError):
            NoConstraint.register(NoConstraintArchive, engine)

        # --- Test success cases ---
        class PKConstraint(SavageModelMixin, Base_):
            __tablename__ = "pk_constraint"
            version_columns = ["pid1"]
            pid1 = Column(Integer, primary_key=True)
            pid2 = Column(Integer)

        class PKConstraintArchive(SavageLogMixin, Base_):
            __tablename__ = "pk_constraint_archive"
            pid1 = Column(Integer)
            user_id = Column(Integer)
            __table_args__ = (UniqueConstraint("pid1",
                                               "version_id",
                                               name="pid"), )

        Base_.metadata.create_all(engine)
        PKConstraint.register(PKConstraintArchive, engine)
    finally:
        UserTable.register(ArchiveTable, engine)
        Base_.metadata.drop_all(engine)