Пример #1
0
def test_run_multiple_statements():
    """
    Test to execute an arbitrary query on the specified database
    and ensure that the correct multi_statements flag is passed along
    to MySQLdb.connect.
    """
    name = "query_id"
    database = "my_database"
    query = "SELECT * FROM table; SELECT * from another_table;"

    mock_t = MagicMock(return_value=True)

    with patch.dict(
            mysql_query.__salt__,
        {"mysql.db_exists": mock_t}), patch.dict(
            mysql_query.__opts__, {"test": False}), patch.dict(
                mysql_query.__salt__,
                {"mysql.query": mysql_mod.query}), patch.dict(
                    mysql_query.__salt__,
                    {"mysql._execute": MagicMock()}), patch.dict(
                        mysql_mod.__salt__,
                        {"config.option": MagicMock()}), patch(
                            "MySQLdb.connect",
                            return_value=MockMySQLConnect()) as mock_connect:
        ret = mysql_query.run(name,
                              database,
                              query,
                              client_flags=["multi_statements"])
        assert 1 == len(mock_connect.mock_calls)
        assert "client_flag=65536" in str(mock_connect.mock_calls[0])
Пример #2
0
    def test_run(self):
        """
        Test to execute an arbitrary query on the specified database.
        """
        name = "query_id"
        database = "my_database"
        query = "SELECT * FROM table;"

        ret = {"name": name, "result": True, "comment": "", "changes": {}}

        mock_t = MagicMock(return_value=True)
        mock_f = MagicMock(return_value=False)
        mock_str = MagicMock(return_value="salt")
        mock_none = MagicMock(return_value=None)
        mock_dict = MagicMock(return_value={"salt": "SALT"})
        mock_lst = MagicMock(return_value=["grain"])
        with patch.dict(mysql_query.__salt__, {"mysql.db_exists": mock_f}):
            with patch.object(mysql_query, "_get_mysql_error", mock_str):
                ret.update({"comment": "salt", "result": False})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

            with patch.object(mysql_query, "_get_mysql_error", mock_none):
                comt = "Database {0} is not present".format(name)
                ret.update({"comment": comt, "result": None})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

        with patch.dict(
                mysql_query.__salt__,
            {
                "mysql.db_exists": mock_t,
                "grains.ls": mock_lst,
                "grains.get": mock_dict,
                "mysql.query": mock_str,
            },
        ):
            comt = "No execution needed. Grain grain already set"
            ret.update({"comment": comt, "result": True})
            self.assertDictEqual(
                mysql_query.run(
                    name,
                    database,
                    query,
                    output="grain",
                    grain="grain",
                    overwrite=False,
                ),
                ret,
            )

            with patch.dict(mysql_query.__opts__, {"test": True}):
                comt = "Query would execute, storing result in grain: grain"
                ret.update({"comment": comt, "result": None})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output="grain",
                                    grain="grain"),
                    ret,
                )

                comt = "Query would execute, storing result" " in grain: grain:salt"
                ret.update({"comment": comt})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output="grain",
                                    grain="grain",
                                    key="salt"),
                    ret,
                )

                comt = "Query would execute, storing result in file: salt"
                ret.update({"comment": comt})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output="salt",
                                    grain="grain"),
                    ret,
                )

                comt = "Query would execute, not storing result"
                ret.update({"comment": comt})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

            comt = "No execution needed. Grain grain:salt already set"
            ret.update({"comment": comt, "result": True})
            self.assertDictEqual(
                mysql_query.run(
                    name,
                    database,
                    query,
                    output="grain",
                    grain="grain",
                    key="salt",
                    overwrite=False,
                ),
                ret,
            )

            comt = "Error: output type 'grain' needs the grain parameter\n"
            ret.update({"comment": comt, "result": False})
            self.assertDictEqual(
                mysql_query.run(name, database, query, output="grain"), ret)

            with patch.object(os.path, "isfile", mock_t):
                comt = "No execution needed. File salt already set"
                ret.update({"comment": comt, "result": True})
                self.assertDictEqual(
                    mysql_query.run(
                        name,
                        database,
                        query,
                        output="salt",
                        grain="grain",
                        overwrite=False,
                    ),
                    ret,
                )

            with patch.dict(mysql_query.__opts__, {"test": False}):
                ret.update({
                    "comment": "salt",
                    "changes": {
                        "query": "Executed"
                    }
                })
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)
Пример #3
0
    def test_run(self):
        '''
        Test to execute an arbitrary query on the specified database.
        '''
        name = 'query_id'
        database = 'my_database'
        query = "SELECT * FROM table;"

        ret = {'name': name, 'result': True, 'comment': '', 'changes': {}}

        mock_t = MagicMock(return_value=True)
        mock_f = MagicMock(return_value=False)
        mock_str = MagicMock(return_value='salt')
        mock_none = MagicMock(return_value=None)
        mock_dict = MagicMock(return_value={'salt': 'SALT'})
        mock_lst = MagicMock(return_value=['grain'])
        with patch.dict(mysql_query.__salt__, {'mysql.db_exists': mock_f}):
            with patch.object(mysql_query, '_get_mysql_error', mock_str):
                ret.update({'comment': 'salt', 'result': False})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

            with patch.object(mysql_query, '_get_mysql_error', mock_none):
                comt = ('Database {0} is not present'.format(name))
                ret.update({'comment': comt, 'result': None})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

        with patch.dict(
                mysql_query.__salt__, {
                    'mysql.db_exists': mock_t,
                    'grains.ls': mock_lst,
                    'grains.get': mock_dict,
                    'mysql.query': mock_str
                }):
            comt = ('No execution needed. Grain grain already set')
            ret.update({'comment': comt, 'result': True})
            self.assertDictEqual(
                mysql_query.run(name,
                                database,
                                query,
                                output='grain',
                                grain='grain',
                                overwrite=False), ret)

            with patch.dict(mysql_query.__opts__, {'test': True}):
                comt = ('Query would execute, storing result in grain: grain')
                ret.update({'comment': comt, 'result': None})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output='grain',
                                    grain='grain'), ret)

                comt = ('Query would execute, storing result'
                        ' in grain: grain:salt')
                ret.update({'comment': comt})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output='grain',
                                    grain='grain',
                                    key='salt'), ret)

                comt = ('Query would execute, storing result in file: salt')
                ret.update({'comment': comt})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output='salt',
                                    grain='grain'), ret)

                comt = ('Query would execute, not storing result')
                ret.update({'comment': comt})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

            comt = ('No execution needed. Grain grain:salt already set')
            ret.update({'comment': comt, 'result': True})
            self.assertDictEqual(
                mysql_query.run(name,
                                database,
                                query,
                                output='grain',
                                grain='grain',
                                key='salt',
                                overwrite=False), ret)

            comt = ("Error: output type 'grain' needs the grain parameter\n")
            ret.update({'comment': comt, 'result': False})
            self.assertDictEqual(
                mysql_query.run(name, database, query, output='grain'), ret)

            with patch.object(os.path, 'isfile', mock_t):
                comt = ('No execution needed. File salt already set')
                ret.update({'comment': comt, 'result': True})
                self.assertDictEqual(
                    mysql_query.run(name,
                                    database,
                                    query,
                                    output='salt',
                                    grain='grain',
                                    overwrite=False), ret)

            with patch.dict(mysql_query.__opts__, {'test': False}):
                ret.update({
                    'comment': 'salt',
                    'changes': {
                        'query': 'Executed'
                    }
                })
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)
Пример #4
0
    def test_run(self):
        '''
        Test to execute an arbitrary query on the specified database.
        '''
        name = 'query_id'
        database = 'my_database'
        query = "SELECT * FROM table;"

        ret = {'name': name,
               'result': True,
               'comment': '',
               'changes': {}}

        mock_t = MagicMock(return_value=True)
        mock_f = MagicMock(return_value=False)
        mock_str = MagicMock(return_value='salt')
        mock_none = MagicMock(return_value=None)
        mock_dict = MagicMock(return_value={'salt': 'SALT'})
        mock_lst = MagicMock(return_value=['grain'])
        with patch.dict(mysql_query.__salt__, {'mysql.db_exists': mock_f}):
            with patch.object(mysql_query, '_get_mysql_error', mock_str):
                ret.update({'comment': 'salt', 'result': False})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

            with patch.object(mysql_query, '_get_mysql_error', mock_none):
                comt = ('Database {0} is not present'.format(name))
                ret.update({'comment': comt, 'result': None})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

        with patch.dict(mysql_query.__salt__, {'mysql.db_exists': mock_t,
                                               'grains.ls': mock_lst,
                                               'grains.get': mock_dict,
                                               'mysql.query': mock_str}):
            comt = ('No execution needed. Grain grain already set')
            ret.update({'comment': comt, 'result': True})
            self.assertDictEqual(mysql_query.run(name, database, query,
                                                 output='grain', grain='grain',
                                                 overwrite=False), ret)

            with patch.dict(mysql_query.__opts__, {'test': True}):
                comt = ('Query would execute, storing result in grain: grain')
                ret.update({'comment': comt, 'result': None})
                self.assertDictEqual(mysql_query.run(name, database, query,
                                                     output='grain',
                                                     grain='grain'), ret)

                comt = ('Query would execute, storing result'
                        ' in grain: grain:salt')
                ret.update({'comment': comt})
                self.assertDictEqual(mysql_query.run(name, database, query,
                                                     output='grain',
                                                     grain='grain',
                                                     key='salt'), ret)

                comt = ('Query would execute, storing result in file: salt')
                ret.update({'comment': comt})
                self.assertDictEqual(mysql_query.run(name, database, query,
                                                     output='salt',
                                                     grain='grain'), ret)

                comt = ('Query would execute, not storing result')
                ret.update({'comment': comt})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)

            comt = ('No execution needed. Grain grain:salt already set')
            ret.update({'comment': comt, 'result': True})
            self.assertDictEqual(mysql_query.run(name, database, query,
                                                 output='grain', grain='grain',
                                                 key='salt', overwrite=False),
                                 ret)

            comt = ("Error: output type 'grain' needs the grain parameter\n")
            ret.update({'comment': comt, 'result': False})
            self.assertDictEqual(mysql_query.run(name, database, query,
                                                 output='grain'), ret)

            with patch.object(os.path, 'isfile', mock_t):
                comt = ('No execution needed. File salt already set')
                ret.update({'comment': comt, 'result': True})
                self.assertDictEqual(mysql_query.run(name, database, query,
                                                     output='salt',
                                                     grain='grain',
                                                     overwrite=False), ret)

            with patch.dict(mysql_query.__opts__, {'test': False}):
                ret.update({'comment': 'salt',
                            'changes': {'query': 'Executed'}})
                self.assertDictEqual(mysql_query.run(name, database, query),
                                     ret)