所有分支的提交所有分支的提交都要跑test都要跑test
大石头 authored at 2022-03-29 23:35:41
4.15 KiB
NewLife.RocketMQ
using System;
using System.ComponentModel;
using NewLife.RocketMQ;
using Xunit;

namespace XUnitTestRocketMQ;

/// <summary>BrokerInfo代理信息测试</summary>
public class BrokerInfoTests
{
    #region 属性
    [Fact]
    [DisplayName("BrokerInfo_默认值")]
    public void BrokerInfo_Defaults()
    {
        var bi = new BrokerInfo();

        Assert.Null(bi.Name);
        Assert.Null(bi.Cluster);
        Assert.Null(bi.Addresses);
        Assert.Null(bi.MasterAddress);
        Assert.Null(bi.SlaveAddresses);
        Assert.False(bi.IsMaster);
    }

    [Fact]
    [DisplayName("BrokerInfo_设置所有属性")]
    public void BrokerInfo_SetAllProperties()
    {
        var bi = new BrokerInfo
        {
            Name = "broker-a",
            Cluster = "DefaultCluster",
            Addresses = ["10.0.0.1:10911", "10.0.0.2:10911"],
            MasterAddress = "10.0.0.1:10911",
            SlaveAddresses = ["10.0.0.2:10911"],
            Permission = Permissions.Read | Permissions.Write,
            ReadQueueNums = 4,
            WriteQueueNums = 4,
            TopicSynFlag = 0,
            IsMaster = true,
        };

        Assert.Equal("broker-a", bi.Name);
        Assert.Equal("DefaultCluster", bi.Cluster);
        Assert.Equal(2, bi.Addresses.Length);
        Assert.Equal("10.0.0.1:10911", bi.MasterAddress);
        Assert.Single(bi.SlaveAddresses);
        Assert.True(bi.IsMaster);
        Assert.Equal(4, bi.ReadQueueNums);
        Assert.Equal(4, bi.WriteQueueNums);
    }

    [Fact]
    [DisplayName("BrokerInfo_无Slave地址")]
    public void BrokerInfo_NoSlaves()
    {
        var bi = new BrokerInfo
        {
            Addresses = ["10.0.0.1:10911"],
            MasterAddress = "10.0.0.1:10911",
            SlaveAddresses = [],
        };

        Assert.Empty(bi.SlaveAddresses);
    }

    [Fact]
    [DisplayName("BrokerInfo_IsMaster标志")]
    public void BrokerInfo_IsMasterFlag()
    {
        var bi1 = new BrokerInfo { IsMaster = true };
        var bi2 = new BrokerInfo { IsMaster = false };

        Assert.True(bi1.IsMaster);
        Assert.False(bi2.IsMaster);
    }
    #endregion

    #region 相等比较
    [Fact]
    [DisplayName("BrokerInfo_相同属性相等")]
    public void BrokerInfo_SameProperties_Equal()
    {
        var bi1 = new BrokerInfo { Name = "broker-a", Addresses = ["10.0.0.1:10911"], ReadQueueNums = 4, WriteQueueNums = 4 };
        var bi2 = new BrokerInfo { Name = "broker-a", Addresses = ["10.0.0.1:10911"], ReadQueueNums = 4, WriteQueueNums = 4 };

        Assert.True(bi1.Equals(bi2));
    }

    [Fact]
    [DisplayName("BrokerInfo_不同Name不相等")]
    public void BrokerInfo_DifferentName_NotEqual()
    {
        var bi1 = new BrokerInfo { Name = "broker-a", Addresses = ["10.0.0.1:10911"] };
        var bi2 = new BrokerInfo { Name = "broker-b", Addresses = ["10.0.0.1:10911"] };

        Assert.False(bi1.Equals(bi2));
    }

    [Fact]
    [DisplayName("BrokerInfo_与非BrokerInfo不相等")]
    public void BrokerInfo_NonBrokerInfo_NotEqual()
    {
        var bi = new BrokerInfo { Name = "broker-a" };

        Assert.False(bi.Equals("broker-a"));
        Assert.False(bi.Equals(null));
    }

    [Fact]
    [DisplayName("BrokerInfo_相同属性哈希相同")]
    public void BrokerInfo_SameProperties_SameHash()
    {
        var bi1 = new BrokerInfo { Name = "broker-a", Addresses = ["10.0.0.1:10911"], ReadQueueNums = 4, WriteQueueNums = 4 };
        var bi2 = new BrokerInfo { Name = "broker-a", Addresses = ["10.0.0.1:10911"], ReadQueueNums = 4, WriteQueueNums = 4 };

        // 由于 Addresses 是不同的数组实例,GetHashCode 可能不相等
        // 只验证各自的哈希值是稳定的
        Assert.Equal(bi1.GetHashCode(), bi1.GetHashCode());
        Assert.Equal(bi2.GetHashCode(), bi2.GetHashCode());
    }

    [Fact]
    [DisplayName("Permissions_读写标记")]
    public void Permissions_ReadWriteFlags()
    {
        Assert.Equal(2, (Int32)Permissions.Write);
        Assert.Equal(4, (Int32)Permissions.Read);

        var rw = Permissions.Read | Permissions.Write;
        Assert.True(rw.HasFlag(Permissions.Read));
        Assert.True(rw.HasFlag(Permissions.Write));
    }
    #endregion
}