Ejemplo n.º 1
0
        public static MockEnvironment Create(ITestOutputHelper output, Action<LumberjackClientSettings> settingsModifier = null, bool socketPending = false)
        {
            var clientSettings = new LumberjackClientSettings
            {
                Host = "localhost",
                Port = 5000,
                SendBufferSize = 1024,
                ReceiveBufferSize = 1024,
            };
            settingsModifier?.Invoke(clientSettings);

            var env = new MockEnvironment();
            env.Client = new LumberjackClient(clientSettings);
            env.Socket = new MockSocket();
            if (socketPending)
            {
                env.Socket.ConnectPending = true;
                env.Socket.SendPending = true;
                env.Socket.ReceivePending = true;
            }
            env.Server = env.Socket.Server;
            env.Server.Output = output;
            env.Client._socketFactory = () => env.Socket;
            env.Client._writeTrace = m => output?.WriteLine(m);
            return env;
        }
        public void Test_SendFullPolicy_Wait(LumberjackClientSettings.SendConfirmPolicy sendConfirm)
        {
            var env = MockEnvironment.Create(_output,
                s =>
                {
                    s.SendFull = LumberjackClientSettings.SendFullPolicy.Wait;
                    s.SendConfirm = sendConfirm;
                    s.SendBufferSize = 64;
                },
                true);

            var state = 0;
            ThreadPool.QueueUserWorkItem(o =>
            {
                while (state == 0)
                {
                    Thread.Sleep(0);
                    env.Socket.WaitForPendings(true);
                }
                state = 2;
            });

            var keyValues = new List<KeyValuePair<string, string>>();
            for (var i = 0; i < 10; i++)
            {
                var kv = new KeyValuePair<string, string>("Key" + i, "Value" + i);
                keyValues.Add(kv);
                env.Client.Send(kv);
            }

            state = 1;
            while (state == 1)
                Thread.Sleep(0);

            Assert.Equal(10, env.Server.KeyValues.Count);
            Assert.Equal(keyValues, env.Server.KeyValues);
        }
        public void Test_Close_WaitForCompletingSend_And_Completed(LumberjackClientSettings.SendConfirmPolicy sendConfirm)
        {
            var env = MockEnvironment.Create(_output,
                s =>
                {
                    s.SendConfirm = sendConfirm;
                    s.CloseTimeout = TimeSpan.FromSeconds(2);
                },
                true);

            env.Client.Send(new KeyValuePair<string, string>("Key0", "Value0"));
            env.Client.Send(new KeyValuePair<string, string>("Key1", "Value1"));

            var state = 0;
            ThreadPool.QueueUserWorkItem(o =>
            {
                while (state == 0)
                {
                    Thread.Sleep(0);
                    env.Socket.WaitForPendings(true);
                }
                state = 2;
            });

            env.Client.Close();

            state = 1;
            while (state == 1)
                Thread.Sleep(0);

            Assert.Equal(2, env.Server.KeyValues.Count);
        }