using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using Xunit;
using Xunit.Extensions;
using Xunit.Abstractions;
using Xunit.Sdk;
using StackExchange;
using StackExchange.Redis;

using RedisStuy;
using Moq;

namespace RedisStudyTest
{
    public class RedisHelperTest
    {
        [Fact]
        public void ConnectionMultiplexer_Singleton_Test()
        {
            var connect = RedisHelper.GetConnectionMultiplexer();
            var connect2 = RedisHelper.GetConnectionMultiplexer();

            Assert.Same(connect, connect2);
        }

        [Fact]
        public void ConnectionMultiplexerTest()
        {
            var connectionMultiplexer = RedisHelper.GetConnectionMultiplexer();

            Assert.NotNull(connectionMultiplexer);

            //验证配置项
            var options = ConfigurationOptions.Parse(connectionMultiplexer.Configuration);
            Assert.Equal(200, options.KeepAlive);
            Assert.Equal(1, options.DefaultDatabase);
            Assert.True(options.AllowAdmin);
            Assert.Contains(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6379), options.EndPoints);
        }

        [Fact]
        public void GetRedisDatabaseTest()
        {
           var db=  RedisHelper.GetRedisDatabase();

            Assert.True(db != null);
            Assert.Contains("127.0.0.1", db.Multiplexer.Configuration);
            Assert.Equal(1, db.Database);
        }

        [Fact]
        public void GetRedisDatabaseTest2()
        {
            var db = RedisHelper.GetRedisDatabase(-1);
            Assert.Equal(0, db.Database);

            db = RedisHelper.GetRedisDatabase(16);
            Assert.Equal(0, db.Database);

            db = RedisHelper.GetRedisDatabase();
            Assert.Equal(1, db.Database);

            db = RedisHelper.GetRedisDatabase(1);
            Assert.Equal(1, db.Database);
        }

        [Fact]
        public void GetServerTest()
        {
            var redisServer = RedisHelper.GetDefaultRedisServer();

            Assert.NotNull(redisServer);
        }

        [Fact]
        public void GetAllServerTest()
        {
            var redisServer = RedisHelper.GetAllRedisServer();

            Assert.NotNull(redisServer);
            Assert.Single(redisServer);
        }
    }
}