コード例 #1
0
        public async Task ServerStartTest()
        {
            var server = new TcpSocketServer();

            // 초기 상태 테스트.
            Assert.AreEqual(server.state, ServerState.None);

            // 초기화 없이 서버를 시작 할 때 테스트
            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() =>
            {
                await server.StartAsync();
            });

            // 실패 했을 경우 상태가 변경되면 안됨.
            Assert.AreEqual(server.state, ServerState.None);

            // NULL 처리 테스트
            Assert.ThrowsException <ArgumentNullException>(() =>
            {
                server.SetLoggerFactory(null);
            });

            // NULL 처리 테스트
            Assert.ThrowsException <ArgumentNullException>(() =>
            {
                server.SetMsgFilterFactory(null);
            });

            // NULL 처리 테스트
            Assert.ThrowsException <ArgumentNullException>(() =>
            {
                server.SetSessionConfigrator(null);
            });

            //정상 상황 테스트.
            var freeLocalPort = TestExtensions.GetFreePort("127.0.0.1");
            var startTask     = server
                                .AddListener(new Server.Listeners.ListenerConfig("127.0.0.1", freeLocalPort, 1000))
                                .SetLoggerFactory(new ConsoleLoggerFactory())
                                .SetMsgFilterFactory(new DefaultMsgFilterFactory <StringMsgFilter>())
                                .SetSessionConfigrator((ssn) =>
            {
                //ssn.SetSessionBehavior
            })
                                .StartAsync().ConfigureAwait(false);

            // 시작중인 상태 체크 -> Async 지만 바로 시작할 수도 있으니 Running 까지 Pass 로 처리한다.
            Assert.IsTrue(server.state == ServerState.Starting || server.state == ServerState.Running);

            await startTask;

            // 서버 진행 중..
            Assert.AreEqual(server.state, ServerState.Running);

            var stopTask = server.StopAsync();

            // 종료중인 상태 체크 -> Async 지만 바로 종료될 수 있으니 Stopped 까지 Pass 로 처리한다.
            Assert.IsTrue(server.state == ServerState.Stopping || server.state == ServerState.Stopped);

            await stopTask;

            // 종료 상태 체크.
            Assert.AreEqual(server.state, ServerState.Stopped);

            // 서버는 재시작되면 안됨..
            await Assert.ThrowsExceptionAsync <InvalidOperationException>(async() =>
            {
                await server.StartAsync();
            });
        }