diff --git a/tests/Neo.UnitTests/SmartContract/Native/UT_RoleManagement.cs b/tests/Neo.UnitTests/SmartContract/Native/UT_RoleManagement.cs index dc52e9e41c..25ca7ee0d6 100644 --- a/tests/Neo.UnitTests/SmartContract/Native/UT_RoleManagement.cs +++ b/tests/Neo.UnitTests/SmartContract/Native/UT_RoleManagement.cs @@ -45,54 +45,6 @@ public void Clean() [TestMethod] public void TestSetAndGet() - { - var snapshot1 = _snapshot.CreateSnapshot(); - UInt160 committeeMultiSigAddr = NativeContract.NEO.GetCommitteeAddress(snapshot1); - ECPoint[] validators = NativeContract.NEO.ComputeNextBlockValidators(snapshot1, TestProtocolSettings.Default); - List notifications = new List(); - EventHandler ev = (o, e) => notifications.Add(e); - ApplicationEngine.Notify += ev; - var ret = NativeContract.RoleManagement.Call( - snapshot1, - new Nep17NativeContractExtensions.ManualWitness(committeeMultiSigAddr), - new Block { Header = new Header() }, - "designateAsRole", - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)Role.StateValidator) }, - new ContractParameter(ContractParameterType.Array) { Value = validators.Select(p => new ContractParameter(ContractParameterType.ByteArray) { Value = p.ToArray() }).ToList() } - ); - snapshot1.Commit(); - ApplicationEngine.Notify -= ev; - notifications.Count.Should().Be(1); - notifications[0].EventName.Should().Be("Designation"); - var snapshot2 = _snapshot.CreateSnapshot(); - ret = NativeContract.RoleManagement.Call( - snapshot2, - "getDesignatedByRole", - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)Role.StateValidator) }, - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger(1u) } - ); - ret.Should().BeOfType(); - (ret as VM.Types.Array).Count.Should().Be(7); - (ret as VM.Types.Array)[0].GetSpan().ToHexString().Should().Be(validators[0].ToArray().ToHexString()); - (ret as VM.Types.Array)[1].GetSpan().ToHexString().Should().Be(validators[1].ToArray().ToHexString()); - (ret as VM.Types.Array)[2].GetSpan().ToHexString().Should().Be(validators[2].ToArray().ToHexString()); - (ret as VM.Types.Array)[3].GetSpan().ToHexString().Should().Be(validators[3].ToArray().ToHexString()); - (ret as VM.Types.Array)[4].GetSpan().ToHexString().Should().Be(validators[4].ToArray().ToHexString()); - (ret as VM.Types.Array)[5].GetSpan().ToHexString().Should().Be(validators[5].ToArray().ToHexString()); - (ret as VM.Types.Array)[6].GetSpan().ToHexString().Should().Be(validators[6].ToArray().ToHexString()); - - ret = NativeContract.RoleManagement.Call( - snapshot2, - "getDesignatedByRole", - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)Role.StateValidator) }, - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger(0) } - ); - ret.Should().BeOfType(); - (ret as VM.Types.Array).Count.Should().Be(0); - } - - [TestMethod] - public void TestDesignateP2PNotary() { byte[] privateKey1 = new byte[32]; var rng1 = System.Security.Cryptography.RandomNumberGenerator.Create(); @@ -107,43 +59,47 @@ public void TestDesignateP2PNotary() publicKeys[1] = key2.PublicKey; publicKeys = publicKeys.OrderBy(p => p).ToArray(); - var snapshot1 = _snapshot.CreateSnapshot(); - UInt160 committeeMultiSigAddr = NativeContract.NEO.GetCommitteeAddress(snapshot1); - List notifications = new List(); - EventHandler ev = (o, e) => notifications.Add(e); - ApplicationEngine.Notify += ev; - var ret = NativeContract.RoleManagement.Call( - snapshot1, - new Nep17NativeContractExtensions.ManualWitness(committeeMultiSigAddr), - new Block { Header = new Header() }, - "designateAsRole", - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)Role.P2PNotary) }, - new ContractParameter(ContractParameterType.Array) { Value = publicKeys.Select(p => new ContractParameter(ContractParameterType.ByteArray) { Value = p.ToArray() }).ToList() } - ); - snapshot1.Commit(); - ApplicationEngine.Notify -= ev; - notifications.Count.Should().Be(1); - notifications[0].EventName.Should().Be("Designation"); - var snapshot2 = _snapshot.CreateSnapshot(); - ret = NativeContract.RoleManagement.Call( - snapshot2, - "getDesignatedByRole", - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)Role.P2PNotary) }, - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger(1u) } - ); - ret.Should().BeOfType(); - (ret as VM.Types.Array).Count.Should().Be(2); - (ret as VM.Types.Array)[0].GetSpan().ToHexString().Should().Be(publicKeys[0].ToArray().ToHexString()); - (ret as VM.Types.Array)[1].GetSpan().ToHexString().Should().Be(publicKeys[1].ToArray().ToHexString()); + List roles = new List() { Role.StateValidator, Role.Oracle, Role.NeoFSAlphabetNode, Role.P2PNotary }; + foreach (var role in roles) + { + var snapshot1 = _snapshot.CreateSnapshot(); + UInt160 committeeMultiSigAddr = NativeContract.NEO.GetCommitteeAddress(snapshot1); + List notifications = new List(); + EventHandler ev = (o, e) => notifications.Add(e); + ApplicationEngine.Notify += ev; + var ret = NativeContract.RoleManagement.Call( + snapshot1, + new Nep17NativeContractExtensions.ManualWitness(committeeMultiSigAddr), + new Block { Header = new Header() }, + "designateAsRole", + new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)role) }, + new ContractParameter(ContractParameterType.Array) { Value = publicKeys.Select(p => new ContractParameter(ContractParameterType.ByteArray) { Value = p.ToArray() }).ToList() } + ); + snapshot1.Commit(); + ApplicationEngine.Notify -= ev; + notifications.Count.Should().Be(1); + notifications[0].EventName.Should().Be("Designation"); + var snapshot2 = _snapshot.CreateSnapshot(); + ret = NativeContract.RoleManagement.Call( + snapshot2, + "getDesignatedByRole", + new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)role) }, + new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger(1u) } + ); + ret.Should().BeOfType(); + (ret as VM.Types.Array).Count.Should().Be(2); + (ret as VM.Types.Array)[0].GetSpan().ToHexString().Should().Be(publicKeys[0].ToArray().ToHexString()); + (ret as VM.Types.Array)[1].GetSpan().ToHexString().Should().Be(publicKeys[1].ToArray().ToHexString()); - ret = NativeContract.RoleManagement.Call( - snapshot2, - "getDesignatedByRole", - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)Role.P2PNotary) }, - new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger(0) } - ); - ret.Should().BeOfType(); - (ret as VM.Types.Array).Count.Should().Be(0); + ret = NativeContract.RoleManagement.Call( + snapshot2, + "getDesignatedByRole", + new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger((int)role) }, + new ContractParameter(ContractParameterType.Integer) { Value = new BigInteger(0) } + ); + ret.Should().BeOfType(); + (ret as VM.Types.Array).Count.Should().Be(0); + } } private void ApplicationEngine_Notify(object sender, NotifyEventArgs e)