Skip to content

Commit

Permalink
Still trying to fix #528
Browse files Browse the repository at this point in the history
  • Loading branch information
Hüseyin Uslu committed Oct 4, 2014
1 parent 065cf73 commit a8f0ef9
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src/CoiniumServ/CoiniumServ.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,11 @@
</Reference>
<Reference Include="Serilog, Version=1.4.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\build\packages\Serilog.1.4.9\lib\net45\Serilog.dll</HintPath>
<HintPath>..\..\build\packages\Serilog.1.4.10\lib\net45\Serilog.dll</HintPath>
</Reference>
<Reference Include="Serilog.FullNetFx, Version=1.4.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\build\packages\Serilog.1.4.9\lib\net45\Serilog.FullNetFx.dll</HintPath>
<HintPath>..\..\build\packages\Serilog.1.4.10\lib\net45\Serilog.FullNetFx.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
Expand Down
3 changes: 0 additions & 3 deletions src/CoiniumServ/Server/Mining/Getwork/GetworkService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,6 @@ public class GetworkService : JsonRpcService, IRpcService
[JsonRpcMethod("getwork")]
public Daemon.Responses.Getwork Getwork(string data = null)
{
var context = (GetworkContext) JsonRpcContext.Current().Value;
var miner = (IGetworkMiner) (context.Miner);

// TODO: fixme! instead use jobmanager and sharemanager.

if (data == null) // if miner supplied no data
Expand Down
19 changes: 7 additions & 12 deletions src/CoiniumServ/Server/Mining/Stratum/StratumService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,20 +46,19 @@ public class StratumService : JsonRpcService, IRpcService
/// <summary>
/// Subscribes a Miner to allow it to recieve work to begin hashing and submitting shares.
/// </summary>
/// <param name="signature">Miner Connection</param>
/// <param name="data">Miner Connection</param>
[JsonRpcMethod("mining.subscribe")]
public SubscribeResponse SubscribeMiner(string signature)
public SubscribeResponse SubscribeMiner(string data = null)
{
var context = (StratumContext) JsonRpcContext.Current().Value;
var miner = (IStratumMiner)(context.Miner);
var context = (StratumContext) JsonRpcContext.Current().Value;

var response = new SubscribeResponse
{
ExtraNonce1 = miner.ExtraNonce.ToString("x8"), // Hex-encoded, per-connection unique string which will be used for coinbase serialization later. (http://mining.bitcoin.cz/stratum-mining)
ExtraNonce1 = context.Miner.ExtraNonce.ToString("x8"), // Hex-encoded, per-connection unique string which will be used for coinbase serialization later. (http://mining.bitcoin.cz/stratum-mining)
ExtraNonce2Size = ExtraNonce.ExpectedExtraNonce2Size // Represents expected length of extranonce2 which will be generated by the miner. (http://mining.bitcoin.cz/stratum-mining)
};

miner.Subscribe(signature);
context.Miner.Subscribe(data);

return response;
}
Expand All @@ -73,9 +72,7 @@ public SubscribeResponse SubscribeMiner(string signature)
public bool AuthorizeMiner(string user, string password)
{
var context = (StratumContext)JsonRpcContext.Current().Value;
var miner = (IStratumMiner)(context.Miner);

return miner.Authenticate(user, password);
return context.Miner.Authenticate(user, password);
}

/// <summary>
Expand All @@ -90,9 +87,7 @@ public bool AuthorizeMiner(string user, string password)
public bool SubmitWork(string user, string jobId, string extraNonce2, string nTime, string nonce)
{
var context = (StratumContext)JsonRpcContext.Current().Value;
var miner = (IStratumMiner)(context.Miner);

return _shareManager.ProcessShare(miner, jobId, extraNonce2, nTime, nonce).IsValid;
return _shareManager.ProcessShare(context.Miner, jobId, extraNonce2, nTime, nonce).IsValid;
}
}
}
2 changes: 1 addition & 1 deletion src/CoiniumServ/packages.config
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@
<package id="Nancy.Viewengines.Razor" version="0.23.2" targetFramework="net45" />
<package id="NancyFx.Metrics" version="0.2.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.5" targetFramework="net45" />
<package id="Serilog" version="1.4.9" targetFramework="net45" />
<package id="Serilog" version="1.4.10" targetFramework="net45" />
</packages>
5 changes: 2 additions & 3 deletions src/Tests/Banning/BanConfigTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,14 @@ namespace CoiniumServ.Tests.Banning
{
public class BanConfigTests
{
private readonly IConfigFactory _configFactory;
private readonly IJsonConfigReader _jsonConfigReader;

public BanConfigTests()
{
var kernel = TinyIoCContainer.Current;
new Bootstrapper(kernel);
_configFactory = kernel.Resolve<IConfigFactory>();
_jsonConfigReader = _configFactory.GetJsonConfigReader();
var configFactory = kernel.Resolve<IConfigFactory>();
_jsonConfigReader = configFactory.GetJsonConfigReader();
}

/// <summary>
Expand Down
9 changes: 6 additions & 3 deletions src/Tests/CoiniumServ.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="AustinHarris.JsonRpc, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\build\packages\AustinHarris.JsonRpc.1.0.4.18\lib\net40\AustinHarris.JsonRpc.dll</HintPath>
</Reference>
<Reference Include="BouncyCastle.Crypto, Version=1.7.4137.9688, Culture=neutral, PublicKeyToken=a4292a325f69b123, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\build\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll</HintPath>
Expand Down Expand Up @@ -72,6 +76,7 @@
<Compile Include="Blocks\BlockProcessorTests.cs" />
<Compile Include="Coin\Coinbase\SerializersTests.cs" />
<Compile Include="Daemon\BlockTemplateTests.cs" />
<Compile Include="Server\Mining\Stratum\StratumServiceTests.cs" />
<Compile Include="Utils\Extensions\ArrayExtensionsTests.cs" />
<Compile Include="Utils\Extensions\StringExtensionsTests.cs" />
<Compile Include="Shares\ShareTests.cs" />
Expand Down Expand Up @@ -109,9 +114,7 @@
<ItemGroup>
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />
</ItemGroup>
<ItemGroup>
<Folder Include="Server\Mining\Stratum\" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
Expand Down
94 changes: 94 additions & 0 deletions src/Tests/Server/Mining/Stratum/StratumServiceTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#region License
//
// CoiniumServ - Crypto Currency Mining Pool Server Software
// Copyright (C) 2013 - 2014, CoiniumServ Project - http://www.coinium.org
// http://www.coiniumserv.com - https://github.com/CoiniumServ/CoiniumServ
//
// This software is dual-licensed: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// For the terms of this license, see licenses/gpl_v3.txt.
//
// Alternatively, you can license this software under a commercial
// license or white-label it as set out in licenses/commercial.txt.
//
#endregion

using AustinHarris.JsonRpc;
using CoiniumServ.Pools;
using CoiniumServ.Server.Mining.Stratum;
using CoiniumServ.Shares;
using NSubstitute;
using Should.Fluent;
using Xunit;

namespace CoiniumServ.Tests.Server.Mining.Stratum
{
public class StratumServiceTests
{
private readonly IShareManager _shareManager;
private readonly IPoolConfig _poolConfig;
private readonly StratumContext _stratumContext;

public StratumServiceTests()
{
_shareManager = Substitute.For<IShareManager>();
_poolConfig = Substitute.For<IPoolConfig>();

var miner = Substitute.For<IStratumMiner>();
_stratumContext = Substitute.For<StratumContext>(miner);
}

[Fact]
public void MiningSubscribe_WithZeroParameters_ShouldSuccess()
{
_poolConfig.Coin.Name.Returns("zero-params");
var service = new StratumService(_poolConfig, _shareManager);

const string request = @"{ 'id' : 1, 'method' : 'mining.subscribe', 'params' : [ ] }";
const string expectedResult = "{\"jsonrpc\":\"2.0\",\"result\":[[\"mining.set_difficulty\",\"0\",\"mining.notify\",\"0\"],\"00000000\",4],\"id\":1}";

var task = JsonRpcProcessor.Process(_poolConfig.Coin.Name, request,_stratumContext);
task.Wait();

task.Result.Should().Equal(expectedResult);
}

[Fact]
public void MiningSubscribe_WithSignature_ShouldSuccess()
{
_poolConfig.Coin.Name.Returns("signature");
var service = new StratumService(_poolConfig, _shareManager);

const string request = @"{ 'id' : 1, 'method' : 'mining.subscribe', 'params' : [ 'cgminer/3.7.2' ] }";
const string expectedResult = "{\"jsonrpc\":\"2.0\",\"result\":[[\"mining.set_difficulty\",\"0\",\"mining.notify\",\"0\"],\"00000000\",4],\"id\":1}";

var task = JsonRpcProcessor.Process(_poolConfig.Coin.Name, request, _stratumContext);
task.Wait();

task.Result.Should().Equal(expectedResult);
}

[Fact]
public void MiningSubscribe_WithNonce_ShouldSuccess()
{
_poolConfig.Coin.Name.Returns("nonce");
var service = new StratumService(_poolConfig, _shareManager);

const string request = @"{ 'id' : 1, 'method' : 'mining.subscribe', 'params' : [ 'cgminer/3.7.2', 'aa' ] }";
const string expectedResult = "{\"jsonrpc\":\"2.0\",\"result\":[[\"mining.set_difficulty\",\"0\",\"mining.notify\",\"0\"],\"00000000\",4],\"id\":1}";

var task = JsonRpcProcessor.Process(_poolConfig.Coin.Name, request, _stratumContext);
task.Wait();

task.Result.Should().Equal(expectedResult);
}
}
}
1 change: 1 addition & 0 deletions src/Tests/packages.config
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AustinHarris.JsonRpc" version="1.0.4.18" targetFramework="net45" />
<package id="BouncyCastle" version="1.7.0" targetFramework="net45" />
<package id="ExposedObject" version="1.2.0.0" targetFramework="net45" />
<package id="Nancy" version="0.23.2" targetFramework="net45" />
Expand Down

0 comments on commit a8f0ef9

Please sign in to comment.