예제 #1
0
        public async Task InternalMessageCapturesProperties()
        {
            var deviceListenerCapture = new DeviceListenerCapture();

            var publishInfo = new MqttPublishInfo("$edgehub/device_id/messages/events/prop1=val1&prop2=val2", new byte[] { 0x01, 0x02, 0x03 });

            var(connectionRegistry, identityProvider) = GetHandlerDependencies(listenerCapture: deviceListenerCapture);

            var sut = new TelemetryHandler(connectionRegistry, identityProvider);

            var isHandled = await sut.HandleAsync(publishInfo);

            Assert.True(isHandled);
            Assert.NotNull(deviceListenerCapture.Captured);
            Assert.NotNull(deviceListenerCapture.Captured.LastCapturedMessage);

            var capturedMessage    = deviceListenerCapture.Captured.LastCapturedMessage;
            var expectedProperties = new Dictionary <string, string>()
            {
                ["prop1"] = "val1",
                ["prop2"] = "val2",
            };

            Assert.Equal(expectedProperties, capturedMessage.Properties);
        }
예제 #2
0
        public async Task CapturesModuleIdentityFromTopic()
        {
            var publishInfo = new MqttPublishInfo("$edgehub/captured_device_id/captured_module_id/messages/events/prop1=val1&prop2=val2", new byte[0]);

            var(connectionRegistry, _) = GetHandlerDependencies();
            var identityProvider = Mock.Of <IIdentityProvider>();

            string passedDeviceId = null, passedModuleId = null;

            Mock.Get(identityProvider)
            .Setup(ip => ip.Create(It.IsAny <string>(), It.IsAny <string>()))
            .Returns((string device_id, string module_id) =>
            {
                passedDeviceId = device_id;
                passedModuleId = module_id;
                return(new ModuleIdentity("host", device_id, module_id));
            });

            var sut = new TelemetryHandler(connectionRegistry, identityProvider);

            _ = await sut.HandleAsync(publishInfo);

            Assert.Equal("captured_device_id", passedDeviceId);
            Assert.Equal("captured_module_id", passedModuleId);
        }
예제 #3
0
        public async Task HandlesTelemetryTopics(string topic)
        {
            var publishInfo = new MqttPublishInfo(topic, new byte[0]);

            var(connectionRegistry, identityProvider) = GetHandlerDependencies();

            var sut = new TelemetryHandler(connectionRegistry, identityProvider);

            var isHandled = await sut.HandleAsync(publishInfo);

            Assert.True(isHandled);
        }
예제 #4
0
        public async Task DoesNotHandleUnknownClient()
        {
            var publishInfo = new MqttPublishInfo("$edgehub/device_id/messages/events/prop1=val1&prop2=val2", new byte[0]);

            var(connectionRegistry, identityProvider) = GetHandlerDependencies(shouldFindProxy: false);

            var sut = new TelemetryHandler(connectionRegistry, identityProvider);

            var isHandled = await sut.HandleAsync(publishInfo);

            Assert.False(isHandled);
        }
예제 #5
0
        public async Task DoesNotHandleUnknownClient()
        {
            var publishInfo = new MqttPublishInfo("$edgehub/captured_device_id/captured_module_id/twin/get/?$rid=123", new byte[0]);

            var(connectionRegistry, identityProvider) = GetHandlerDependencies(shouldFindProxy: false);

            var sut = new TelemetryHandler(connectionRegistry, identityProvider);

            var isHandled = await sut.HandleAsync(publishInfo);

            Assert.False(isHandled);
        }
예제 #6
0
        public async Task when_any_successful_response_is_returned_it_is_logged()
        {
            var logger = new FakeTelemetryLogger();
            var sut    = new TelemetryHandler(() => logger);

            sut.InnerHandler = new FakeDelegatingHandler();
            var invoker = new HttpMessageInvoker(sut);

            await invoker.SendAsync(new HttpRequestMessage(), CancellationToken.None);

            Assert.That(logger.ProxyToServiceErrorOccurredCalled, Is.False);
            Assert.That(logger.ErrorOccurredCalled, Is.False);
            Assert.That(logger.RequestCompletedCalled);
        }
예제 #7
0
        public TelemetryHandlerTests()
        {
            _telemetryService = new Mock <TelemetryService>(new TelemetryClientWrapper(new TelemetryClient()), new Dictionary <string, string>());
            _telemetryService.Setup(x => x.TrackDuration(TelemetryConstants.HttpHeaderDurationSeconds, It.IsAny <IDictionary <string, string> >()))
            .Callback((string name, IDictionary <string, string> properties) => { _properties = properties; }).CallBase();

            _sendAsync = () => Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("Hello, world!"),
            });
            _innerHandler = new FuncHttpMessageHandler(() => _sendAsync);
            _request      = new HttpRequestMessage(HttpMethod.Get, "http://example/robots.txt");
            _target       = new TelemetryHandler(_telemetryService.Object, _innerHandler);
            _httpClient   = new HttpClient(_target);
        }
예제 #8
0
        public async Task when_an_error_is_thrown_it_is_logged()
        {
            var logger = new FakeTelemetryLogger();
            var sut    = new TelemetryHandler(() => logger);

            sut.InnerHandler = new FakeDelegatingHandler(new Exception("Test"));
            var invoker = new HttpMessageInvoker(sut);

            var response = await invoker.SendAsync(new HttpRequestMessage(), CancellationToken.None);

            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.InternalServerError));
            Assert.That(response.Content, Is.Null);
            Assert.That(logger.ErrorOccurredCalled, Is.True);
            Assert.That(logger.RequestCompletedCalled, Is.True);
        }
예제 #9
0
        public async Task InternalMessageCapturesSystemProperties()
        {
            var deviceListenerCapture = new DeviceListenerCapture();

            var publishInfo = new MqttPublishInfo("$edgehub/device_id/messages/events/%24.uid=userid&%24.cid=corrid", new byte[] { 0x01, 0x02, 0x03 });

            var(connectionRegistry, _) = GetHandlerDependencies(listenerCapture: deviceListenerCapture);
            var identityProvider = Mock.Of <IIdentityProvider>();

            string passedDeviceId = null;

            Mock.Get(identityProvider)
            .Setup(ip => ip.Create(It.IsAny <string>()))
            .Returns((string device_id) =>
            {
                passedDeviceId = device_id;
                return(new DeviceIdentity("host", device_id));
            });

            var sut = new TelemetryHandler(connectionRegistry, identityProvider);

            var isHandled = await sut.HandleAsync(publishInfo);

            Assert.True(isHandled);
            Assert.NotNull(deviceListenerCapture.Captured);
            Assert.NotNull(deviceListenerCapture.Captured.LastCapturedMessage);

            var capturedMessage    = deviceListenerCapture.Captured.LastCapturedMessage;
            var expectedProperties = new Dictionary <string, string>()
            {
                ["userId"]             = "userid",
                ["cid"]                = "corrid",
                ["connectionDeviceId"] = passedDeviceId
            };

            Assert.Equal(expectedProperties, capturedMessage.SystemProperties);
        }
예제 #10
0
        public ClientPipelineBuilder(
            CosmosClient client,
            ConsistencyLevel?requestedClientConsistencyLevel,
            IReadOnlyCollection <RequestHandler> customHandlers,
            ClientTelemetry telemetry)
        {
            this.client = client ?? throw new ArgumentNullException(nameof(client));
            this.requestedClientConsistencyLevel = requestedClientConsistencyLevel;
            this.transportHandler = new TransportHandler(client);
            Debug.Assert(this.transportHandler.InnerHandler == null, nameof(this.transportHandler));

            this.invalidPartitionExceptionRetryHandler = new NamedCacheRetryHandler();
            Debug.Assert(this.invalidPartitionExceptionRetryHandler.InnerHandler == null, "The invalidPartitionExceptionRetryHandler.InnerHandler must be null to allow other handlers to be linked.");

            this.PartitionKeyRangeHandler = new PartitionKeyRangeHandler(client);
            Debug.Assert(this.PartitionKeyRangeHandler.InnerHandler == null, "The PartitionKeyRangeHandler.InnerHandler must be null to allow other handlers to be linked.");

            // Disable system usage for internal builds. Cosmos DB owns the VMs and already logs
            // the system information so no need to track it.
#if !INTERNAL
            this.diagnosticsHandler = new DiagnosticsHandler();
            Debug.Assert(this.diagnosticsHandler.InnerHandler == null, nameof(this.diagnosticsHandler));

            if (telemetry != null)
            {
                this.telemetryHandler = new TelemetryHandler(telemetry);
                Debug.Assert(this.telemetryHandler.InnerHandler == null, nameof(this.telemetryHandler));
            }
#else
            this.diagnosticsHandler = null;
            this.telemetryHandler   = null;
#endif

            this.UseRetryPolicy();
            this.AddCustomHandlers(customHandlers);
        }
예제 #11
0
        public MainWindow()
        {
            Logging.Make_Log_File();
            TelemetryInstaller.check();
            Telemetry       = new SCSSdkTelemetry();
            Telemetry.Data += Telemetry_Data_Handler;
            TelemetryInstaller.check();
            jobHandler  = new JobHandler();
            Truck_Daten = new Truck_Daten();


            InitializeComponent();

            Lade_Voreinstellungen();
            Lade_Themes();
            lade_Translations();
            //must be after lade_Translations
            telemetryhandler = new TelemetryHandler(this, translation);
            utils.Build_Registry();



            this.DataContext = Truck_Daten;
        }