Skip to content

Commit

Permalink
Merge pull request #1465 from AElfProject/case/unit-cases
Browse files Browse the repository at this point in the history
Improve unit test cases
  • Loading branch information
loning authored Mar 30, 2019
2 parents 17e19af + 5923682 commit b58ed36
Show file tree
Hide file tree
Showing 14 changed files with 377 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,7 @@
<RootNamespace>AElf.Contracts.MultiToken</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\AElf.Contracts.Consensus.DPoS\AElf.Contracts.Consensus.DPoS.csproj" />
<ProjectReference Include="..\AElf.Contracts.Dividend\AElf.Contracts.Dividend.csproj" />
<ProjectReference Include="..\AElf.Contracts.MultiToken\AElf.Contracts.MultiToken.csproj" />
<ProjectReference Include="..\AElf.Contracts.TestBase\AElf.Contracts.TestBase.csproj" />
<ProjectReference Include="..\AElf.Cryptography\AElf.Cryptography.csproj" />
<ProjectReference Include="..\AElf.Kernel.Consensus\AElf.Kernel.Consensus.csproj" />
<ProjectReference Include="..\AElf.Kernel.Token\AElf.Kernel.Token.csproj" />
<ProjectReference Include="..\AElf.Kernel.Types\AElf.Kernel.Types.csproj" />
<ProjectReference Include="..\AElf.Kernel\AElf.Kernel.csproj" />
<ProjectReference Include="..\AElf.Types\AElf.Types.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="2.5.1" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AElf.Common;
using AElf.Contracts.Consensus.DPoS;
using AElf.Contracts.Dividend;
using AElf.Contracts.MultiToken;
using AElf.Contracts.MultiToken.Messages;
using AElf.Contracts.TestBase;
using AElf.Cryptography.ECDSA;
using AElf.Kernel;
using AElf.Kernel.SmartContract;
using AElf.Kernel.Token;
using AElf.Types.CSharp;
using Google.Protobuf;

namespace AElf.Contracts.MultiToken
Expand All @@ -25,12 +16,6 @@ public static Address GetTokenContractAddress(
return contractTester.GetContractAddress(TokenSmartContractAddressNameProvider.Name);
}

public static Address GetDividendsContractAddress(
this ContractTester<MultiTokenContractTestAElfModule> contractTester)
{
return contractTester.GetContractAddress(DividendsSmartContractAddressNameProvider.Name);
}

public static async Task TransferTokenAsync(this ContractTester<MultiTokenContractTestAElfModule> starter, Address to,
long amount)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

namespace AElf.Contracts.MultiToken
{
public class LockTest
public class LockTest : MultiTokenContractTestBase
{
private ContractTester<MultiTokenContractTestAElfModule> Starter { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,21 @@
using System.IO;
using System.Threading.Tasks;
using AElf.Common;
using AElf.Contracts.MultiToken;
using AElf.Contracts.MultiToken.Messages;
using AElf.Contracts.TestBase;
using AElf.Cryptography;
using AElf.Cryptography.ECDSA;
using AElf.Kernel;
using AElf.Kernel.KernelAccount;
using AElf.Kernel.SmartContract;
using AElf.Kernel.Token;
using AElf.Types.CSharp;
using Google.Protobuf;
using Xunit;
using Shouldly;
using Volo.Abp.Threading;

namespace AElf.Contracts.MultiToken
{
public sealed class MultiTokenContractTest : ContractTestBase<MultiTokenContractTestAElfModule>
public sealed class MultiTokenContractTest : MultiTokenContractTestBase
{
private readonly ECKeyPair _spenderKeyPair;
private Address BasicZeroContractAddress { get; set; }
Expand Down Expand Up @@ -524,5 +522,25 @@ public async Task Set_And_Get_Method_Fee()
resultGet.Fee.ShouldBe(10L);
}
}

[Fact]
public async Task Set_FeePoolAddress()
{
await Initialize_TokenContract();

var transactionResult = await Tester.ExecuteContractWithMiningAsync(TokenContractAddress,
nameof(TokenContract.SetFeePoolAddress),
DividendsSmartContractAddressNameProvider.Name);

transactionResult.Status.ShouldBe(TransactionResultStatus.Mined);

//set again
transactionResult = await Tester.ExecuteContractWithMiningAsync(TokenContractAddress,
nameof(TokenContract.SetFeePoolAddress),
DividendsSmartContractAddressNameProvider.Name);

transactionResult.Status.ShouldBe(TransactionResultStatus.Failed);
transactionResult.Error.Contains("Fee pool address already set.").ShouldBeTrue();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="2.5.1" />
<PackageReference Include="Grpc.Core.Testing" Version="1.19.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
<PackageReference Include="Shouldly" Version="3.0.2" />
<PackageReference Include="xunit" Version="2.4.1" />
Expand Down
43 changes: 42 additions & 1 deletion AElf.CrossChain.Grpc.Tests/GrpcCrossChainServerTestModule.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using AElf.Common;
using AElf.Kernel;
using AElf.Kernel.Blockchain.Application;
using Google.Protobuf;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Volo.Abp.Modularity;

namespace AElf.CrossChain.Grpc
Expand All @@ -7,12 +15,45 @@ public class GrpcCrossChainServerTestModule : GrpcCrossChainTestModule
public override void ConfigureServices(ServiceConfigurationContext context)
{
base.ConfigureServices(context);

Configure<GrpcCrossChainConfigOption>(option =>
{
option.LocalClient = false;
option.LocalServer = true;
});
Configure<CrossChainConfigOption>(option=>
{
option.ParentChainId = ChainHelpers.ConvertBase58ToChainId("AELF");
option.ExtraDataSymbols = new List<string>();
});

var services = context.Services;
services.AddTransient(o =>
{
var mockService = new Mock<IBlockchainService>();
mockService.Setup(m=>m.GetChainAsync())
.Returns(Task.FromResult<Chain>(new Chain
{
LastIrreversibleBlockHeight = 10
}));
mockService.Setup(m=>m.GetBlockHashByHeightAsync(It.IsAny<Chain>(), It.IsAny<long>(), It.IsAny<Hash>()))
.Returns(Task.FromResult(Hash.Generate()));
mockService.Setup(m=>m.GetBlockByHashAsync(It.IsAny<Hash>()))
.Returns(Task.FromResult(new Block
{
Height = 10,
Header = new BlockHeader
{
ChainId = 0,
BlockExtraDatas = {
ByteString.CopyFrom(Hash.Generate().ToByteArray()),
ByteString.CopyFrom(Hash.Generate().ToByteArray())
}
}
}));

return mockService.Object;
});
services.AddSingleton<CrossChainRpc.CrossChainRpcBase, CrossChainGrpcServerBase>();
}
}
}
72 changes: 72 additions & 0 deletions AElf.CrossChain.Grpc.Tests/GrpcServerTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Grpc.Core;
using Grpc.Core.Testing;
using Grpc.Core.Utils;
using Moq;
using Shouldly;
using Xunit;

namespace AElf.CrossChain.Grpc
{
public class GrpcServerTests : GrpcCrossChainServerTestBase
{
private CrossChainRpc.CrossChainRpcBase CrossChainGrpcServer;

public GrpcServerTests()
{
CrossChainGrpcServer = GetRequiredService<CrossChainRpc.CrossChainRpcBase>();
}

[Fact]
public async Task RequestIndexingParentChain()
{
var requestData = new RequestCrossChainBlockData
{
FromChainId = 0,
NextHeight = 15
};

IServerStreamWriter<ResponseParentChainBlockData> responseStream = Mock.Of<IServerStreamWriter<ResponseParentChainBlockData>>();
var context = BuildServerCallContext();
await CrossChainGrpcServer.RequestIndexingParentChain(requestData, responseStream, context);
}

[Fact]
public async Task RequestIndexingSideChain()
{
var requestData = new RequestCrossChainBlockData
{
FromChainId = 0,
NextHeight = 10
};

IServerStreamWriter<ResponseSideChainBlockData> responseStream = Mock.Of<IServerStreamWriter<ResponseSideChainBlockData>>();
var context = BuildServerCallContext();
await CrossChainGrpcServer.RequestIndexingSideChain(requestData, responseStream, context);
}

[Fact]
public async Task CrossChainIndexingShake()
{
var request = new IndexingHandShake
{
ListeningPort = 2000,
ChainId = 0
};
var context = BuildServerCallContext();
var indexingHandShakeReply = await CrossChainGrpcServer.CrossChainIndexingShake(request, context);

indexingHandShakeReply.ShouldNotBeNull();
indexingHandShakeReply.Result.ShouldBeTrue();
}

private ServerCallContext BuildServerCallContext(Metadata metadata = null)
{
var meta = metadata ?? new Metadata();
return TestServerCallContext.Create("mock", null, DateTime.UtcNow.AddHours(1), meta, CancellationToken.None,
"ipv4:127.0.0.1:2000", null, null, m => TaskUtils.CompletedTask, () => new WriteOptions(), writeOptions => { });
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AElf.Core\AElf.Core.csproj" />
<ProjectReference Include="..\AElf.Kernel.Consensus\AElf.Kernel.Consensus.csproj" />
<ProjectReference Include="..\AElf.Kernel.TestBase\AElf.Kernel.TestBase.csproj" />
</ItemGroup>

Expand Down
69 changes: 69 additions & 0 deletions AElf.Kernel.Consensus.Tests/ConsensusServiceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
using System.Linq;
using System.Threading.Tasks;
using AElf.Common;
using AElf.Consensus.DPoS;
using AElf.Kernel.Consensus.Application;
using AElf.Kernel.Consensus.Infrastructure;
using Google.Protobuf;
using Shouldly;
using Xunit;

namespace AElf.Kernel.Consensus
{
public class ConsensusServiceTests : ConsensusTestBase
{
private IConsensusService _consensusService;
private ConsensusControlInformation _consensusControlInformation;
public ConsensusServiceTests()
{
_consensusService = GetRequiredService<IConsensusService>();
_consensusControlInformation = GetRequiredService<ConsensusControlInformation>();
}

[Fact]
public async Task ValidateConsensusBeforeExecutionAsync()
{
var preHash = Hash.Generate();
var blockHeight = 100;
var consensusExtraData = ByteString.CopyFromUtf8("test data").ToByteArray();
var result = await _consensusService.ValidateConsensusBeforeExecutionAsync(preHash, blockHeight, consensusExtraData);

result.ShouldBeTrue();
}

[Fact]
public async Task ValidateConsensusAfterExecutionAsync()
{
var preHash = Hash.Generate();
var blockHeight = 100;
var consensusExtraData = ByteString.CopyFromUtf8("test data").ToByteArray();
var result = await _consensusService.ValidateConsensusAfterExecutionAsync(preHash, blockHeight, consensusExtraData);

result.ShouldBeTrue();
}

[Fact]
public async Task GetNewConsensusInformationAsync()
{
var bytes = await _consensusService.GetNewConsensusInformationAsync();
var dposTriggerInformation = DPoSTriggerInformation.Parser.ParseFrom(bytes);

dposTriggerInformation.MiningInterval.ShouldBe(4000);
dposTriggerInformation.IsBootMiner.ShouldBeTrue();
}

[Fact]
public async Task GenerateConsensusTransactionsAsync()
{
var transactions = await _consensusService.GenerateConsensusTransactionsAsync();

transactions.ShouldNotBeNull();
transactions.Count().ShouldBe(3);

transactions.Select(t =>t.RefBlockNumber).ShouldAllBe(x => x == 100);

var prefix = ByteString.CopyFrom(Hash.Empty.Take(4).ToArray());
transactions.Select(t =>t.RefBlockPrefix).ShouldAllBe( p => p == prefix);
}
}
}
Loading

0 comments on commit b58ed36

Please sign in to comment.