private static EventSource <string> RunInitialPositionTest(string id, InitialPositionEnum expectedInitialPosition)
        {
            var config = TestUtility.GetConfig("Sources", id);
            var source = new MockEventSource <string>(new PluginContext(config, null, null));

            EventSource <string> .LoadCommonSourceConfig(config, source);

            Assert.Equal(expectedInitialPosition, source.InitialPosition);
            return(source);
        }
        /// <summary>
        /// A helper method to load the common config parameters.
        /// </summary>
        /// <param name="config">The config section for the source</param>
        /// <param name="source">The source to be configured</param>
        public static void LoadCommonSourceConfig(IConfiguration config, EventSource <T> source)
        {
            InitialPositionEnum initialPosition = InitialPositionEnum.EOS;
            string initialPositionConfig        = config["InitialPosition"];

            if (!string.IsNullOrEmpty(initialPositionConfig))
            {
                switch (initialPositionConfig.ToLower())
                {
                case "eos":
                    initialPosition = InitialPositionEnum.EOS;
                    break;

                case "0":
                    initialPosition = InitialPositionEnum.BOS;
                    break;

                case "bookmark":
                    initialPosition = InitialPositionEnum.Bookmark;
                    break;

                case "timestamp":
                    initialPosition = InitialPositionEnum.Timestamp;
                    string initialPositionTimeStamp = config["InitialPositionTimestamp"];
                    if (string.IsNullOrWhiteSpace(initialPositionTimeStamp))
                    {
                        throw new Exception("Missing initial position timestamp.");
                    }

                    try
                    {
                        source.InitialPositionTimestamp = DateTime.Parse(initialPositionTimeStamp, null, System.Globalization.DateTimeStyles.RoundtripKind);
                    }
                    catch
                    {
                        throw new Exception($"Invalid InitialPositionTimestamp {initialPositionTimeStamp}");
                    }

                    break;

                default:
                    throw new Exception($"Invalid InitialPosition {initialPositionConfig}");
                }
            }

            source.InitialPosition = initialPosition;
        }