import logging

from salt.transport import MessageClientPool
from tests.support.unit import TestCase

log = logging.getLogger(__name__)


class MessageClientPoolTest(TestCase):
    class MockClass:
        def __init__(self, *args, **kwargs):
            self.args = args
            self.kwargs = kwargs

    def test_init(self):
        opts = {"sock_pool_size": 10}
        args = (0,)
        kwargs = {"kwarg": 1}
        message_client_pool = MessageClientPool(
            self.MockClass, opts, args=args, kwargs=kwargs
        )
        self.assertEqual(
            opts["sock_pool_size"], len(message_client_pool.message_clients)
        )
        for message_client in message_client_pool.message_clients:
            self.assertEqual(message_client.args, args)
            self.assertEqual(message_client.kwargs, kwargs)

    def test_init_without_config(self):
        opts = {}
        args = (0,)
        kwargs = {"kwarg": 1}
        message_client_pool = MessageClientPool(
            self.MockClass, opts, args=args, kwargs=kwargs
        )
        # The size of pool is set as 1 by the MessageClientPool init method.
        self.assertEqual(1, len(message_client_pool.message_clients))
        for message_client in message_client_pool.message_clients:
            self.assertEqual(message_client.args, args)
            self.assertEqual(message_client.kwargs, kwargs)

    def test_init_less_than_one(self):
        opts = {"sock_pool_size": -1}
        args = (0,)
        kwargs = {"kwarg": 1}
        message_client_pool = MessageClientPool(
            self.MockClass, opts, args=args, kwargs=kwargs
        )
        # The size of pool is set as 1 by the MessageClientPool init method.
        self.assertEqual(1, len(message_client_pool.message_clients))
        for message_client in message_client_pool.message_clients:
            self.assertEqual(message_client.args, args)
            self.assertEqual(message_client.kwargs, kwargs)
