Exemplo n.º 1
0
        public static IEnumerable <object[]> GetEdgeHubConfigData()
        {
            var r1 = new Route("id", string.Empty, "iotHub", Mock.Of <IMessageSource>(), new Mock <Endpoint>("endpoint1").Object, 0, 3600);
            var r2 = new Route("id", string.Empty, "iotHub", Mock.Of <IMessageSource>(), new Mock <Endpoint>("endpoint2").Object, 0, 3600);

            var routeConfig1 = new RouteConfig("r1", "FROM /* INTO $upstream", r1);
            var routeConfig2 = new RouteConfig("r2", "FROM /messages/* INTO $upstream", r2);

            var routes1 = new Dictionary <string, RouteConfig>
            {
                [routeConfig1.Name] = routeConfig1,
                [routeConfig2.Name] = routeConfig2
            };

            var routes2 = new Dictionary <string, RouteConfig>
            {
                [routeConfig1.Name] = routeConfig1
            };

            var routes3 = new Dictionary <string, RouteConfig>
            {
                [routeConfig2.Name] = routeConfig2
            };

            var storeAndForwardConfig1 = new StoreAndForwardConfiguration(-1);
            var storeAndForwardConfig2 = new StoreAndForwardConfiguration(7200);
            var storeAndForwardConfig3 = new StoreAndForwardConfiguration(3600);

            StoreLimits s1 = new StoreLimits(100L);
            StoreLimits s2 = new StoreLimits(200L);
            var         storeAndForwardConfig4 = new StoreAndForwardConfiguration(3600, s1);
            var         storeAndForwardConfig5 = new StoreAndForwardConfiguration(3600, s2);
            var         storeAndForwardConfig6 = new StoreAndForwardConfiguration(3600);

            var statement1 = new Statement(
                effect: Effect.Allow,
                identities: new List <string>
            {
                "device_1"
            },
                operations: new List <string>
            {
                "read",
                "write"
            },
                resources: new List <string>
            {
                "file1",
                "file2"
            });

            var statement2 = new Statement(
                effect: Effect.Deny,
                identities: new List <string>
            {
                "device_1"
            },
                operations: new List <string>
            {
                "read"
            },
                resources: new List <string>
            {
                "root1",
                "root2"
            });

            var statement3 = new Statement(
                effect: Effect.Allow,
                identities: new List <string>
            {
                "device_1"
            },
                operations: new List <string>
            {
                "read",
                "write"
            },
                resources: new List <string>
            {
                "file1",
                "file2"
            });

            var brokerConfig1 = new BrokerConfig(
                Option.None <BridgeConfig>(),
                Option.Some(new AuthorizationConfig(new List <Statement> {
                statement1
            })));
            var brokerConfig2 = new BrokerConfig(
                Option.None <BridgeConfig>(),
                Option.Some(new AuthorizationConfig(new List <Statement> {
                statement2
            })));
            var brokerConfig3 = new BrokerConfig(
                Option.None <BridgeConfig>(),
                Option.Some(new AuthorizationConfig(new List <Statement> {
                statement3
            })));

            string version = "1.0";

            var edgeHubConfig1  = new EdgeHubConfig(version, routes1, storeAndForwardConfig1, Option.Some(brokerConfig1));
            var edgeHubConfig2  = new EdgeHubConfig(version, routes2, storeAndForwardConfig1, Option.Some(brokerConfig1));
            var edgeHubConfig3  = new EdgeHubConfig(version, routes3, storeAndForwardConfig1, Option.Some(brokerConfig1));
            var edgeHubConfig4  = new EdgeHubConfig(version, routes1, storeAndForwardConfig1, Option.Some(brokerConfig1));
            var edgeHubConfig5  = new EdgeHubConfig(version, routes1, storeAndForwardConfig2, Option.Some(brokerConfig1));
            var edgeHubConfig6  = new EdgeHubConfig(version, routes1, storeAndForwardConfig3, Option.Some(brokerConfig1));
            var edgeHubConfig7  = new EdgeHubConfig(version, routes2, storeAndForwardConfig2, Option.Some(brokerConfig1));
            var edgeHubConfig8  = new EdgeHubConfig(version, routes2, storeAndForwardConfig3, Option.Some(brokerConfig1));
            var edgeHubConfig9  = new EdgeHubConfig(version, routes3, storeAndForwardConfig3, Option.Some(brokerConfig1));
            var edgeHubConfig10 = new EdgeHubConfig(version, routes3, storeAndForwardConfig3, Option.Some(brokerConfig1));
            var edgeHubConfig11 = new EdgeHubConfig(version, routes3, storeAndForwardConfig4, Option.Some(brokerConfig1));
            var edgeHubConfig12 = new EdgeHubConfig(version, routes3, storeAndForwardConfig5, Option.Some(brokerConfig1));
            var edgeHubConfig13 = new EdgeHubConfig(version, routes3, storeAndForwardConfig6, Option.Some(brokerConfig1));

            yield return(new object[] { edgeHubConfig1, edgeHubConfig2, false });

            yield return(new object[] { edgeHubConfig2, edgeHubConfig3, false });

            yield return(new object[] { edgeHubConfig3, edgeHubConfig4, false });

            yield return(new object[] { edgeHubConfig4, edgeHubConfig5, false });

            yield return(new object[] { edgeHubConfig5, edgeHubConfig6, false });

            yield return(new object[] { edgeHubConfig6, edgeHubConfig7, false });

            yield return(new object[] { edgeHubConfig7, edgeHubConfig8, false });

            yield return(new object[] { edgeHubConfig8, edgeHubConfig9, false });

            yield return(new object[] { edgeHubConfig9, edgeHubConfig10, true });

            yield return(new object[] { edgeHubConfig10, edgeHubConfig11, false });

            yield return(new object[] { edgeHubConfig11, edgeHubConfig12, false });

            yield return(new object[] { edgeHubConfig10, edgeHubConfig13, true });

            yield return(new object[] { edgeHubConfig12, edgeHubConfig13, false });

            // authorization config equality check
            var edgeHubConfig14 = new EdgeHubConfig(version, routes1, storeAndForwardConfig1, Option.Some(brokerConfig2));
            var edgeHubConfig15 = new EdgeHubConfig(version, routes1, storeAndForwardConfig1, Option.Some(brokerConfig3));

            yield return(new object[] { edgeHubConfig1, edgeHubConfig14, false });

            yield return(new object[] { edgeHubConfig1, edgeHubConfig15, true });
        }
Exemplo n.º 2
0
        public void Register(ContainerBuilder builder)
        {
            const int ConnectionPoolSize = 10;

            string edgeHubConnectionString = $"{this.configuration[EdgeHubConstants.ConfigKey.IotHubConnectionString]};ModuleId=$edgeHub";
            IotHubConnectionStringBuilder iotHubConnectionStringBuilder = IotHubConnectionStringBuilder.Create(edgeHubConnectionString);
            var topics = new MessageAddressConversionConfiguration(this.inboundTemplates, this.outboundTemplates);

            builder.RegisterModule(new LoggingModule());

            var mqttSettingsConfiguration = new Mock <IConfiguration>();

            mqttSettingsConfiguration.Setup(c => c.GetSection(It.IsAny <string>())).Returns(Mock.Of <IConfigurationSection>(s => s.Value == null));

            var experimentalFeatures = new ExperimentalFeatures(true, false, false, true);

            builder.RegisterBuildCallback(
                c =>
            {
                // set up loggers for dotnetty
                var loggerFactory = c.Resolve <ILoggerFactory>();
                InternalLoggerFactory.DefaultFactory = loggerFactory;

                var eventListener = new LoggerEventListener(loggerFactory.CreateLogger("ProtocolGateway"));
                eventListener.EnableEvents(CommonEventSource.Log, EventLevel.Informational);
            });

            var versionInfo   = new VersionInfo("v1", "b1", "c1");
            var metricsConfig = new MetricsConfig(true, new MetricsListenerConfig());
            var backupFolder  = Option.None <string>();

            string      storageFolder = string.Empty;
            StoreLimits storeLimits   = null;

            if (!int.TryParse(this.configuration["TimeToLiveSecs"], out int timeToLiveSecs))
            {
                timeToLiveSecs = -1;
            }

            if (long.TryParse(this.configuration["MaxStorageBytes"], out long maxStorageBytes))
            {
                storeLimits = new StoreLimits(maxStorageBytes);
            }

            var storeAndForwardConfiguration = new StoreAndForwardConfiguration(timeToLiveSecs, storeLimits);

            if (bool.TryParse(this.configuration["UsePersistentStorage"], out bool usePersistentStorage) && usePersistentStorage)
            {
                storageFolder = GetOrCreateDirectoryPath(this.configuration["StorageFolder"], EdgeHubConstants.EdgeHubStorageFolder);
            }

            if (bool.TryParse(this.configuration["EnableNonPersistentStorageBackup"], out bool enableNonPersistentStorageBackup))
            {
                backupFolder = Option.Some(this.configuration["BackupFolder"]);
            }

            var    testRoutes   = this.routes;
            string customRoutes = this.configuration["Routes"];

            if (!string.IsNullOrWhiteSpace(customRoutes))
            {
                testRoutes = JsonConvert.DeserializeObject <IDictionary <string, string> >(customRoutes);
            }

            builder.RegisterModule(
                new CommonModule(
                    string.Empty,
                    iotHubConnectionStringBuilder.HostName,
                    iotHubConnectionStringBuilder.DeviceId,
                    iotHubConnectionStringBuilder.ModuleId,
                    string.Empty,
                    Option.None <string>(),
                    AuthenticationMode.CloudAndScope,
                    Option.Some(edgeHubConnectionString),
                    false,
                    usePersistentStorage,
                    storageFolder,
                    Option.None <string>(),
                    Option.None <string>(),
                    TimeSpan.FromHours(1),
                    false,
                    this.trustBundle,
                    string.Empty,
                    metricsConfig,
                    enableNonPersistentStorageBackup,
                    backupFolder,
                    Option.None <ulong>(),
                    Option.None <StorageLogLevel>()));

            builder.RegisterModule(
                new RoutingModule(
                    iotHubConnectionStringBuilder.HostName,
                    iotHubConnectionStringBuilder.DeviceId,
                    iotHubConnectionStringBuilder.ModuleId,
                    Option.Some(edgeHubConnectionString),
                    testRoutes,
                    true,
                    storeAndForwardConfiguration,
                    ConnectionPoolSize,
                    false,
                    versionInfo,
                    Option.Some(UpstreamProtocol.Amqp),
                    TimeSpan.FromSeconds(5),
                    101,
                    TimeSpan.FromSeconds(30),
                    TimeSpan.FromSeconds(3600),
                    true,
                    TimeSpan.FromSeconds(20),
                    false,
                    Option.None <TimeSpan>(),
                    Option.None <TimeSpan>(),
                    false,
                    10,
                    10,
                    false,
                    TimeSpan.FromHours(1),
                    experimentalFeatures));

            builder.RegisterModule(new HttpModule());
            builder.RegisterModule(new MqttModule(mqttSettingsConfiguration.Object, topics, this.serverCertificate, false, false, false, this.sslProtocols));
            builder.RegisterModule(new AmqpModule("amqps", 5671, this.serverCertificate, iotHubConnectionStringBuilder.HostName, true, this.sslProtocols));
        }
Exemplo n.º 3
0
        public static IEnumerable <object[]> GetEdgeHubConfigData()
        {
            var r1 = new Route("id", string.Empty, "iotHub", Mock.Of <IMessageSource>(), new Mock <Endpoint>("endpoint1").Object, 0, 3600);
            var r2 = new Route("id", string.Empty, "iotHub", Mock.Of <IMessageSource>(), new Mock <Endpoint>("endpoint2").Object, 0, 3600);

            var routeConfig1 = new RouteConfig("r1", "FROM /* INTO $upstream", r1);
            var routeConfig2 = new RouteConfig("r2", "FROM /messages/* INTO $upstream", r2);

            var routes1 = new Dictionary <string, RouteConfig>
            {
                [routeConfig1.Name] = routeConfig1,
                [routeConfig2.Name] = routeConfig2
            };

            var routes2 = new Dictionary <string, RouteConfig>
            {
                [routeConfig1.Name] = routeConfig1
            };

            var routes3 = new Dictionary <string, RouteConfig>
            {
                [routeConfig2.Name] = routeConfig2
            };

            var storeAndForwardConfig1 = new StoreAndForwardConfiguration(-1);
            var storeAndForwardConfig2 = new StoreAndForwardConfiguration(7200);
            var storeAndForwardConfig3 = new StoreAndForwardConfiguration(3600);

            StoreLimits s1 = new StoreLimits(100L);
            StoreLimits s2 = new StoreLimits(200L);
            var         storeAndForwardConfig4 = new StoreAndForwardConfiguration(3600, s1);
            var         storeAndForwardConfig5 = new StoreAndForwardConfiguration(3600, s2);
            var         storeAndForwardConfig6 = new StoreAndForwardConfiguration(3600);

            string version = "1.0";

            var edgeHubConfig1  = new EdgeHubConfig(version, routes1, storeAndForwardConfig1);
            var edgeHubConfig2  = new EdgeHubConfig(version, routes2, storeAndForwardConfig1);
            var edgeHubConfig3  = new EdgeHubConfig(version, routes3, storeAndForwardConfig1);
            var edgeHubConfig4  = new EdgeHubConfig(version, routes1, storeAndForwardConfig1);
            var edgeHubConfig5  = new EdgeHubConfig(version, routes1, storeAndForwardConfig2);
            var edgeHubConfig6  = new EdgeHubConfig(version, routes1, storeAndForwardConfig3);
            var edgeHubConfig7  = new EdgeHubConfig(version, routes2, storeAndForwardConfig2);
            var edgeHubConfig8  = new EdgeHubConfig(version, routes2, storeAndForwardConfig3);
            var edgeHubConfig9  = new EdgeHubConfig(version, routes3, storeAndForwardConfig3);
            var edgeHubConfig10 = new EdgeHubConfig(version, routes3, storeAndForwardConfig3);
            var edgeHubConfig11 = new EdgeHubConfig(version, routes3, storeAndForwardConfig4);
            var edgeHubConfig12 = new EdgeHubConfig(version, routes3, storeAndForwardConfig5);
            var edgeHubConfig13 = new EdgeHubConfig(version, routes3, storeAndForwardConfig6);

            yield return(new object[] { edgeHubConfig1, edgeHubConfig2, false });

            yield return(new object[] { edgeHubConfig2, edgeHubConfig3, false });

            yield return(new object[] { edgeHubConfig3, edgeHubConfig4, false });

            yield return(new object[] { edgeHubConfig4, edgeHubConfig5, false });

            yield return(new object[] { edgeHubConfig5, edgeHubConfig6, false });

            yield return(new object[] { edgeHubConfig6, edgeHubConfig7, false });

            yield return(new object[] { edgeHubConfig7, edgeHubConfig8, false });

            yield return(new object[] { edgeHubConfig8, edgeHubConfig9, false });

            yield return(new object[] { edgeHubConfig9, edgeHubConfig10, true });

            yield return(new object[] { edgeHubConfig10, edgeHubConfig11, false });

            yield return(new object[] { edgeHubConfig11, edgeHubConfig12, false });

            yield return(new object[] { edgeHubConfig10, edgeHubConfig13, true });

            yield return(new object[] { edgeHubConfig12, edgeHubConfig13, false });
        }