Example #1
0
    def runTest(self):
        """ When there are no permissions on the column, it returns an empty result """
        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")

            cursor = connection.cursor()
            cursor.execute(
                "SELECT pg_class.oid as table_id, "
                "pg_attribute.attnum as column_id "
                "FROM pg_class join pg_attribute on attrelid=pg_class.oid "
                "where pg_class.relname='test_table'"
                " and pg_attribute.attname = 'some_column'")
            table_id, column_id = cursor.fetchone()

            if connection.server_version < 90100:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['9.1_plus']

            for version in self.versions_to_test:
                template_file = os.path.join(os.path.dirname(__file__), "..",
                                             version, "acl.sql")
                template = file_as_template(template_file)

                public_schema_id = 2200
                sql = template.render(scid=public_schema_id,
                                      tid=table_id,
                                      clid=column_id)

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchall()
                self.assertEqual(0, len(fetch_result))
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest(
                    "COLLATE is not present in PG versions below v9.1"
                )

        # Create pre-requisite table
        for k, v in {1: 'id', 2: '"ID"'}.items():
            test_utils.create_table_with_query(
                self.server,
                self.test_db,
                CheckForViewDataTest.defaults_query.format(k, v))

        test_utils.create_table_with_query(
            self.server,
            self.test_db,
            CheckForViewDataTest.non_int_pkey_table
        )

        # Initialize an instance of WebDriverWait with timeout of 3 seconds
        self.wait = WebDriverWait(self.driver, 3)

        # close the db connection
        connection.close()
Example #3
0
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest(
                    "COLLATE is not present in PG versions below v9.1"
                )

        connection = test_utils.get_db_connection(
            self.server['db'],
            self.server['username'],
            self.server['db_password'],
            self.server['host'],
            self.server['port'],
            self.server['sslmode']
        )
        test_utils.drop_database(connection, "acceptance_test_db")
        test_utils.create_database(self.server, "acceptance_test_db")

        # Create pre-requisite table
        for k, v in {1: 'id', 2: '"ID"'}.items():
            test_utils.create_table_with_query(
                self.server,
                "acceptance_test_db",
                CheckForViewDataTest.defaults_query.format(k, v))

        # Initialize an instance of WebDriverWait with timeout of 3 seconds
        self.wait = WebDriverWait(self.driver, 3)
Example #4
0
    def runTest(self):
        """ When there are no triggers, it returns an empty result """
        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")

            cursor = connection.cursor()
            cursor.execute("SELECT pg_class.oid AS table_id "
                           "FROM pg_class "
                           "WHERE pg_class.relname='test_table'")
            table_id = cursor.fetchone()[0]

            if connection.server_version < 90100:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['9.1_plus']

            for version in self.versions_to_test:
                template_file = os.path.join(os.path.dirname(__file__), "..", version, "nodes.sql")

                template = file_as_template(template_file)

                sql = template.render(tid=table_id)

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchall()
                self.assertEqual(0, len(fetch_result))
    def runTest(self):
        """ This tests that column properties are returned"""
        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")

            cursor = connection.cursor()
            cursor.execute("SELECT oid FROM pg_class where relname='test_table'")
            table_id = cursor.fetchone()[0]

            if connection.server_version < 90100:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['9.1_plus']

            for version in self.versions_to_test:
                template_file = os.path.join(os.path.dirname(__file__), "..", version, "properties.sql")
                template = file_as_template(template_file)
                public_schema_id = 2200
                sql = template.render(scid=public_schema_id,
                                      tid=table_id
                                      )

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchall()
                first_row = {}
                for index, description in enumerate(cursor.description):
                    first_row[description.name] = fetch_result[0][index]

                self.assertEqual('some_column', first_row['name'])
                self.assertEqual('character varying', first_row['cltype'])
                self.assertEqual(2, len(fetch_result))
Example #6
0
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest("Functions tree node is not present in pgAdmin below PG v9.1")

        # Some test function is needed for debugger
        test_utils.create_debug_function(self.server, "postgres",
                                   "a_test_function")
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest(
                    "Membership is not present in Postgres below PG v9.1")

        # Some test function is needed for debugger
        test_utils.create_role(self.server, "postgres", "test_role")
        test_utils.create_role(self.server, "postgres", "<h1>test</h1>")
Example #8
0
    def setUp(self):
        with test_utils.Database(self.server) as (connection, database_name):
            cursor = connection.cursor()
            try:
                cursor.execute("CREATE ROLE testpgadmin LOGIN PASSWORD '%s'" %
                               self.server['db_password'])
            except Exception as exception:
                print(exception)
            connection.commit()

        self.server_with_modified_user = self.server.copy()
        self.server_with_modified_user['username'] = "******"
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest(
                    "Membership is not present in Postgres below PG v9.1")

        # create role
        self.role = "test_role" + str(random.randint(10000, 65535))

        # Some test function is needed for debugger
        test_utils.create_role(self.server, "postgres", self.role)
        test_utils.create_role(self.server, "postgres", "<h1>test</h1>")
        self.wait = WebDriverWait(self.page.driver, 20)
Example #10
0
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest(
                    "Functions tree node is not present in pgAdmin below "
                    "PG v9.1")

        # Some test function is needed for debugger
        test_utils.create_debug_function(self.server, "postgres",
                                         "a_test_function")

        if test_utils.does_function_exist(self.server, 'postgres',
                                          'a_test_function') != 'True':
            raise Exception("The required function is not found")
    def runTest(self):
        """ This tests that all applicable sql template versions can fetch some ddl """
        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")

            cursor = connection.cursor()
            cursor.execute(u"""
            SELECT
                db.oid as did, datlastsysoid
            FROM
                pg_database db
            WHERE db.datname = '{0}'""".format(database_name))
            database_id, last_system_oid = cursor.fetchone()

            cursor = connection.cursor()
            cursor.execute(
                "SELECT oid FROM pg_class where relname='test_table'")
            table_id = cursor.fetchone()[0]

            if connection.server_version < 90100:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['9.1_plus']

            for version in self.versions_to_test:
                template_file = os.path.join(os.path.dirname(__file__), "..",
                                             version, "properties.sql")
                template = file_as_template(template_file)

                public_schema_id = 2200
                sql = template.render(scid=public_schema_id,
                                      did=database_id,
                                      datlastsysoid=last_system_oid,
                                      tid=table_id)

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchone()

                first_row = {}
                for index, description in enumerate(cursor.description):
                    first_row[description.name] = fetch_result[index]

                self.assertEqual('test_table', first_row['name'])
                # triggercount is sometimes returned as a string for some reason
                self.assertEqual(0, long(first_row['triggercount']))
                self.assertEqual(None, first_row['typname'])
                self.assertEqual([], first_row['coll_inherits'])
    def before(self):
        with test_utils.Database(self.server) as (connection, _):
            if connection.server_version < 90100:
                self.skipTest(
                    "Functions tree node is not present in pgAdmin below "
                    "PG v9.1")

        # Some test function is needed for debugger
        self.function_name = "a_test_function" + \
                             str(random.randint(10000, 65535))
        test_utils.create_debug_function(self.server, self.test_db,
                                         self.function_name)

        if test_utils.does_function_exist(self.server, self.test_db,
                                          self.function_name) != 'True':
            raise RuntimeError("The required function is not found")
    def runTest(self):
        if hasattr(self, "ignore_test"):
            return
        supported_modes = ['require', 'verify-ca', 'verify-full']
        if self.server['sslmode'] in supported_modes:
            with test_utils.Database(self.server) as (connection,
                                                      database_name):

                cursor = connection.cursor()
                cursor.execute("CREATE EXTENSION sslinfo")
                connection.commit()
                cursor.execute("SELECT ssl_is_used()")
                is_ssl_used = cursor.fetchone()[0]
                self.assertEquals(True, is_ssl_used)
        else:
            self.skipTest("Cannot run SSL connection check test "
                          "with '{0}' sslmode".format(self.server['sslmode']))
Example #14
0
    def runTest(self):
        if hasattr(self, "ignore_test"):
            return

        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server_with_modified_user,
                                    database_name, "test_new_role_table")
            cursor = connection.cursor()
            cursor.execute("SELECT pg_class.oid AS table_id "
                           "FROM pg_class "
                           "WHERE pg_class.relname='test_new_role_table'")
            self.table_id = cursor.fetchone()[0]

            sql = self.generate_sql(connection.server_version)
            cursor.execute(sql)

            fetch_result = cursor.fetchall()
            self.assertions(fetch_result, cursor.description)
    def runTest(self):
        if hasattr(self, "ignore_test"):
            return

        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")
            self.database_name = database_name

            cursor = connection.cursor()
            self.test_setup(connection, cursor)

            sql = self.generate_sql(connection.server_version)

            cursor = connection.cursor()
            cursor.execute(sql)
            fetch_result = cursor.fetchall()

            self.assertions(fetch_result, cursor.description)
Example #16
0
    def runTest(self):
        """ This tests that all applicable sql template versions can fetch table names """
        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")

            if connection.server_version < 91000:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['default', '9.1_plus']

            for version in self.versions_to_test:
                template_file = os.path.join(os.path.dirname(__file__), "..",
                                             version, "nodes.sql")
                file_content = open(template_file, 'r').read()

                env = Environment(loader=SimpleTemplateLoader(file_content))

                template = env.get_template("")
                public_schema_id = 2200
                sql = template.render(scid=public_schema_id)

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchall()

                first_row = {}
                for index, description in enumerate(cursor.description):
                    first_row[description.name] = fetch_result[0][index]

                oid = first_row['oid']
                name = first_row['name']
                triggercount = first_row['triggercount']
                has_enable_triggers = first_row['has_enable_triggers']

                self.assertIsNotNone(long(oid))
                self.assertEqual('test_table', name)
                # triggercount is sometimes returned as a string for some reason
                self.assertEqual(0, long(triggercount))
                self.assertIsNotNone(long(has_enable_triggers))
Example #17
0
    def runTest(self):
        """ This tests that when there are permissions set up on the table, acl query returns the permissions"""
        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")

            cursor = connection.cursor()
            cursor.execute("GRANT SELECT ON test_table TO PUBLIC")

            cursor = connection.cursor()
            cursor.execute("SELECT oid FROM pg_class WHERE relname='test_table'")
            table_id = cursor.fetchone()[0]

            if connection.server_version < 90100:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['9.1_plus']

            for version in self.versions_to_test:
                template_file = os.path.join(os.path.dirname(__file__), "..", version, "acl.sql")
                template = file_as_template(template_file)
                public_schema_id = 2200
                sql = template.render(scid=public_schema_id,
                                      tid=table_id)

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchall()
                public_acls = list(filter(lambda acl: acl[1] == 'PUBLIC', fetch_result))
                self.assertEqual(len(public_acls), 1)

                new_acl_map = dict(zip(map(lambda column: column.name, cursor.description), public_acls[0]))

                self.assertEqual('PUBLIC', new_acl_map['grantee'])
                self.assertEqual(self.server['username'], new_acl_map['grantor'])
                self.assertEqual('relacl', new_acl_map['deftype'])
                self.assertEqual(['r'], new_acl_map['privileges'])
                self.assertEqual([False], new_acl_map['grantable'])
Example #18
0
    def runTest(self):
        if hasattr(self, "ignore_test"):
            return

        with test_utils.Database(self.server) as (connection, database_name):
            test_utils.create_table(self.server, database_name, "test_table")
            self.database_name = database_name

            if connection.server_version < 90100:
                self.versions_to_test = ['default']
            else:
                self.versions_to_test = ['9.1_plus']

            cursor = connection.cursor()
            self.test_setup(connection, cursor)

            for version in self.versions_to_test:
                sql = self.generate_sql(version)

                cursor = connection.cursor()
                cursor.execute(sql)
                fetch_result = cursor.fetchall()

                self.assertions(fetch_result, cursor.description)
Example #19
0
 def tearDown(self):
     with test_utils.Database(self.server) as (connection, database_name):
         cursor = connection.cursor()
         cursor.execute("DROP ROLE testpgadmin")
         connection.commit()