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);
        }
示例#2
0
        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);;
        }
示例#11
0
        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);;
        }
示例#12
0
        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");
                }
            }
        }