# Path: tests/helpers.py
# def eq_(a, b):
# def skip_test(reason='No reason given to skip_test'):
# def mark_slow(f):
#     def __str__(self):
# def mssqlconn(conn_properties=None):
# def pymssqlconn(**kwargs):
# def get_app_lock():
# def release_app_lock():
# def drop_table(conn, tname):
# def clear_table(conn, tname):
#     def table_sql(cls):
#     def newconn(cls):
#     def setup_class(cls):
#     def setUp(self):
#     def row_count(self):
#     def execute(self, sql, params=None):
#     def __init__(self, conn, tname, *cols):
#     def table_sql(self):
#     def drop(self):
#     def execute(self, sql):
#     def create(self):
#     def clear(self):
#     def count(self):
#     def execute(self, sql):
#     def executemany(self, sql, params_seq):
#     def setup_class(cls):
#     def setup_method(self, method):
#     def test_description_not_used(self):
#     def test_description_after_insert(self):
#     def test_description_after_select(self):
#     def test_sticky_description(self):
#     def test_fetchone(self):
#     def test_insert_rowcount(self):
#     def test_delete_rowcount(self):
#     def test_update_rowcount(self):
#     def test_select_rowcount(self):
#     def test_fetchone_rowcount(self):
#     def test_fetchmany_rowcount(self):
#     def test_as_dict(self):
#     def test_as_dict_no_column_name(self):
#     def test_as_dict_no_column_name_2(self):
#     def test_fetchmany(self):
#     def test_execute_many(self):
# def clear_db():
#     def __init__(self, name, args, body, mssql=None):
#     def create(self, mssql=None):
#     def execute(self, mssql=None, args=()):
#     def drop(self, mssql=None):
#     def __enter__(self):
#     def __exit__(self, type, value, tb):
# def get_sql_server_version(mssql_connection):
# class Config(object):
# class PyTableBase(object):
# class TableManager(object):
# class DBAPIBase(object):
# class CursorBase(DBAPIBase):
# class StoredProc(object):


import datetime
import pytest
import unittest
import pymssql
import gevent.socket
from .helpers import mssqlconn, pymssqlconn, mark_slow, mssql_server_required
            'elapsed_time < 20 seconds')

    @mark_slow
    def test_gevent_socket_pymssql_callproc_wait_read_concurrency(self):
        def wait_callback(read_fileno):
            gevent.socket.wait_read(read_fileno)

        pymssql.set_wait_callback(wait_callback)

        with pymssqlconn() as conn:
            cur = conn.cursor()
            proc_name = 'my_proc'
            cur.execute("IF OBJECT_ID('%s', 'P') IS NOT NULL DROP PROCEDURE %s" % (proc_name, proc_name))
            cur.execute("""
            CREATE PROCEDURE %s AS
            BEGIN
                SET NOCOUNT ON
                WAITFOR DELAY '00:00:05'  -- sleep for 5 seconds
                SELECT CURRENT_TIMESTAMP
            END
            """ % (proc_name,))
            conn.commit()

        elapsed_time = self._run_all_greenlets(
            self.greenlet_run_pymssql_callproc)

        self.assertTrue(
            elapsed_time < datetime.timedelta(seconds=20),
            'elapsed_time < 20 seconds')


# Path: tests/helpers.py
# def eq_(a, b):
# def skip_test(reason='No reason given to skip_test'):
# def mark_slow(f):
#     def __str__(self):
# def mssqlconn(conn_properties=None):
# def pymssqlconn(**kwargs):
# def get_app_lock():
# def release_app_lock():
# def drop_table(conn, tname):
# def clear_table(conn, tname):
#     def table_sql(cls):
#     def newconn(cls):
#     def setup_class(cls):
#     def setUp(self):
#     def row_count(self):
#     def execute(self, sql, params=None):
#     def __init__(self, conn, tname, *cols):
#     def table_sql(self):
#     def drop(self):
#     def execute(self, sql):
#     def create(self):
#     def clear(self):
#     def count(self):
#     def execute(self, sql):
#     def executemany(self, sql, params_seq):
#     def setup_class(cls):
#     def setup_method(self, method):
#     def test_description_not_used(self):
#     def test_description_after_insert(self):
#     def test_description_after_select(self):
#     def test_sticky_description(self):
#     def test_fetchone(self):
#     def test_insert_rowcount(self):
#     def test_delete_rowcount(self):
#     def test_update_rowcount(self):
#     def test_select_rowcount(self):
#     def test_fetchone_rowcount(self):
#     def test_fetchmany_rowcount(self):
#     def test_as_dict(self):
#     def test_as_dict_no_column_name(self):
#     def test_as_dict_no_column_name_2(self):
#     def test_fetchmany(self):
#     def test_execute_many(self):
# def clear_db():
#     def __init__(self, name, args, body, mssql=None):
#     def create(self, mssql=None):
#     def execute(self, mssql=None, args=()):
#     def drop(self, mssql=None):
#     def __enter__(self):
#     def __exit__(self, type, value, tb):
# def get_sql_server_version(mssql_connection):
# class Config(object):
# class PyTableBase(object):
# class TableManager(object):
# class DBAPIBase(object):
# class CursorBase(DBAPIBase):
# class StoredProc(object):


# Path: tests/test_green.py
import datetime
import pytest
import unittest
import pymssql
import gevent.socket
from .helpers import mssqlconn, pymssqlconn, mark_slow, mssql_server_required

            'elapsed_time < 20 seconds')

    @mark_slow
    def test_gevent_socket_pymssql_callproc_wait_read_concurrency(self):
        def wait_callback(read_fileno):
            gevent.socket.wait_read(read_fileno)

        pymssql.set_wait_callback(wait_callback)

        with pymssqlconn() as conn:
            cur = conn.cursor()
            proc_name = 'my_proc'
            cur.execute("IF OBJECT_ID('%s', 'P') IS NOT NULL DROP PROCEDURE %s" % (proc_name, proc_name))
            cur.execute("""
            CREATE PROCEDURE %s AS
            BEGIN
                SET NOCOUNT ON
                WAITFOR DELAY '00:00:05'  -- sleep for 5 seconds
                SELECT CURRENT_TIMESTAMP
            END
            """ % (proc_name,))
            conn.commit()

        elapsed_time = self._run_all_greenlets(
            self.greenlet_run_pymssql_callproc)

        self.assertTrue(
            elapsed_time < datetime.timedelta(seconds=20),
            'elapsed_time < 20 seconds')


    @mark_slow