import copy
import grpc
import logging
import pytest
import os
import multiprocessing
from subprocess import Popen, DEVNULL
from time import sleep
from l3_distributedattackdetector.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
from l3_distributedattackdetector.client.l3_distributedattackdetectorClient import l3_distributedattackdetectorClient
from l3_distributedattackdetector.service.l3_distributedattackdetectorService import l3_distributedattackdetectorService

port = 10000 + GRPC_SERVICE_PORT  # avoid privileged ports

LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)


@pytest.fixture(scope='session')
def l3_distributedattackdetector_service():
    _service = l3_distributedattackdetectorService(
        port=port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD)
    _service.start()
    yield _service
    _service.stop()


@pytest.fixture(scope='session')
def l3_distributedattackdetector_client(l3_distributedattackdetector_service):
    _client = l3_distributedattackdetectorClient(address='127.0.0.1', port=port)
    yield _client
    _client.close()


def test_demo():
    print('Demo Test')
    pass

def test_tstat():
    print('Starting DAD')
    _service = l3_distributedattackdetectorService(
        port=port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD)
    p1 = multiprocessing.Process(target=_service.start, args=())
    p1.start()

    here = os.path.dirname(os.path.abspath(__file__))
    generator_filename = os.path.join(here, 'data_generator.py')
    p2 = Popen(["python3",generator_filename], stdout=DEVNULL)
    print('Started')
    sleep(15)
    p1.terminate()
    os.system("kill %s" % (p2.pid, ))
    print('Ended Successfully')
