private void MergeComponentProperties(LdValue.ObjectBuilder builder, object component,
                                              string defaultPropertyName)
        {
            if (!(component is IDiagnosticDescription))
            {
                if (!string.IsNullOrEmpty(defaultPropertyName))
                {
                    builder.Add(defaultPropertyName, "custom");
                }
                return;
            }
            var componentDesc = (component as IDiagnosticDescription).DescribeConfiguration(BasicConfig);

            if (!string.IsNullOrEmpty(defaultPropertyName))
            {
                builder.Add(defaultPropertyName, componentDesc.IsString ? componentDesc : LdValue.Of("custom"));
            }
            else if (componentDesc.Type == LdValueType.Object)
            {
                foreach (KeyValuePair <string, LdValue> prop in componentDesc.AsDictionary(LdValue.Convert.Json))
                {
                    builder.Add(prop.Key, prop.Value); // TODO: filter allowable properties
                }
            }
        }
        private void TestDiagnosticConfig(
            Func <ConfigurationBuilder, ConfigurationBuilder> modConfig,
            Func <EventProcessorBuilder, EventProcessorBuilder> modEvents,
            LdValue.ObjectBuilder expected
            )
        {
            var eventsBuilder = Components.SendEvents()
                                .EventSender(testEventSender);

            modEvents?.Invoke(eventsBuilder);
            var configBuilder = BasicConfig()
                                .DataSource(null)
                                .Events(eventsBuilder)
                                .Http(Components.HttpConfiguration().MessageHandler(new StubMessageHandler(HttpStatusCode.Unauthorized)))
                                .StartWaitTime(testStartWaitTime);

            configBuilder = modConfig is null ? configBuilder : modConfig(configBuilder);
            using (var client = new LdClient(configBuilder.Build()))
            {
                var payload = testEventSender.RequirePayload();

                Assert.Equal(EventDataKind.DiagnosticEvent, payload.Kind);
                Assert.Equal(1, payload.EventCount);

                var data = JsonOf(payload.Data);
                AssertJsonEqual(JsonFromValue("diagnostic-init"), data.Property("kind"));

                AssertJsonEqual(JsonOf(expected.Build().ToJsonString()), data.Property("configuration"));
            }
        }
        private void TestDiagnosticConfig(
            Func <ConfigurationBuilder, ConfigurationBuilder> modConfig,
            Func <EventProcessorBuilder, EventProcessorBuilder> modEvents,
            LdValue.ObjectBuilder expected
            )
        {
            var eventsBuilder = Components.SendEvents()
                                .EventSender(_testEventSender);

            modEvents?.Invoke(eventsBuilder);
            var configBuilder = BasicConfig()
                                .DataSource(Components.StreamingDataSource())
                                .Events(eventsBuilder)
                                .Http(Components.HttpConfiguration().MessageHandler(Error401Response.AsMessageHandler()));

            modConfig?.Invoke(configBuilder);
            using (var client = TestUtil.CreateClient(configBuilder.Build(), BasicUser, testStartWaitTime))
            {
                var data = ExpectDiagnosticEvent();

                AssertJsonEqual(JsonFromValue("diagnostic-init"), data.Property("kind"));

                AssertJsonEqual(JsonOf(expected.Build().ToJsonString()), data.Property("configuration"));
            }
        }
Example #4
0
        private void TestDiagnosticConfig(
            Func <ConfigurationBuilder, ConfigurationBuilder> modConfig,
            Func <EventProcessorBuilder, EventProcessorBuilder> modEvents,
            LdValue.ObjectBuilder expected
            )
        {
            var eventsBuilder = Components.SendEvents()
                                .EventSender(testEventSender);

            modEvents?.Invoke(eventsBuilder);
            var configBuilder = Configuration.Builder(sdkKey)
                                .Events(eventsBuilder)
                                .Http(Components.HttpConfiguration().MessageHandler(new StubMessageHandler(HttpStatusCode.Unauthorized)))
                                .Logging(Components.Logging(testLogging))
                                .StartWaitTime(testStartWaitTime);

            modConfig?.Invoke(configBuilder);
            using (var client = new LdClient(configBuilder.Build()))
            {
                var payload = testEventSender.RequirePayload();

                Assert.Equal(EventDataKind.DiagnosticEvent, payload.Kind);
                Assert.Equal(1, payload.EventCount);

                var data = LdValue.Parse(payload.Data);
                Assert.Equal("diagnostic-init", data.Get("kind").AsString);

                AssertHelpers.JsonEqual(expected.Build(), data.Get("configuration"));
            }
        }
Example #5
0
 /// <summary>
 /// Adds the standard properties for polling.
 /// </summary>
 /// <param name="builder">the object builder</param>
 /// <param name="customPollingBaseUri">true if the SDK is using a custom base URI for polling</param>
 /// <param name="pollingInterval">the polling interval</param>
 /// <returns>the builder</returns>
 public static LdValue.ObjectBuilder WithPollingProperties(
     this LdValue.ObjectBuilder builder,
     bool customPollingBaseUri,
     TimeSpan pollingInterval
     ) =>
 builder.Set("streamingDisabled", true)
 .Set("customBaseURI", customPollingBaseUri)
 .Set("pollingIntervalMillis", pollingInterval.TotalMilliseconds);
Example #6
0
 /// <summary>
 /// Adds the standard properties for streaming.
 /// </summary>
 /// <param name="builder">the object builder</param>
 /// <param name="customStreamingBaseUri">true if the SDK is using a custom base URI for streaming</param>
 /// <param name="customPollingBaseUri">true if the SDK is using a custom base URI for polling</param>
 /// <param name="initialReconnectDelay">the initial reconnect delay</param>
 /// <returns>the builder</returns>
 public static LdValue.ObjectBuilder WithStreamingProperties(
     this LdValue.ObjectBuilder builder,
     bool customStreamingBaseUri,
     bool customPollingBaseUri,
     TimeSpan initialReconnectDelay
     ) =>
 builder.Set("streamingDisabled", false)
 .Set("customBaseURI", customPollingBaseUri)
 .Set("customStreamURI", customStreamingBaseUri)
 .Set("reconnectTimeMillis", initialReconnectDelay.TotalMilliseconds);
Example #7
0
 public static LdValue.ObjectBuilder WithEventsDefaults(this LdValue.ObjectBuilder b) =>
 b.Add("allAttributesPrivate", false)
 .Add("customEventsURI", false)
 .Add("diagnosticRecordingIntervalMillis", EventProcessorBuilder.DefaultDiagnosticRecordingInterval.TotalMilliseconds)
 .Add("eventsCapacity", EventProcessorBuilder.DefaultCapacity)
 .Add("eventsFlushIntervalMillis", EventProcessorBuilder.DefaultFlushInterval.TotalMilliseconds)
 .Add("inlineUsersInEvents", false)
 .Add("samplingInterval", 0)
 .Add("userKeysCapacity", EventProcessorBuilder.DefaultUserKeysCapacity)
 .Add("userKeysFlushIntervalMillis", EventProcessorBuilder.DefaultUserKeysFlushInterval.TotalMilliseconds);
Example #8
0
 /// <summary>
 /// Adds the standard properties for events configuration.
 /// </summary>
 /// <param name="builder">the object builder</param>
 /// <param name="config">the standard event properties</param>
 /// <param name="customEventsBaseUri">true if the SDK is using a custom base URI for events</param>
 /// <returns>the builder</returns>
 public static LdValue.ObjectBuilder WithEventProperties(
     this LdValue.ObjectBuilder builder,
     EventsConfiguration config,
     bool customEventsBaseUri
     ) =>
 builder.Set("allAttributesPrivate", config.AllAttributesPrivate)
 .Set("customEventsURI", customEventsBaseUri)
 .Set("diagnosticRecordingIntervalMillis", config.DiagnosticRecordingInterval.TotalMilliseconds)
 .Set("eventsCapacity", config.EventCapacity)
 .Set("eventsFlushIntervalMillis", config.EventFlushInterval.TotalMilliseconds)
 .Set("inlineUsersInEvents", config.InlineUsersInEvents);
Example #9
0
 /// <summary>
 /// Adds the standard <c>startWaitMillis</c> property.
 /// </summary>
 /// <param name="builder">the object builder</param>
 /// <param name="value">the value</param>
 /// <returns>the builder</returns>
 public static LdValue.ObjectBuilder WithStartWaitTime(this LdValue.ObjectBuilder builder, TimeSpan value) =>
 builder.Set("startWaitMillis", value.TotalMilliseconds);
Example #10
0
 /// <summary>
 /// Adds the standard properties for HTTP configuration.
 /// </summary>
 /// <param name="builder">the object builder</param>
 /// <param name="props">the standard HTTP properties</param>
 /// <returns>the builder</returns>
 public static LdValue.ObjectBuilder WithHttpProperties(this LdValue.ObjectBuilder builder, HttpProperties props) =>
 builder.Set("connectTimeoutMillis", props.ConnectTimeout.TotalMilliseconds)
 .Set("socketTimeoutMillis", props.ReadTimeout.TotalMilliseconds)
 .Set("usingProxy", DetectProxy(props))
 .Set("usingProxyAuthenticator", DetectProxyAuth(props));
Example #11
0
 /// <summary>
 /// Adds the standard <c>autoAliasingOptOut</c> property.
 /// </summary>
 /// <param name="builder">the object builder</param>
 /// <param name="value">the value</param>
 /// <returns>the builder</returns>
 public static LdValue.ObjectBuilder WithAutoAliasingOptOut(this LdValue.ObjectBuilder builder, bool value) =>
 builder.Set("autoAliasingOptOut", value);
 private void AddDiagnosticCommonFields(LdValue.ObjectBuilder fieldsBuilder, string kind, DateTime creationDate)
 {
     fieldsBuilder.Add("kind", kind);
     fieldsBuilder.Add("id", EncodeDiagnosticId(DiagnosticId));
     fieldsBuilder.Add("creationDate", UnixMillisecondTime.FromDateTime(creationDate).Value);
 }
 public static LdValue.ObjectBuilder WithPollingDefaults(this LdValue.ObjectBuilder b) =>
 b.Set("streamingDisabled", true)
 .Set("pollingIntervalMillis", PollingDataSourceBuilder.DefaultPollInterval.TotalMilliseconds)
 .Remove("customStreamURI")
 .Remove("reconnectTimeMillis");
Example #14
0
 public static LdValue.ObjectBuilder WithStreamingDefaults(this LdValue.ObjectBuilder b) =>
 b.Add("customBaseURI", false)
 .Add("customStreamURI", false)
 .Add("streamingDisabled", false)
 .Add("reconnectTimeMillis", StreamingDataSourceBuilder.DefaultInitialReconnectDelay.TotalMilliseconds)
 .Add("usingRelayDaemon", false);
Example #15
0
 public static LdValue.ObjectBuilder WithStoreDefaults(this LdValue.ObjectBuilder b) =>
 b.Add("dataStoreType", "memory");