public void Skips_additional_urls_with_port_conficts() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules, WebSocketsPort = 9876, AdditionalRpcUrls = new [] { "http://localhost:8545|http;ws|admin;debug", "https://127.0.0.1:1234|https;wss|eth;web3", "https://127.0.0.1:9876|https;wss|net;proof", "http://localhost:1234|http;ws|db;erc20" } }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http, _enabledModules) }, { 9876, new JsonRpcUrl("http", "127.0.0.1", 9876, RpcEndpoint.Ws, _enabledModules) }, { 1234, new JsonRpcUrl("https", "127.0.0.1", 1234, RpcEndpoint.Https | RpcEndpoint.Wss, new [] { "eth", "web3" }) } }, urlCollection); }
public void Skips_AdditionalUrl_with_engine_module_enabled_when_EngineUrl_specified() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules, AdditionalRpcUrls = new [] { "http://127.0.0.1:8551|http|eth;web3;engine", "http://127.0.0.1:1234|http|eth;web3" }, EngineHost = "127.0.0.1", EnginePort = 8552, EngineEnabledModules = new [] { "eth" } }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, false); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http, false, _enabledModules) }, { 8552, new JsonRpcUrl("http", "127.0.0.1", 8552, RpcEndpoint.Http, true, new [] { "eth", "engine" }) }, { 1234, new JsonRpcUrl("http", "127.0.0.1", 1234, RpcEndpoint.Http, false, new [] { "eth", "web3" }) } }, urlCollection);; }
public void Empty_when_disabled() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = false }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.IsEmpty(urlCollection); }
public void Contains_single_default_url() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http | RpcEndpoint.Ws, _enabledModules) } }, urlCollection); }
public void Skips_additional_ws_only_urls_when_ws_disabled() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules, AdditionalRpcUrls = new [] { "http://localhost:1234|ws|admin;debug" } }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, false); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http, _enabledModules) } }, urlCollection); }
public void Contains_single_default_http_url_when_ws_disabled() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, WebSocketsPort = 1234, EnabledModules = _enabledModules }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, false); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http, _enabledModules) }, }, urlCollection); }
public void Contains_multiple_default_urls_with_different_ws_port() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, WebSocketsPort = 1234, EnabledModules = _enabledModules }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http, _enabledModules) }, { 1234, new JsonRpcUrl("http", "127.0.0.1", 1234, RpcEndpoint.Ws, _enabledModules) } }, urlCollection); }
public void Contains_single_default_url_overridden_by_environment_variable() { Environment.SetEnvironmentVariable("NETHERMIND_URL", "http://localhost:1234", EnvironmentVariableTarget.Process); JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 1234, new JsonRpcUrl("http", "localhost", 1234, RpcEndpoint.Http | RpcEndpoint.Ws, _enabledModules) } }, urlCollection); }
public void Contains_additional_urls() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules, AdditionalRpcUrls = new [] { "https://localhost:1234|https;wss|admin;debug" } }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http | RpcEndpoint.Ws, _enabledModules) }, { 1234, new JsonRpcUrl("https", "localhost", 1234, RpcEndpoint.Https | RpcEndpoint.Wss, new[] { "admin", "debug" }) } }, urlCollection); }
public void Skips_additional_urls_when_invalid() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules, AdditionalRpcUrls = new [] { string.Empty, "test", "http://localhost:1234|http|db;erc20;web3" } }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http | RpcEndpoint.Ws, _enabledModules) }, { 1234, new JsonRpcUrl("http", "localhost", 1234, RpcEndpoint.Http, new [] { "db", "erc20", "web3" }) } }, urlCollection);; }
public void EngineHost_and_EnginePort_specified() { JsonRpcConfig jsonRpcConfig = new JsonRpcConfig() { Enabled = true, EnabledModules = _enabledModules, AdditionalRpcUrls = new [] { "http://127.0.0.1:8551|http|eth;web3;engine" }, EngineHost = "127.0.0.1", EnginePort = 8551, EngineEnabledModules = new[] { "eth" } }; JsonRpcUrlCollection urlCollection = new JsonRpcUrlCollection(Substitute.For <ILogManager>(), jsonRpcConfig, true); CollectionAssert.AreEquivalent(new Dictionary <int, JsonRpcUrl>() { { 8545, new JsonRpcUrl("http", "127.0.0.1", 8545, RpcEndpoint.Http | RpcEndpoint.Ws, false, _enabledModules) }, { 8551, new JsonRpcUrl("http", "127.0.0.1", 8551, RpcEndpoint.Http | RpcEndpoint.Ws, true, new [] { "eth", "engine" }) }, }, urlCollection);; }
public async Task Execute(CancellationToken cancellationToken) { IJsonRpcConfig jsonRpcConfig = _api.Config <IJsonRpcConfig>(); ILogger logger = _api.LogManager.GetClassLogger(); if (jsonRpcConfig.Enabled) { IInitConfig initConfig = _api.Config <IInitConfig>(); IJsonRpcUrlCollection jsonRpcUrlCollection = new JsonRpcUrlCollection(_api.LogManager, jsonRpcConfig, initConfig.WebSocketsEnabled); JsonRpcLocalStats jsonRpcLocalStats = new( _api.Timestamper, jsonRpcConfig, _api.LogManager); IRpcModuleProvider rpcModuleProvider = _api.RpcModuleProvider !; JsonRpcService jsonRpcService = new(rpcModuleProvider, _api.LogManager, jsonRpcConfig); IJsonSerializer jsonSerializer = CreateJsonSerializer(jsonRpcService); IRpcAuthentication auth = jsonRpcConfig.UnsecureDevNoRpcAuthentication || !jsonRpcUrlCollection.Values.Any(u => u.IsAuthenticated) ? NoAuthentication.Instance : MicrosoftJwtAuthentication.CreateFromFileOrGenerate(jsonRpcConfig.JwtSecretFile, _api.Timestamper, logger); JsonRpcProcessor jsonRpcProcessor = new( jsonRpcService, jsonSerializer, jsonRpcConfig, _api.FileSystem, _api.LogManager); if (initConfig.WebSocketsEnabled) { JsonRpcWebSocketsModule webSocketsModule = new( jsonRpcProcessor, jsonRpcService, jsonRpcLocalStats, _api.LogManager, jsonSerializer, jsonRpcUrlCollection, auth); _api.WebSocketsManager !.AddModule(webSocketsModule, true); } Bootstrap.Instance.JsonRpcService = jsonRpcService; Bootstrap.Instance.LogManager = _api.LogManager; Bootstrap.Instance.JsonSerializer = jsonSerializer; Bootstrap.Instance.JsonRpcLocalStats = jsonRpcLocalStats; Bootstrap.Instance.JsonRpcAuthentication = auth; JsonRpcRunner?jsonRpcRunner = new( jsonRpcProcessor, jsonRpcUrlCollection, _api.WebSocketsManager !, _api.ConfigProvider, auth, _api.LogManager, _api); await jsonRpcRunner.Start(cancellationToken).ContinueWith(x => { if (x.IsFaulted && logger.IsError) { logger.Error("Error during jsonRpc runner start", x.Exception); } }, cancellationToken); JsonRpcIpcRunner jsonIpcRunner = new(jsonRpcProcessor, jsonRpcService, _api.ConfigProvider, _api.LogManager, jsonRpcLocalStats, jsonSerializer, _api.FileSystem); jsonIpcRunner.Start(cancellationToken); #pragma warning disable 4014 _api.DisposeStack.Push( new Reactive.AnonymousDisposable(() => jsonRpcRunner.StopAsync())); // do not await _api.DisposeStack.Push(jsonIpcRunner); // do not await #pragma warning restore 4014 } else { if (logger.IsInfo) { logger.Info("Json RPC is disabled"); } } }