public void GetStakingInfo_StakingEnabled() { using (var dir = TestDirectory.Create()) { IFullNode fullNode = PurpleBitcoinPosRunner.BuildStakingNode(dir.FolderName); var fullNodeRunTask = fullNode.RunAsync(); INodeLifetime nodeLifetime = fullNode.NodeService <INodeLifetime>(); nodeLifetime.ApplicationStarted.WaitHandle.WaitOne(); MiningRPCController controller = fullNode.Services.ServiceProvider.GetService <MiningRPCController>(); Assert.NotNull(fullNode.NodeService <IPosMinting>(true)); GetStakingInfoModel info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.True(info.Enabled); Assert.False(info.Staking); nodeLifetime.StopApplication(); nodeLifetime.ApplicationStopped.WaitHandle.WaitOne(); fullNode.Dispose(); Assert.False(fullNodeRunTask.IsFaulted); } }
/// <summary> /// Starts a full node, sets up cancellation tokens for its shutdown, and waits until it terminates. /// </summary> /// <param name="node">Full node to run.</param> /// <param name="cancellationToken">Cancellation token that triggers when the node should be shut down.</param> public static async Task RunAsync(this IFullNode node, CancellationToken cancellationToken) { // node.NodeLifetime is not initialized yet. Use this temporary variable as to avoid side-effects to node. var nodeLifetime = node.Services.ServiceProvider.GetRequiredService <INodeLifetime>() as NodeLifetime; cancellationToken.Register(state => { ((INodeLifetime)state).StopApplication(); }, nodeLifetime); var waitForStop = new TaskCompletionSource <object>(TaskCreationOptions.RunContinuationsAsynchronously); nodeLifetime.ApplicationStopping.Register(obj => { var tcs = (TaskCompletionSource <object>)obj; tcs.TrySetResult(null); }, waitForStop); Console.WriteLine(); Console.WriteLine("Application starting, press Ctrl+C to cancel."); Console.WriteLine(); node.Start(); Console.WriteLine(); Console.WriteLine("Application started, press Ctrl+C to stop."); Console.WriteLine(); await waitForStop.Task.ConfigureAwait(false); node.Dispose(); Console.WriteLine(); Console.WriteLine("Application stopped."); Console.WriteLine(); }
public void GetStakingInfo_StakingEnabled() { string dir = AssureEmptyDir("TestData/GetStakingInfoActionTests/GetStakingInfo_StakingEnabled"); IFullNode fullNode = this.BuildStakingNode(dir); Task.Run(() => { fullNode.Run(); }); INodeLifetime nodeLifetime = fullNode.NodeService <INodeLifetime>(); nodeLifetime.ApplicationStarted.WaitHandle.WaitOne(); MiningRPCController controller = fullNode.Services.ServiceProvider.GetService <MiningRPCController>(); Assert.NotNull(fullNode.NodeService <PosMinting>(true)); GetStakingInfoModel info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.True(info.Enabled); Assert.False(info.Staking); nodeLifetime.StopApplication(); nodeLifetime.ApplicationStopped.WaitHandle.WaitOne(); fullNode.Dispose(); }
public void GetStakingInfo_StartStaking() { string dir = AssureEmptyDir("TestData/GetStakingInfoActionTests/GetStakingInfo_StartStaking"); IFullNode fullNode = this.BuildStakingNode(dir, false); var node = fullNode as FullNode; Task.Run(() => { fullNode.Run(); }); INodeLifetime nodeLifetime = fullNode.NodeService <INodeLifetime>(); nodeLifetime.ApplicationStarted.WaitHandle.WaitOne(); MiningRPCController controller = fullNode.Services.ServiceProvider.GetService <MiningRPCController>(); WalletManager walletManager = node.NodeService <IWalletManager>() as WalletManager; var password = "******"; // create the wallet var mnemonic = walletManager.CreateWallet(password, "test"); Assert.NotNull(fullNode.NodeService <PosMinting>(true)); GetStakingInfoModel info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.False(info.Enabled); Assert.False(info.Staking); controller.StartStaking("test", "test"); info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.True(info.Enabled); Assert.False(info.Staking); nodeLifetime.StopApplication(); nodeLifetime.ApplicationStopped.WaitHandle.WaitOne(); fullNode.Dispose(); }
public void GetStakingInfo_StartStaking() { using (var dir = TestDirectory.Create()) { IFullNode fullNode = StratisBitcoinPosRunner.BuildStakingNode(dir.FolderName, false); var node = fullNode as FullNode; var fullNodeRunTask = fullNode.RunAsync(); INodeLifetime nodeLifetime = fullNode.NodeService <INodeLifetime>(); nodeLifetime.ApplicationStarted.WaitHandle.WaitOne(); MiningRPCController controller = fullNode.Services.ServiceProvider.GetService <MiningRPCController>(); WalletManager walletManager = node.NodeService <IWalletManager>() as WalletManager; var password = "******"; // create the wallet var mnemonic = walletManager.CreateWallet(password, "test"); Assert.NotNull(fullNode.NodeService <PosMinting>(true)); GetStakingInfoModel info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.False(info.Enabled); Assert.False(info.Staking); controller.StartStaking("test", "test"); info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.True(info.Enabled); Assert.False(info.Staking); nodeLifetime.StopApplication(); nodeLifetime.ApplicationStopped.WaitHandle.WaitOne(); fullNode.Dispose(); Assert.False(fullNodeRunTask.IsFaulted); } }
public void GetStakingInfo_StartStaking() { IFullNode fullNode = StratisBitcoinPosRunner.BuildStakingNode(TestBase.CreateTestDir(this), false); var node = fullNode as FullNode; Task fullNodeRunTask = fullNode.RunAsync(); var nodeLifetime = fullNode.NodeService <INodeLifetime>(); nodeLifetime.ApplicationStarted.WaitHandle.WaitOne(); var controller = fullNode.NodeController <StakingRpcController>(); var walletManager = node.NodeService <IWalletManager>() as WalletManager; string password = "******"; string passphrase = "passphrase"; // create the wallet walletManager.CreateWallet(password, "test", passphrase); Assert.NotNull(fullNode.NodeService <IPosMinting>(true)); GetStakingInfoModel info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.False(info.Enabled); Assert.False(info.Staking); controller.StartStaking("test", "test"); info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.True(info.Enabled); Assert.False(info.Staking); nodeLifetime.StopApplication(); nodeLifetime.ApplicationStopped.WaitHandle.WaitOne(); fullNode.Dispose(); Assert.False(fullNodeRunTask.IsFaulted); }
public void GetStakingInfo_StakingEnabled() { IFullNode fullNode = StratisBitcoinPosRunner.BuildStakingNode(TestBase.CreateTestDir(this)); Task fullNodeRunTask = fullNode.RunAsync(); var nodeLifetime = fullNode.NodeService <INodeLifetime>(); nodeLifetime.ApplicationStarted.WaitHandle.WaitOne(); var controller = fullNode.NodeController <StakingRpcController>(); Assert.NotNull(fullNode.NodeService <IPosMinting>(true)); GetStakingInfoModel info = controller.GetStakingInfo(); Assert.NotNull(info); Assert.True(info.Enabled); Assert.False(info.Staking); nodeLifetime.StopApplication(); nodeLifetime.ApplicationStopped.WaitHandle.WaitOne(); fullNode.Dispose(); Assert.False(fullNodeRunTask.IsFaulted); }
/// <summary> /// Starts a full node, sets up cancellation tokens for its shutdown, and waits until it terminates. /// </summary> /// <param name="node">Full node to run.</param> /// <param name="cancellationToken">Cancellation token that triggers when the node should be shut down.</param> /// <param name="shutdownMessage">Message to display on the console to instruct the user on how to invoke the shutdown.</param> /// <param name="shutdownCompleteMessage">Message to display on the console when the shutdown is complete.</param> public static async Task RunAsync(this IFullNode node, CancellationToken cancellationToken, string shutdownMessage, string shutdownCompleteMessage) { node.Start(); if (!string.IsNullOrEmpty(shutdownMessage)) { Console.WriteLine(); Console.WriteLine(shutdownMessage); Console.WriteLine(); } cancellationToken.Register(state => { ((INodeLifetime)state).StopApplication(); }, node.NodeLifetime); var waitForStop = new TaskCompletionSource <object>(TaskCreationOptions.RunContinuationsAsynchronously); node.NodeLifetime.ApplicationStopping.Register(obj => { var tcs = (TaskCompletionSource <object>)obj; tcs.TrySetResult(null); }, waitForStop); await waitForStop.Task.ConfigureAwait(false); node.Dispose(); if (!string.IsNullOrEmpty(shutdownCompleteMessage)) { Console.WriteLine(); Console.WriteLine(shutdownCompleteMessage); Console.WriteLine(); } }