class CheckConstraintGetDependenciesDependentsTestCase(BaseTestGenerator):
    """This class will fetch dependents/ dependencies for check constraint to
    existing table """
    url = '/browser/check_constraint/'

    # Generates scenarios from cast_test_data.json file
    scenarios = utils.generate_scenarios(
        "check_constraint_dependencies_dependents",
        check_constraint_utils.test_cases)

    def setUp(self):
        super(CheckConstraintGetDependenciesDependentsTestCase, self).setUp()
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to fetch a check "
                            "constraint.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to fetch a check "
                            "constraint.")

        # Create table
        self.table_name = "table_checkconstraint_get_%s" % \
                          (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)

        # Create constraint to fetch dependents/dependency
        self.check_constraint_name = "test_checkconstraint_get_%s" % \
                                     (str(uuid.uuid4())[1:8])
        self.check_constraint_id = \
            check_constraint_utils.create_check_constraint(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.check_constraint_name)

    def runTest(self):
        """This function will fetch dependents/ dependencies for check
            constraint to existing table """
        if self.is_positive_test:
            if self.is_dependent:
                self.url = self.url + 'dependent/'
                response = check_constraint_utils.api_get(self)
            else:
                self.url = self.url + 'dependency/'
                response = check_constraint_utils.api_get(self)

            utils.assert_status_code(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 2
0
class FDWDDeleteMultipleTestCase(BaseTestGenerator):
    """This class will delete foreign data wrappers under test database."""
    skip_on_database = ['gpdb']
    scenarios = utils.generate_scenarios('fdw_delete_multiple',
                                         fdw_utils.test_cases)

    def setUp(self):
        """ This function will create extension and foreign data wrapper."""
        super(FDWDDeleteMultipleTestCase, self).setUp()
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.schema_name = self.schema_data['schema_name']
        self.fdw_names = ["fdw_{0}".format(str(uuid.uuid4())[1:8]),
                          "fdw_{0}".format(str(uuid.uuid4())[1:8])]
        self.fdw_ids = [fdw_utils.create_fdw(self.server, self.db_name,
                                             self.fdw_names[0]),
                        fdw_utils.create_fdw(self.server, self.db_name,
                                             self.fdw_names[1])]

    def delete_multiple(self, data):
        """
        This function returns multiple fdw delete response
        :param data: fdw ids to delete
        :return: fdw delete response
        """
        return self.tester.delete(self.url + str(utils.SERVER_GROUP) +
                                  '/' + str(self.server_id) +
                                  '/' + str(self.db_id) + '/',
                                  follow_redirects=True,
                                  data=json.dumps(data),
                                  content_type='html/json')

    def runTest(self):
        """This function will fetch foreign data wrapper present under test
         database."""
        db_con = database_utils.connect_database(self,
                                                 utils.SERVER_GROUP,
                                                 self.server_id,
                                                 self.db_id)
        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")
        fdw_response = fdw_utils.verify_fdw(self.server, self.db_name,
                                            self.fdw_names[0])
        if not fdw_response:
            raise Exception("Could not find FDW.")
        fdw_response = fdw_utils.verify_fdw(self.server, self.db_name,
                                            self.fdw_names[1])
        if not fdw_response:
            raise Exception("Could not find FDW.")
        data = {'ids': self.fdw_ids}
        delete_response = self.delete_multiple(data)

        self.assertEquals(delete_response.status_code,
                          self.expected_data['status_code'])

    def tearDown(self):
        """This function disconnect the test database and drop added extension
         and dependant objects."""
        database_utils.disconnect_database(self, self.server_id,
                                           self.db_id)
Esempio n. 3
0
class ForeignKeyPutTestCase(BaseTestGenerator):
    """This class will update foreign key from existing table"""
    url = '/browser/foreign_key/obj/'

    # Generates scenarios
    scenarios = utils.generate_scenarios("foreign_key_put",
                                         fk_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to fetch a foreign "
                            "key constraint.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to fetch a foreign "
                            "key constraint.")

        # Create local table
        self.local_table_name = "local_table_foreignkey_get_%s" % \
                                (str(uuid.uuid4())[1:8])
        self.local_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name, self.local_table_name)

        # Create foreign table
        self.foreign_table_name = "foreign_table_foreignkey_get_%s" % \
                                  (str(uuid.uuid4())[1:8])
        self.foreign_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name,
            self.foreign_table_name)

        # Create foreign key
        self.foreign_key_name = "test_foreignkey_get_%s" % \
                                (str(uuid.uuid4())[1:8])
        if "query" in self.inventory_data:
            query = self.inventory_data["query"]
        else:
            query = None

        self.foreign_key_id = fk_utils.create_foreignkey(
            self.server, self.db_name, self.schema_name, self.local_table_name,
            self.foreign_table_name, query)

    def runTest(self):
        """This function will update foreign key attached to table column."""
        self.data["oid"] = self.foreign_key_id

        if self.is_positive_test:
            response = fk_utils.api_put(self)

            # Assert response
            utils.assert_status_code(self, response)
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=[eval(self.mock_data["return_value"])]):
                    response = fk_utils.api_put(self)

            # Assert response
            utils.assert_status_code(self, response)
            utils.assert_error_message(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 4
0
class SchemaGetTestCase(BaseTestGenerator):
    """ This class will add new schema under database node. """
    scenarios = utils.generate_scenarios('schema_get', schema_utils.test_cases)

    def get_schema(self):
        """
        This function returns the schema get response
        :return: schema get response
        """
        return self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/' + str(self.schema_id),
                               content_type='html/json')

    def get_schema_list(self):
        """
        This functions returns the schema list
        :return: schema list
        """
        return self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/',
                               content_type='html/json')

    def runTest(self):
        """ This function will delete schema under database node. """
        schema = parent_node_dict["schema"][-1]
        self.db_id = schema["db_id"]
        self.server_id = schema["server_id"]

        server_response = server_utils.connect_server(self, self.server_id)
        if not server_response["data"]["connected"]:
            raise Exception("Could not connect to server to connect the"
                            " database.")

        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database to get the schema.")

        self.schema_id = schema["schema_id"]
        if self.is_positive_test:
            if hasattr(self, "schema_list"):
                response = self.get_schema_list()
            else:
                response = self.get_schema()

        else:
            if hasattr(self, "error_fetching_schema"):
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    if hasattr(self, "schema_list"):
                        response = self.get_schema_list()
                    else:
                        response = self.get_schema()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 5
0
class ConstraintDeleteMultipleTestCase(BaseTestGenerator):
    """This class will delete constraints under table node."""
    url = '/browser/constraints/obj/'

    # Generates scenarios from cast_test_data.json file
    scenarios = utils.generate_scenarios("constraints_get",
                                         constraints_utils.test_cases)

    # scenarios = [
    #     # Fetching default URL for table node.
    #     ('Get Constraints', dict(url='/browser/constraints/obj/'))
    # ]

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add a table.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add a table.")

        # Create table
        self.table_name = "table_constraint_delete_%s" % \
                          (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)

        # Create Check Constraints
        self.check_constraint_name = "test_constraint_delete_%s" % \
                                     (str(uuid.uuid4())[1:8])
        self.check_constraint_id = \
            chk_constraint_utils.create_check_constraint(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.check_constraint_name)

        self.check_constraint_name_1 = "test_constraint_delete1_%s" % (str(
            uuid.uuid4())[1:8])
        self.check_constraint_id_1 = \
            chk_constraint_utils.create_check_constraint(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.check_constraint_name_1)

        # Create Exclusion Constraint
        self.exclustion_constraint_name = "test_exclusion_get_%s" % (str(
            uuid.uuid4())[1:8])
        self.exclustion_constraint_id = \
            exclusion_utils.create_exclusion_constraint(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.exclustion_constraint_name
            )

        # Create Foreign Key
        self.foreign_table_name = "foreign_table_foreignkey_get_%s" % \
                                  (str(uuid.uuid4())[1:8])
        self.foreign_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name,
            self.foreign_table_name)
        self.foreign_key_name = "test_foreignkey_get_%s" % \
                                (str(uuid.uuid4())[1:8])
        self.foreign_key_id = fk_utils.create_foreignkey(
            self.server, self.db_name, self.schema_name, self.table_name,
            self.foreign_table_name)

        # Create Primary Key
        self.primary_key_name = "test_primary_key_get_%s" % \
                                (str(uuid.uuid4())[1:8])
        self.primary_key_id = \
            index_constraint_utils.create_index_constraint(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.primary_key_name, "PRIMARY KEY")

        # Create Unique Key constraint
        self.unique_constraint_name = "test_unique_constraint_get_%s" % (str(
            uuid.uuid4())[1:8])

        self.unique_constraint_id = \
            index_constraint_utils.create_index_constraint(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.unique_constraint_name, "UNIQUE")

    def runTest(self):
        """This function will delete constraints under table node."""
        if self.is_positive_test:
            response = constraints_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 6
0
class ExclusionGetTestCase(BaseTestGenerator):
    """This class will fetch the existing exclusion constraint"""
    url = '/browser/exclusion_constraint/obj/'

    # Generates scenarios from cast_test_data.json file
    scenarios = utils.generate_scenarios("exclusion_constraint_get",
                                         exclusion_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add a table.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add a table.")

        # Create table
        self.table_name = "table_exclusion_%s" % (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)

        # Create constraint to fetch
        self.exclusion_constraint_name = \
            "test_exclusion_delete_%s" % (str(uuid.uuid4())[1:8])
        self.exclusion_constraint_id = exclusion_utils.\
            create_exclusion_constraint(self.server, self.db_name,
                                        self.schema_name, self.table_name,
                                        self.exclusion_constraint_name)

        # Cross check constraint creation
        cross_check_res = exclusion_utils.verify_exclusion_constraint(
            self.server, self.db_name, self.exclusion_constraint_name)
        if not cross_check_res:
            raise Exception("Could not find the exclusion constraint "
                            "to delete.")

        # In case of multiple constraints
        if self.is_list:
            # Create constraint to delete
            self.exclusion_constraint_name_2 = \
                "test_exclconstraint_get_list_%s" % (str(uuid.uuid4())[1:8])
            self.exclusion_constraint_id_2 = \
                exclusion_utils.create_exclusion_constraint(
                    self.server, self.db_name, self.schema_name,
                    self.table_name,
                    self.exclusion_constraint_name_2)

    def runTest(self):
        """This function will fetch check constraint to table."""
        if self.is_positive_test:
            if self.is_list:
                response = exclusion_utils.api_get(self, '')
            else:
                response = exclusion_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=[eval(self.mock_data["return_value"])]):
                    response = exclusion_utils.api_get(self)
            elif 'exclusion_constraint_id' in self.data:
                self.exclusion_constraint_id = \
                    self.data["exclusion_constraint_id"]
                response = exclusion_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)
            utils.assert_error_message(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class GrantWizardSavePermissionsTestCase(BaseTestGenerator):
    """ This will grant permission to user for specified database object. """

    scenarios = utils.generate_scenarios('grant_wizard_save_permissions',
                                         grant_wizard_utils.test_cases)

    def setUp(self):
        self.database_info = parent_node_dict["database"][-1]
        self.db_name = self.database_info["db_name"]
        self.did = self.database_info["db_id"]
        self.sid = parent_node_dict["server"][-1]["server_id"]

        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.sid, self.did)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add a table.")

        self.schema_id = parent_node_dict['schema'][-1]["schema_id"]
        self.schema_name = parent_node_dict['schema'][-1]["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add a table.")
        self.table_name = "table_for_wizard%s" % (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)
        self.test_data['objects'][-1]['name'] = self.table_name
        self.test_data['objects'][-1]['name_with_args'] = self.table_name
        self.test_data['objects'][-1]['nspname'] = self.schema_name

        if self.server_information['type'] == 'ppas':
            self.test_data['acl'][-1]['grantee'] = 'enterprisedb'
            self.test_data['acl'][-1]['grantor'] = 'enterprisedb'
        else:
            self.test_data['acl'][-1]['grantee'] = 'postgres'
            self.test_data['acl'][-1]['grantor'] = 'postgres'

    def grant_permissions(self):
        response = self.tester.post(self.url + str(self.sid) + '/' +
                                    str(self.did) + '/',
                                    data=json.dumps(self.test_data),
                                    content_type='html/json',
                                    follow_redirects=True)
        return response

    def runTest(self):
        """ This function will grant permission for user under database
        object. """

        if self.is_positive_test:
            response = self.grant_permissions()
            actual_response_code = response.status_code
            expected_response_code = self.expected_data['status_code']
        else:
            with patch(self.mock_data["function_name"],
                       return_value=eval(self.mock_data["return_value"])):
                response = self.grant_permissions()
                actual_response_code = response.status_code
                expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        """This function disconnect database."""
        database_utils.disconnect_database(self, self.sid, self.did)
Esempio n. 8
0
class CollationSqlTestCase(BaseTestGenerator):
    """ This class will fetch new collation under schema node. """
    scenarios = utils.generate_scenarios('get_collation_sql',
                                         collation_utils.test_cases)

    def setUp(self):
        super(CollationSqlTestCase, self).setUp()
        self.schema_info = parent_node_dict["schema"][-1]
        self.schema_name = self.schema_info["schema_name"]
        self.schema_id = self.schema_info["schema_id"]
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.server_id = self.schema_info["server_id"]
        self.db_id = self.schema_info["db_id"]
        self.coll_name = "collation_get_%s" % str(uuid.uuid4())[1:8]
        self.collation = collation_utils.create_collation(self.server,
                                                          self.schema_name,
                                                          self.coll_name,
                                                          self.db_name)
        self.collation_id = self.collation[0]

    def get_collation_sql(self):
        """
        This functions returns the collation sql
        :return: collation sql
        """
        return self.tester.get(
            self.url + str(utils.SERVER_GROUP) + '/' + str(
                self.server_id) + '/' +
            str(self.db_id) + '/' + str(self.schema_id) +
            '/' + str(self.collation_id), content_type='html/json')

    def get_collation_msql(self):
        """
        This functions returns the collation sql
        :return: collation sql
        """
        return self.tester.get(
            self.url +
            str(utils.SERVER_GROUP) + '/' + str(self.server_id) + '/' +
            str(self.db_id) + '/' + str(self.schema_id),
            content_type='html/json', follow_redirects=True
        )

    def runTest(self):
        """ This function will fetch collation sql under schema node. """
        db_con = database_utils.connect_database(self,
                                                 utils.SERVER_GROUP,
                                                 self.server_id,
                                                 self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database.")

        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema.")

        if self.is_positive_test:
            response = self.get_collation_sql()
        else:
            if hasattr(self, "error_fetching_collation"):
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.get_collation_sql()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        # Disconnect database to delete it
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class MViewsUpdateParameterTestCase(BaseTestGenerator):
    """This class will check materialized view refresh functionality."""
    # Generates scenarios
    scenarios = utils.generate_scenarios("mview_refresh",
                                         views_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to update a mview.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to update a mview.")

        query = self.inventory_data['query']

        self.m_view_name = "test_mview_put_%s" % (str(uuid.uuid4())[1:8])

        self.view_id = views_utils.create_view(self.server, self.db_name,
                                               self.schema_name,
                                               self.m_view_name, query)

    def runTest(self):
        """This class will check materialized view refresh functionality"""
        mview_response = views_utils.verify_view(self.server, self.db_name,
                                                 self.m_view_name)
        if not mview_response:
            raise Exception("Could not find the mview to update.")

        if self.is_put_request:
            # Check utility
            url_from_test_data = self.url
            self.url = 'browser/mview/check_utility_exists/'
            response = views_utils.api_get(self)
            if response.json['success'] == 0:
                self.skipTest("Couldn't check materialized view refresh "
                              "functionality because utility/binary does "
                              "not exists.")
            # reset self.url value
            self.url = url_from_test_data

            if self.is_positive_test:
                response = views_utils.api_put(self)

                # Assert response
                utils.assert_status_code(self, response)
                self.assertTrue('job_id' in response.json['data'])
            else:
                if 'm_view_id' in self.data:
                    self.view_id = self.data['m_view_id']
                    response = views_utils.api_put(self)
                    # Assert response
                    utils.assert_status_code(self, response)
                    utils.assert_error_message(self, response)

        else:
            # only check utility
            response = views_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class DomainConstraintGetSqlTestCase(BaseTestGenerator):
    """ This class will add new domain constraint under schema node. """

    scenarios = utils.generate_scenarios('domain_constraints_get_sql',
                                         domain_cons_utils.test_cases)

    def setUp(self):
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        self.domain_name = "domain_%s" % (str(uuid.uuid4())[1:8])
        self.domain_con_name = \
            "test_domain_con_sql_%s" % (str(uuid.uuid4())[1:8])

        self.domain_info = \
            domain_cons_utils.create_domain(self.server,
                                            self.db_name,
                                            self.schema_name,
                                            self.schema_id,
                                            self.domain_name)

        self.domain_constraint_id = \
            domain_cons_utils.create_domain_constraints(self.server,
                                                        self.db_name,
                                                        self.schema_name,
                                                        self.domain_name,
                                                        self.domain_con_name)

    def sql_domain_constraint(self):
        """
        This function returns the domain constraint sql response
        :return: domain constraint sql response
        """
        return self.tester.get(
            self.url + str(utils.SERVER_GROUP) + '/' +
            str(self.server_id) + '/' +
            str(self.db_id) + '/' +
            str(self.schema_id) + '/' +
            str(self.domain_id) + '/' +
            str(self.domain_constraint_id),
            follow_redirects=True)

    def runTest(self):
        """ This function will add domain constraint under test database. """
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database.")
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema.")

        self.domain_id = self.domain_info[0]
        domain_name = self.domain_info[1]

        domain_response = domain_cons_utils.verify_domain(
            self.server,
            self.db_name,
            self.schema_id,
            domain_name)
        if not domain_response:
            raise Exception("Could not find the domain.")

        domain_cons_response = domain_cons_utils.verify_domain_constraint(
            self.server, self.db_name,
            self.domain_con_name)
        if not domain_cons_response:
            raise Exception("Could not find domain constraint.")

        if self.is_positive_test:
            response = self.sql_domain_constraint()
        else:
            if hasattr(self, "internal_server_error"):
                return_value_object = eval(self.mock_data["return_value"])
                with patch(self.mock_data["function_name"],
                           side_effect=[return_value_object]):
                    response = self.sql_domain_constraint()

            if hasattr(self, "wrong_domain_constraint_id"):
                self.domain_constraint_id = 99999
                response = self.sql_domain_constraint()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']

        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 11
0
class SchemaDeleteMultipleTestCase(BaseTestGenerator):
    """ This class will add new schema under database node. """

    scenarios = utils.generate_scenarios('schema_multiple_delete',
                                         schema_utils.test_cases)

    def setUp(self):
        self.database_info = parent_node_dict["database"][-1]
        self.db_name = self.database_info["db_name"]
        # Change the db name, so that schema will create in newly created db
        self.schema_names = [
            "schema_get_%s" % str(uuid.uuid4())[1:8],
            "schema_get_%s" % str(uuid.uuid4())[1:8]
        ]
        connection = utils.get_db_connection(self.db_name,
                                             self.server['username'],
                                             self.server['db_password'],
                                             self.server['host'],
                                             self.server['port'])
        self.schema_details = schema_utils.create_schema(
            connection, self.schema_names[0])
        connection = utils.get_db_connection(self.db_name,
                                             self.server['username'],
                                             self.server['db_password'],
                                             self.server['host'],
                                             self.server['port'])
        self.schema_details_1 = schema_utils.create_schema(
            connection, self.schema_names[1])

    def runTest(self):
        """ This function will delete schema under database node. """
        self.server_id = self.database_info["server_id"]
        self.db_id = self.database_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to delete the"
                            " schema.")

        schema_name = self.schema_details[1]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to delete.")

        schema_name = self.schema_details_1[1]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to delete.")

        data = {'ids': [self.schema_details[0], self.schema_details_1[0]]}
        response = self.tester.delete(self.url + str(utils.SERVER_GROUP) +
                                      '/' + str(self.server_id) + '/' +
                                      str(self.db_id) + '/',
                                      follow_redirects=True,
                                      data=json.dumps(data),
                                      content_type='html/json')

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEquals(actual_response_code, expected_response_code)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 12
0
class ForeignTablePutTestCase(BaseTestGenerator):
    """
    This class will fetch foreign table under database node.
    """
    # url
    url = '/browser/foreign_table/obj/'

    # Generates scenarios
    scenarios = utils.generate_scenarios("foreign_table_put",
                                         ft_utils.test_cases)

    def setUp(self):
        """ This function will create foreign data wrapper, foreign server
        and foreign table. """
        super(ForeignTablePutTestCase, self).setUp()

        # Load test data
        self.data = self.test_data

        # Get parent schema info
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.schema_name = self.schema_data['schema_name']
        self.schema_id = self.schema_data['schema_id']

        # Create FDW, server & table
        self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
        self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
        self.ft_name = "ft_%s" % (str(uuid.uuid4())[1:8])

        self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
                                           self.fdw_name)
        self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
                                              self.fsrv_name, self.fdw_name)

        if bool(self.inventory_data):
            query = self.inventory_data['query']
            self.ft_id = ft_utils.create_foreign_table(self.server,
                                                       self.db_name,
                                                       self.schema_name,
                                                       self.fsrv_name,
                                                       self.ft_name, query)
        else:
            self.ft_id = ft_utils.create_foreign_table(self.server,
                                                       self.db_name,
                                                       self.schema_name,
                                                       self.fsrv_name,
                                                       self.ft_name)

    def runTest(self):
        """This function will update foreign table under test database."""
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)

        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")

        fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
                                               self.fsrv_name)

        if not fsrv_response:
            raise Exception("Could not find Foreign Server.")

        ft_response = ft_utils.verify_foreign_table(self.server, self.db_name,
                                                    self.fsrv_name)
        if not ft_response:
            raise Exception("Could not find Foreign Table.")

        self.data['id'] = self.ft_id

        if self.is_positive_test:
            response = ft_utils.api_put(self)

            # Assert response
            utils.assert_status_code(self, response)
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=[eval(self.mock_data["return_value"])]):
                    response = ft_utils.api_put(self)

            # Assert response
            utils.assert_status_code(self, response)
            utils.assert_error_message(self, response)

    def tearDown(self):
        """ This function disconnect the test database and delete test
        foreign table object. """
        ft_utils.delete_foregin_table(self.server, self.db_name,
                                      self.schema_name, self.ft_name)

        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 13
0
class SchemaNodeAndNodesTestCase(BaseTestGenerator):
    """ This class will add new schema under database node. """

    scenarios = utils.generate_scenarios('schema_get_nodes',
                                         schema_utils.test_cases)

    def setUp(self):
        self.database_info = parent_node_dict["database"][-1]
        self.db_name = self.database_info["db_name"]
        # Change the db name, so that schema will create in newly created db
        self.schema_name = "schema_get_%s" % str(uuid.uuid4())[1:8]
        connection = utils.get_db_connection(self.db_name,
                                             self.server['username'],
                                             self.server['db_password'],
                                             self.server['host'],
                                             self.server['port'])
        self.schema_details = schema_utils.create_schema(connection,
                                                         self.schema_name)

    def get_node_schema(self):
        """
        This function returns the schema node response
        :return: schema node response
        """
        return self.tester.get(
            self.url + str(utils.SERVER_GROUP) + '/' + str(self.server_id) +
            '/' + str(self.db_id) + '/' + str(self.schema_id),
            follow_redirects=True)

    def runTest(self):
        """ This function will check node and nodes
         of schema under database node. """
        self.server_id = self.database_info["server_id"]
        self.db_id = self.database_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database.")

        self.schema_id = self.schema_details[0]
        schema_name = self.schema_details[1]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      schema_name)
        if not schema_response:
            raise Exception("Could not find the schema.")

        if self.is_positive_test:
            response = self.get_node_schema()
        else:
            if hasattr(self, "error_fetching_schema"):
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.get_node_schema()

            if hasattr(self, "wrong_schema_id"):
                self.schema_id = 99999
                response = self.get_node_schema()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 14
0
class TableAddTestCase(BaseTestGenerator):
    """ This class will add new collation under schema node. """
    url = '/browser/table/obj/'

    # Generates scenarios
    scenarios = utils.generate_scenarios("table_create",
                                         tables_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Check server version
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]

        if "server_min_version" in self.inventory_data:
            server_con = server_utils.connect_server(self, self.server_id)
            if not server_con["info"] == "Server connected.":
                raise Exception("Could not connect to server to add "
                                "partitioned table.")
            if server_con["data"]["version"] < \
                    self.inventory_data["server_min_version"]:
                self.skipTest(self.inventory_data["skip_msg"])

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add a table.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add a table.")

    def runTest(self):
        """ This function will add table under schema node. """
        if "table_name" in self.data:
            self.table_name = self.data["table_name"]
        else:
            self.table_name = "test_table_add_%s" % (str(uuid.uuid4())[1:8])

        db_user = self.server["username"]

        # Get the common data
        self.data.update(tables_utils.get_table_common_data())
        if self.server_information and \
            'server_version' in self.server_information and \
                self.server_information['server_version'] >= 120000:
            self.data['spcname'] = None
        self.data.update({
            "name":
            self.table_name,
            "relowner":
            db_user,
            "schema":
            self.schema_name,
            "relacl": [{
                "grantee":
                db_user,
                "grantor":
                db_user,
                "privileges": [{
                    "privilege_type": "a",
                    "privilege": True,
                    "with_grant": True
                }, {
                    "privilege_type": "r",
                    "privilege": True,
                    "with_grant": False
                }, {
                    "privilege_type": "w",
                    "privilege": True,
                    "with_grant": False
                }]
            }]
        })

        # Add table
        if self.is_positive_test:
            response = tables_utils.api_create(self)

            # Assert response
            utils.assert_status_code(self, response)

        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=eval(self.mock_data["return_value"])):
                    response = tables_utils.api_create(self)
            else:
                if self.table_name == "":
                    del self.data["name"]
                response = tables_utils.api_create(self)

            # Assert response
            utils.assert_status_code(self, response)
            utils.assert_error_message(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 15
0
class ForeignKeyAddTestCase(BaseTestGenerator):
    """This class will add foreign key to existing table"""
    url = '/browser/foreign_key/obj/'

    # Generates scenarios
    scenarios = utils.generate_scenarios("foreign_key_create",
                                         fk_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add a foreign "
                            "key constraint.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add a foreign "
                            "key constraint.")

        # Create local table
        self.local_table_name = "table_foreignkey_%s" % \
                                (str(uuid.uuid4())[1:8])
        self.local_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name, self.local_table_name)

        # Create foreign table
        self.foreign_table_name = "table_foreignkey_%s" % \
                                  (str(uuid.uuid4())[1:8])
        self.foreign_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name,
            self.foreign_table_name)

    def runTest(self):
        """This function will add foreign key table column."""
        # FK name
        if "name" in self.data:
            fk_name = self.data["name"] + (str(uuid.uuid4())[1:8])
            self.data["name"] = fk_name
        else:
            fk_name = self.local_table_name + '_' + \
                self.data["columns"][0]["local_column"] + '_fkey'

        # FK table name
        if "columns" in self.data:
            self.data["columns"][0]["references"] = self.foreign_table_id

        if self.is_positive_test:
            response = fk_utils.api_create(self)

            # Assert response
            utils.assert_status_code(self, response)

            # Verify in backend
            cross_check_res = fk_utils.verify_foreignkey(
                self.server, self.db_name, self.local_table_name, fk_name)
            self.assertIsNotNone(cross_check_res,
                                 "Could not find foreign key.")
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=eval(self.mock_data["return_value"])):
                    response = fk_utils.api_create(self)
            else:
                response = fk_utils.api_create(self)

            # Assert response
            utils.assert_status_code(self, response)
            utils.assert_error_message(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 16
0
class UserMappingPutTestCase(BaseTestGenerator):
    """This class will update user mapping under foreign server node."""
    skip_on_database = ['gpdb']
    scenarios = utils.generate_scenarios('user_mapping_update',
                                         um_utils.test_cases)

    def setUp(self):
        """ This function will create extension and foreign data wrapper."""
        super(UserMappingPutTestCase, self).setUp()
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.schema_name = self.schema_data['schema_name']
        self.extension_name = "cube"
        self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
        self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
        self.extension_id = extension_utils.create_extension(
            self.server, self.db_name, self.extension_name, self.schema_name)
        self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
                                           self.fdw_name)
        self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
                                              self.fsrv_name, self.fdw_name)
        self.um_id = um_utils.create_user_mapping(self.server, self.db_name,
                                                  self.fsrv_name)

    def update_user_mapping(self):
        """
        This functions update user mapping
        :return: user mapping update request details
        """
        return self.tester.put(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/' + str(self.fdw_id) + '/' +
                               str(self.fsrv_id) + '/' + str(self.um_id),
                               data=json.dumps(self.test_data),
                               follow_redirects=True)

    def runTest(self):
        """This function will update user mapping present under test
        database"""
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")
        fdw_response = fdw_utils.verify_fdw(self.server, self.db_name,
                                            self.fdw_name)
        if not fdw_response:
            raise Exception("Could not find FDW.")
        fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
                                               self.fsrv_name)
        if not fsrv_response:
            raise Exception("Could not find FSRV.")
        um_response = um_utils.verify_user_mapping(self.server, self.db_name,
                                                   self.fsrv_name)
        if not um_response:
            raise Exception("Could not find user mapping.")
        self.test_data["id"] = self.um_id

        if self.is_positive_test:
            put_response = self.update_user_mapping()

        else:
            if hasattr(self, "error_in_db"):
                with patch(self.mock_data["function_name"],
                           side_effect=eval(self.mock_data["return_value"])):
                    put_response = self.update_user_mapping()

        actual_response_code = put_response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        """This function disconnect the test database and drop added
        extension and dependant objects."""
        extension_utils.drop_extension(self.server, self.db_name,
                                       self.extension_name)
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 17
0
class SubscriptionGetTestCase(BaseTestGenerator):
    """This class will fetch the subscription under table node."""
    scenarios = utils.generate_scenarios('sql_subscription',
                                         subscription_utils.test_cases)

    def setUp(self):
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        self.server_version = schema_info["server_version"]
        if self.server_version < 99999:
            self.skipTest("Logical replication is not supported "
                          "for server version less than 10")
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception(
                "Could not connect to database to delete subscription.")
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to delete "
                            "subscription.")
        self.table_name = "table_column_%s" % (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)
        self.subscription_name = "test_subscription_delete_%s" % (str(
            uuid.uuid4())[1:8])
        self.subscription_id = \
            subscription_utils.create_subscription(self.server, self.db_name,
                                                   self.subscription_name)

    def get_sql(self):
        return self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/' + str(self.subscription_id),
                               content_type='html/json')

    def runTest(self):
        """This function will fetch the subscription under table node."""

        if self.is_positive_test:
            response = self.get_sql()
        else:
            with patch(self.mock_data["function_name"],
                       return_value=eval(self.mock_data["return_value"])):
                response = self.get_sql()

        self.assertEqual(response.status_code,
                         self.expected_data["status_code"])

    def tearDown(self):
        subscription_utils.delete_subscription(self.server, self.db_name,
                                               self.subscription_name)
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class FTSParsersEndFunctionTestCase(BaseTestGenerator):
    """ This class will get the start functions FTS parsers
    under test schema. """

    scenarios = utils.generate_scenarios('start_functions_fts_parsers',
                                         fts_parsers_utils.test_cases)

    def setUp(self):
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.schema_name = self.schema_data['schema_name']
        self.schema_id = self.schema_data['schema_id']
        self.extension_name = "postgres_fdw"
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.db_user = self.server["username"]
        self.func_name = "fts_parser_func_%s" % str(uuid.uuid4())[1:8]
        self.fts_parser_name = "fts_parser_delete_%s" % (str(
            uuid.uuid4())[1:8])
        server_con = server_utils.connect_server(self, self.server_id)
        if not server_con["info"] == "Server connected.":
            raise Exception("Could not connect to server to add resource "
                            "groups.")
        server_version = 0
        if "type" in server_con["data"]:
            if server_con["data"]["version"] < 90500:
                message = "FTS Parsers are not supported by PG9.4 " \
                          "and PPAS9.4 and below."
                self.skipTest(message)
        self.function_info = fts_config_funcs_utils.create_trigger_function(
            self.server, self.db_name, self.schema_name, self.func_name,
            server_version)
        self.fts_parser_id = fts_parsers_utils. \
            create_fts_parser(
                self.server, self.db_name, self.schema_name,
                self.fts_parser_name)

    def get_fts_parsers_start_functions(self):
        """
        This functions returns the fts parsers start functions
        :return: fts start functions node
        """

        return self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/' + str(self.schema_id) + '/',
                               content_type='html/json')

    def runTest(self):
        """ This function will add new FTS parsers under test schema. """
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)

        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")

        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema.")

        fts_conf_response = fts_parsers_utils.verify_fts_parser(
            self.server, self.db_name, self.fts_parser_name)

        if not fts_conf_response:
            raise Exception("Could not find the FTS Parsers.")

        if self.is_positive_test:
            response = self.get_fts_parsers_start_functions()
        else:
            if hasattr(self, "error_fetching_fts_parser"):
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.get_fts_parsers_start_functions()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        """This function delete the fts_parser and disconnect the test
        database."""
        fts_parser_utils.delete_fts_parser(self.server, self.db_name,
                                           self.schema_name,
                                           self.fts_parser_name)
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class AddServerTest(BaseTestGenerator):
    """ This class will add the servers under default server group. """

    scenarios = utils.generate_scenarios('add_server',
                                         servers_utils.test_cases)

    def setUp(self):
        pass

    def create_server(self, url):
        return self.tester.post(url,
                                data=json.dumps(self.server),
                                content_type='html/json')

    def runTest(self):
        """ This function will add the server under default server group."""
        url = "{0}{1}/".format(self.url, utils.SERVER_GROUP)

        # Add service name in the config
        if 'connect_timeout' in self.test_data:
            self.server['connect_timeout'] = self.test_data['connect_timeout']
        elif 'shared' in self.test_data:
            self.server['shared'] = self.test_data['shared']
        elif 'service' in self.test_data:
            self.server['service'] = self.test_data['service']

        if hasattr(self, 'ssh_tunnel'):
            self.server['use_ssh_tunnel'] = self.test_data['use_ssh_tunnel']
            self.server['tunnel_host'] = self.test_data['tunnel_host']
            self.server['tunnel_port'] = self.test_data['tunnel_port']
            self.server['tunnel_username'] = self.test_data['tunnel_username']

            if self.with_password:
                self.server['tunnel_authentication'] = self.test_data[
                    'tunnel_authentication']
            else:
                self.server['tunnel_authentication'] = 1
                self.server['tunnel_identity_file'] = 'pkey_rsa'

            if self.save_password:
                self.server['tunnel_password'] = self.test_data[
                    'tunnel_password']
        if 'connect_now' in self.test_data:
            self.server['connect_now'] = self.test_data['connect_now']
            self.server['password'] = self.server['db_password']

        if self.is_positive_test:
            if hasattr(self, 'with_save'):
                self.server['save_password'] = self.with_save
            if hasattr(self, 'with_pwd') and not self.with_pwd:
                # Remove the password from server object
                db_password = self.server['db_password']
                del self.server['db_password']
            response = self.create_server(url)
        self.assertEquals(response.status_code,
                          self.expected_data["status_code"])
        response_data = json.loads(response.data.decode('utf-8'))
        self.server_id = response_data['node']['_id']

        if hasattr(self, 'with_pwd') and not self.with_pwd:
            # Remove the password from server object
            self.server['db_password'] = db_password

    def tearDown(self):
        """This function delete the server from SQLite """
        utils.delete_server_with_api(self.tester, self.server_id)
Esempio n. 20
0
class RulesUpdateTestCase(BaseTestGenerator):
    """This class will update the rule under table node."""
    scenarios = utils.generate_scenarios('update_rule',
                                         rules_utils.test_cases)

    def setUp(self):
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to delete rule.")
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to delete rule.")
        self.table_name = "table_column_%s" % (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)
        self.rule_name = "test_rule_delete_%s" % (str(uuid.uuid4())[1:8])
        self.rule_id = rules_utils.create_rule(self.server, self.db_name,
                                               self.schema_name,
                                               self.table_name,
                                               self.rule_name)

    def update_rule(self, data):
        return self.tester.put(
            "{0}{1}/{2}/{3}/{4}/{5}/{6}".format(self.url, utils.SERVER_GROUP,
                                                self.server_id, self.db_id,
                                                self.schema_id, self.table_id,
                                                self.rule_id),
            data=json.dumps(data),
            follow_redirects=True)

    def runTest(self):
        """This function will update the rule under table node."""
        rule_response = rules_utils.verify_rule(self.server, self.db_name,
                                                self.rule_name)
        data = {"id": self.rule_id,
                "comment": "This is testing comment."
                }
        if not rule_response:
            raise Exception("Could not find the rule to update.")

        if self.is_positive_test:
            if hasattr(self, "wrong_rule_id"):
                self.rule_id = 9999
            response = self.update_rule(data)
        else:
            with patch(self.mock_data["function_name"],
                       return_value=eval(self.mock_data["return_value"])):
                if hasattr(self, "wrong_rule_id"):
                    self.rule_id = 9999
                response = self.update_rule(data)

        self.assertEqual(response.status_code,
                         self.expected_data["status_code"])

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class DebuggerPollExecutionResult(BaseTestGenerator):
    """ This class will start debugger execution."""

    scenarios = utils.generate_scenarios('poll_end_execution_result',
                                         debugger_utils.test_cases)

    def setUp(self):
        super(DebuggerPollExecutionResult, self).setUp()
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.schema_id = self.schema_data['schema_id']

        local_self = funcs_utils.set_up(self)

        self.test_data['funcowner'] = self.server["username"]

        function_info = debugger_utils.create_function(self, utils)

        self.func_id = json.loads(function_info.data)['node']['_id']

        if self.add_extension:
            debugger_utils.add_extension(self, utils, db_utils=db_utils)

        init_debugger = debugger_utils.init_debugger_function(self)

        self.trans_id = json.loads(init_debugger.data)['data']['trans_id']

        if self.init_target:
            debugger_utils.initialize_target(self, utils)

            debugger_utils.start_listener(self, utils, db_utils)
            self.port_no = debugger_utils.messages(self, utils, db_utils)
            debugger_utils.start_execution(self, utils, db_utils)

    def poll_execution_result(self):
        return self.tester.get(self.url + str(self.trans_id) + '/',
                               content_type='application/json')

    def runTest(self):
        """
        This function will initialize the debugger for function and procedures.
        """
        if self.is_positive_test:
            response = self.poll_execution_result()
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.poll_execution_result()
            else:
                response = self.poll_execution_result()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def tearDown(self):
        """This function delete the server from SQLite """
        # debugger_utils.abort_debugger(self)
        debugger_utils.close_debugger(self)
        debugger_utils.delete_function(self, utils)
        db_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 22
0
class CompoundTriggersGetTestCase(BaseTestGenerator):
    """This class will get the compound trigger under table node."""
    skip_on_database = ['gpdb']
    scenarios = utils.generate_scenarios('get_compound_trigger',
                                         compound_triggers_utils.test_cases)

    def setUp(self):
        super(CompoundTriggersGetTestCase, self).setUp()
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        server_con = server_utils.connect_server(self, self.server_id)
        if server_con:
            if "type" in server_con["data"]:
                if server_con["data"]["type"] == "pg":
                    message = "Compound Triggers are not supported by PG."
                    self.skipTest(message)
                elif server_con["data"]["type"] == "ppas" and \
                        server_con["data"]["version"] < 120000:
                    message = "Compound Triggers are not supported by " \
                              "EPAS server less than 12"
                    self.skipTest(message)

        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception(
                "Could not connect to database to update a compound trigger.")
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to update a trigger.")
        self.table_name = \
            "table_compound_trigger_%s" % (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)

        self.trigger_name = \
            "test_compound_trigger_update_%s" % (str(uuid.uuid4())[1:8])
        self.trigger_id = \
            compound_triggers_utils.create_compound_trigger(self.server,
                                                            self.db_name,
                                                            self.schema_name,
                                                            self.table_name,
                                                            self.trigger_name)

    def get_compound_trigger(self):
        return self.tester.get("{0}{1}/{2}/{3}/{4}/{5}/{6}".format(
            self.url, utils.SERVER_GROUP, self.server_id, self.db_id,
            self.schema_id, self.table_id, self.trigger_id),
                               follow_redirects=True)

    def runTest(self):
        """This function will get trigger under table node."""
        trigger_response = \
            compound_triggers_utils.verify_compound_trigger(self.server,
                                                            self.db_name,
                                                            self.trigger_name)
        if not trigger_response:
            raise Exception("Could not find the compound trigger to update.")

        if self.is_positive_test:
            if hasattr(self, "incorrect_compound_trigger_id"):
                self.trigger_id = 9999
            if hasattr(self, "pass_argument"):
                url = "{0}{1}/{2}/{3}/{4}/{5}/{6}".format(
                    self.url, utils.SERVER_GROUP, self.server_id, self.db_id,
                    self.schema_id, self.table_id, self.trigger_id)
                url = \
                    url + \
                    "?oid=17312&description=commaa&name=code&_=1589522392579"
                response = self.tester.get(url, follow_redirects=True)
                self.assertEqual(response.status_code,
                                 self.expected_data["status_code"])
            if hasattr(self, "table_nodes"):
                self.trigger_id = ''
                response = self.get_compound_trigger()
            else:
                response = self.get_compound_trigger()
        else:
            if hasattr(self, "dummy_dict"):
                if hasattr(self, "table_nodes"):
                    self.trigger_id = ''

                self.mock_data['return_value'] = [
                    (True, self.dummy_dict),
                    (False, self.expected_data["message"])
                ]
                with patch(self.mock_data["function_name"],
                           side_effect=self.mock_data["return_value"]):
                    response = self.get_compound_trigger()
            elif hasattr(self, "table_nodes"):
                self.trigger_id = ''
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.get_compound_trigger()
            else:
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.get_compound_trigger()

        self.assertEqual(response.status_code,
                         self.expected_data["status_code"])

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class FTSParsersDependencyDependentTestCase(BaseTestGenerator):
    """ This class will get the dependency and  dependents FTS parsers
    under test schema. """

    scenarios = utils.generate_scenarios('dependency_dependent_fts_parsers',
                                         fts_parsers_utils.test_cases)

    def setUp(self):
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.schema_name = self.schema_data['schema_name']
        self.schema_id = self.schema_data['schema_id']
        self.extension_name = "postgres_fdw"
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.db_user = self.server["username"]
        self.func_name = "fts_parsers_func_%s" % str(uuid.uuid4())[1:8]
        self.fts_parsers_name = "fts_parsers_delete_%s" % (str(
            uuid.uuid4())[1:8])
        server_con = server_utils.connect_server(self, self.server_id)
        if not server_con["info"] == "Server connected.":
            raise Exception("Could not connect to server to add resource "
                            "groups.")
        server_version = 0
        if "type" in server_con["data"]:
            if server_con["data"]["version"] < 90500:
                message = "FTS Parsers are not supported by PG9.4 " \
                          "and PPAS9.4 and below."
                self.skipTest(message)
        self.function_info = fts_parser_funcs_utils.create_trigger_function(
            self.server, self.db_name, self.schema_name, self.func_name,
            server_version)
        self.fts_parsers = fts_parsers_utils. \
            create_fts_parser(
                self.server, self.db_name, self.schema_name,
                self.fts_parsers_name)

    def runTest(self):
        """ This function will add new FTS dictionaries under test schema. """

        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)

        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")

        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema.")

        fts_dict_response = fts_parsers_utils.verify_fts_parser(
            self.server, self.db_name, self.fts_parsers_name)

        if not fts_dict_response:
            raise Exception("Could not find the FTS Parsers.")

        if self.is_positive_test:
            response = self.get_dependency_dependent()
            actual_response_code = response.status_code
            expected_response_code = self.expected_data['status_code']
        self.assertEqual(actual_response_code, expected_response_code)

    def get_dependency_dependent(self):
        """
        This function returns the fts parsers dependency and dependent
        :return: fts parsers dependency and dependent
        """
        return self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/' + str(self.schema_id) + '/' +
                               str(self.fts_parsers),
                               follow_redirects=True)

    def tearDown(self):
        """This function delete the fts_parser and disconnect the test
        database."""
        fts_parser_utils.delete_fts_parser(self.server, self.db_name,
                                           self.schema_name,
                                           self.fts_parsers_name)
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 24
0
class IndexConstraintGetStasticsTestCase(BaseTestGenerator):
    """This class will fetch the index constraint(primary key or unique key)
    statistics of  table column"""
    skip_on_database = ['gpdb']

    # Generates scenarios
    scenarios = utils.generate_scenarios("index_constraint_get_statistics",
                                         index_constraint_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add a "
                            "index constraint(primary key or unique key).")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add a index "
                            "constraint(primary key or unique key).")

        # Create table
        self.table_name = "table_indexconstraint_%s" % \
                          (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server,
                                                  self.db_name,
                                                  self.schema_name,
                                                  self.table_name)

        # Create constraint
        self.constraint_name = self.inventory_data["constraint_name"] + \
            (str(uuid.uuid4())[1:8])
        self.type = self.inventory_data["type"]
        self.index_constraint_id = index_constraint_utils. \
            create_index_constraint(self.server, self.db_name,
                                    self.schema_name, self.table_name,
                                    self.constraint_name, self.type)

    def runTest(self):
        """This function will fetch the index constraint(primary key or
        unique key) statistics of table column."""
        if self.is_positive_test:
            if self.is_list:
                response = index_constraint_utils.api_get(self, '')
            else:
                response = index_constraint_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=[eval(self.mock_data["return_value"])]):
                    response = index_constraint_utils.api_get(self)
            elif "index_constraint_id" in self.data:
                self.index_constraint_id = self.data["index_constraint_id"]
                response = index_constraint_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)
            utils.assert_error_message(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
class ForeignKeyGetDependenciesDependentsTestCase(BaseTestGenerator):
    """This class will fetch foreign key dependencies/dependents from
    existing table """
    url = '/browser/foreign_key/'

    # Generates scenarios
    scenarios = utils.generate_scenarios("foreign_key_dependencies_dependents",
                                         fk_utils.test_cases)

    def setUp(self):
        # Load test data
        self.data = self.test_data

        # Create db connection
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to fetch a foreign "
                            "key constraint.")

        # Create schema
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to fetch a foreign "
                            "key constraint.")

        # Create local table
        self.local_table_name = "local_table_foreignkey_get_%s" % \
                                (str(uuid.uuid4())[1:8])
        self.local_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name, self.local_table_name)

        # Create foreign table
        self.foreign_table_name = "foreign_table_foreignkey_get_%s" % \
                                  (str(uuid.uuid4())[1:8])
        self.foreign_table_id = tables_utils.create_table(
            self.server, self.db_name, self.schema_name,
            self.foreign_table_name)

        # Create foreign key
        self.foreign_key_name = "test_foreignkey_get_%s" % \
                                (str(uuid.uuid4())[1:8])
        self.foreign_key_id = fk_utils.create_foreignkey(
            self.server, self.db_name, self.schema_name, self.local_table_name,
            self.foreign_table_name)

    def runTest(self):
        """This function will fetch foreign key dependencies/dependents
        attached to table column. """
        if self.is_positive_test:
            if self.is_dependent:
                self.url = self.url + 'dependent/'
                response = fk_utils.api_get(self)
            else:
                self.url = self.url + 'dependency/'
                response = fk_utils.api_get(self)

            # Assert response
            utils.assert_status_code(self, response)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 26
0
class LanguagesAddTestCase(BaseTestGenerator):
    skip_on_database = ['gpdb']
    scenarios = utils.generate_scenarios('create_language',
                                         language_utils.test_cases)

    def setUp(self):
        super(LanguagesAddTestCase, self).setUp()
        db_user = self.server['username']
        self.data = self.test_data
        self.data['name'] = "language_%s" % str(uuid.uuid4())[1:8]
        self.data['lanowner'] = db_user
        self.server_data = parent_node_dict["database"][-1]
        self.server_id = self.server_data["server_id"]
        self.db_id = self.server_data['db_id']
        self.db_name = self.server_data["db_name"]
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")

    def runTest(self):
        """This function will add language under test database."""

        actual_status_code = ''
        expected_status_code = ''
        if self.is_positive_test:
            response = self.create_language()
            actual_status_code = response.status_code
            expected_output = language_utils.verify_language(self)
            expected_status_code = self.expected_data["status_code"]
            self.assertDictEqual(expected_output, self.data)
        else:
            if hasattr(self, "missing_name"):
                del self.data["name"]
                response = self.create_language()
                actual_status_code = response.status_code
                expected_status_code = self.expected_data["status_code"]
            if hasattr(self, "missing_lang_pack"):
                with patch(self.mock_data["function_name"],
                           return_value=eval(self.mock_data["return_value"])):
                    response = self.create_language()
                    actual_status_code = response.status_code
                    expected_status_code = self.expected_data["status_code"]

            if hasattr(self, "error_in_properties"):
                with patch(self.mock_data["function_name"],
                           side_effect=[eval(self.mock_data["return_value"])]):
                    response = self.create_language()
                    actual_status_code = response.status_code
                    expected_status_code = self.expected_data["status_code"]
        self.assertEquals(actual_status_code, expected_status_code)

    def create_language(self):
        """This function will add language under test database."""
        return self.tester.post(self.url + str(utils.SERVER_GROUP) + '/' +
                                str(self.server_id) + '/' + str(self.db_id) +
                                '/',
                                data=json.dumps(self.data),
                                content_type='html/json')

    def tearDown(self):
        """This function delete added language and
        disconnect the test database."""

        if self.is_positive_test or hasattr(self, "error_in_properties"):
            language_utils.delete_language(self.server, self.db_name,
                                           self.data['name'])
            database_utils.disconnect_database(self, self.server_id,
                                               self.db_id)
class CompoundTriggersUpdateTestCase(BaseTestGenerator):
    """This class will update compound trigger under table node."""
    scenarios = utils.generate_scenarios('update_compound_trigger',
                                         compound_triggers_utils.test_cases)

    def setUp(self):
        super(CompoundTriggersUpdateTestCase, self).setUp()
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]
        server_con = server_utils.connect_server(self, self.server_id)
        if server_con:
            if "type" in server_con["data"]:
                if server_con["data"]["type"] == "pg":
                    message = "Compound Triggers are not supported by PG."
                    self.skipTest(message)
                elif server_con["data"]["type"] == "ppas" \
                        and server_con["data"]["version"] < 120000:
                    message = "Compound Triggers are not supported by " \
                              "EPAS server less than 12"
                    self.skipTest(message)

        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception(
                "Could not connect to database to update a compound trigger.")
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to update a trigger.")
        self.table_name = \
            "table_compound_trigger_%s" % (str(uuid.uuid4())[1:8])
        self.table_id = tables_utils.create_table(self.server, self.db_name,
                                                  self.schema_name,
                                                  self.table_name)

        self.trigger_name = \
            "test_compound_trigger_update_%s" % (str(uuid.uuid4())[1:8])
        self.trigger_id = \
            compound_triggers_utils.create_compound_trigger(self.server,
                                                            self.db_name,
                                                            self.schema_name,
                                                            self.table_name,
                                                            self.trigger_name)

    def update_compound_trigger(self):
        return self.tester.put("{0}{1}/{2}/{3}/{4}/{5}/{6}".format(
            self.url, utils.SERVER_GROUP, self.server_id, self.db_id,
            self.schema_id, self.table_id, self.trigger_id),
                               data=json.dumps(self.test_data),
                               follow_redirects=True)

    def runTest(self):
        """This function will get trigger under table node."""
        trigger_response = \
            compound_triggers_utils.verify_compound_trigger(self.server,
                                                            self.db_name,
                                                            self.trigger_name)
        if not trigger_response:
            raise Exception("Could not find the compound trigger to update.")

        if hasattr(self, 'disable_trigger') and self.disable_trigger:
            compound_triggers_utils.enable_disable_compound_trigger(
                self.server, self.db_name, self.schema_name, self.table_name,
                self.trigger_name, False)

        self.test_data.update({"id": self.trigger_id})
        if self.is_positive_test:
            if hasattr(self, "wrong_compound_trigger_id"):
                self.trigger_id = 9999
            response = self.update_compound_trigger()

        elif hasattr(self, "new_compound_trigger_id"):
            with patch(self.mock_data["function_name"],
                       side_effect=eval(self.mock_data["return_value"])):
                response = self.update_compound_trigger()

        elif hasattr(self, "dummy_dict"):
            self.mock_data['return_value'] = [(True, self.dummy_dict),
                                              (False, self.dummy_data)]

            with patch(
                    self.mock_data["function_name"],
                    side_effect=self.mock_data["return_value"]), patch(
                        'pgadmin.utils.driver.psycopg2.connection.Connection.'
                        'execute_scalar',
                        side_effect=[(True, True), (True, "Mocked response")]):
                response = self.update_compound_trigger()
        else:
            with patch(self.mock_data["function_name"],
                       return_value=eval(self.mock_data["return_value"])):
                if hasattr(self, "wrong_compound_trigger_id"):
                    self.trigger_id = 9999
                response = self.update_compound_trigger()

        self.assertEqual(response.status_code,
                         self.expected_data["status_code"])

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 28
0
class UserMappingGetMSQLTestCase(BaseTestGenerator):
    """This class will add user mapping under foreign server node."""
    skip_on_database = ['gpdb']
    scenarios = utils.generate_scenarios('user_mapping_get_msql',
                                         um_utils.test_cases)

    def setUp(self):
        """ This function will create extension and foreign data wrapper."""
        super(UserMappingGetMSQLTestCase, self).setUp()
        self.schema_data = parent_node_dict['schema'][-1]
        self.server_id = self.schema_data['server_id']
        self.db_id = self.schema_data['db_id']
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        self.schema_name = self.schema_data['schema_name']
        self.extension_name = "cube"
        self.fdw_name = "fdw_%s" % (str(uuid.uuid4())[1:8])
        self.fsrv_name = "fsrv_%s" % (str(uuid.uuid4())[1:8])
        self.extension_id = extension_utils.create_extension(
            self.server, self.db_name, self.extension_name, self.schema_name)
        self.fdw_id = fdw_utils.create_fdw(self.server, self.db_name,
                                           self.fdw_name)
        self.fsrv_id = fsrv_utils.create_fsrv(self.server, self.db_name,
                                              self.fsrv_name, self.fdw_name)
        self.um_id = um_utils.create_user_mapping(self.server, self.db_name,
                                                  self.fsrv_name)

    def msql_user_mapping(self):
        """
        This function returns the user mapping msql response
        :return: user mapping msql response
        """
        return self.tester.get(self.url + str(utils.SERVER_GROUP) + '/' +
                               str(self.server_id) + '/' + str(self.db_id) +
                               '/' + str(self.fdw_id) + '/' +
                               str(self.fsrv_id) + '/' + str(self.um_id),
                               follow_redirects=True)

    def runTest(self):
        """This function will fetch foreign server present under test
        database"""
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")
        fdw_response = fdw_utils.verify_fdw(self.server, self.db_name,
                                            self.fdw_name)
        if not fdw_response:
            raise Exception("Could not find FDW.")
        fsrv_response = fsrv_utils.verify_fsrv(self.server, self.db_name,
                                               self.fsrv_name)
        if not fsrv_response:
            raise Exception("Could not find FSRV.")
        um_response = um_utils.verify_user_mapping(self.server, self.db_name,
                                                   self.fsrv_name)
        if not um_response:
            raise Exception("Could not find user mapping.")

        if self.is_positive_test:
            response = self.msql_user_mapping()

        actual_response_code = response.status_code
        expected_response_code = self.expected_data['status_code']
        self.assertEquals(actual_response_code, expected_response_code)

    def tearDown(self):
        """This function disconnect the test database and drop added
        extension and dependant objects."""
        extension_utils.drop_extension(self.server, self.db_name,
                                       self.extension_name)
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 29
0
class DomainAddTestCase(BaseTestGenerator):
    """ This class will add new domain under schema node. """

    scenarios = utils.generate_scenarios('domain_create',
                                         domain_utils.test_cases)

    def setUp(self):
        self.db_name = parent_node_dict["database"][-1]["db_name"]
        schema_info = parent_node_dict["schema"][-1]
        self.schema_id = schema_info["schema_id"]
        self.schema_name = schema_info["schema_name"]
        self.server_id = schema_info["server_id"]
        self.db_id = schema_info["db_id"]

    def create_domain(self):
        """
        This function create a domain and returns the created domain
        response
        :return: created domain response
        """
        return self.tester.post(self.url + str(utils.SERVER_GROUP) + '/' +
                                str(self.server_id) + '/' + str(self.db_id) +
                                '/' + str(self.schema_id) + '/',
                                data=json.dumps(self.test_data),
                                content_type='html/json')

    def runTest(self):
        """ This function will add domain under schema node. """
        db_con = database_utils.connect_database(self, utils.SERVER_GROUP,
                                                 self.server_id, self.db_id)
        if not db_con['data']["connected"]:
            raise Exception("Could not connect to database to add collation.")
        schema_response = schema_utils.verify_schemas(self.server,
                                                      self.db_name,
                                                      self.schema_name)
        if not schema_response:
            raise Exception("Could not find the schema to add the collation.")

        self.test_data['basensp'] = self.schema_name
        self.test_data['owner'] = self.server["username"]
        # Call POST API to add domain
        if self.is_positive_test:
            response = self.create_domain()
        else:
            if hasattr(self, "internal_server_error"):
                return_value_object = eval(self.mock_data["return_value"])
                with patch(self.mock_data["function_name"],
                           side_effect=[return_value_object]):
                    response = self.create_domain()

            if hasattr(self, "error_getting_doid"):
                with patch(self.mock_data["function_name"],
                           side_effect=eval(self.mock_data["return_value"])):
                    response = self.create_domain()

            if hasattr(self, "error_getting_scid"):
                with patch(self.mock_data["function_name"],
                           side_effect=eval(self.mock_data["return_value"])):
                    response = self.create_domain()

        expected_response_code = self.expected_data['status_code']

        self.assertEquals(response.status_code, expected_response_code)

    def tearDown(self):
        # Disconnect the database
        database_utils.disconnect_database(self, self.server_id, self.db_id)
Esempio n. 30
0
class CastsMultipleDeleteTestCase(BaseTestGenerator):
    """ This class will delete the cast node added under database node. """
    skip_on_database = ['gpdb']
    url = '/browser/cast/obj/'
    scenarios = utils.generate_scenarios("cast_delete_multiple",
                                         cast_utils.test_cases)

    def setUp(self):
        super(CastsMultipleDeleteTestCase, self).setUp()
        self.inv_data = self.inventory_data
        self.default_db = self.server["db"]
        self.database_info = parent_node_dict['database'][-1]
        self.db_name = self.database_info['db_name']
        self.server["db"] = self.db_name
        self.cast_id = cast_utils.create_cast(self.server,
                                              self.inv_data["srctyp"],
                                              self.inv_data["trgtyp"])

    def runTest(self):
        """ This function will delete added cast."""
        self.server_id = self.database_info["server_id"]
        self.db_id = self.database_info['db_id']
        db_con = database_utils.connect_database(self,
                                                 utils.SERVER_GROUP,
                                                 self.server_id,
                                                 self.db_id)
        if not db_con["info"] == "Database connected.":
            raise Exception("Could not connect to database.")
        connection = utils.get_db_connection(self.server['db'],
                                             self.server['username'],
                                             self.server['db_password'],
                                             self.server['host'],
                                             self.server['port'],
                                             self.server['sslmode'])
        casts_exists = cast_utils.verify_cast(connection,
                                              self.inv_data["srctyp"],
                                              self.inv_data["trgtyp"])
        if not casts_exists:
            raise Exception("Could not find cast.")

        if self.is_positive_test:
            response = cast_utils.api_delete_casts(self, [self.cast_id])
            cast_utils.assert_status_code(self, response)
        else:
            if self.mocking_required:
                with patch(self.mock_data["function_name"],
                           side_effect=[eval(self.mock_data["return_value"])]):
                    response = cast_utils.api_delete_casts(self,
                                                           [self.cast_id])
                    cast_utils.assert_status_code(self, response)
                    cast_utils.assert_error_message(self, response)
            else:
                response = cast_utils.api_delete_casts(self, [self.cast_id])
                cast_utils.assert_status_code(self, response)

    def tearDown(self):
        """ Actually Delete cast """
        if not self.is_positive_test:
            cast_utils.api_delete_casts(self, [self.cast_id])

        """This function will disconnect test database."""
        database_utils.disconnect_database(self, self.server_id,
                                           self.db_id)
        self.server['db'] = self.default_db