public FileDataSource(IDataSourceUpdates dataSourceUpdates, FileDataTypes.IFileReader fileReader,
                       List <string> paths, bool autoUpdate, Func <string, object> alternateParser, bool skipMissingPaths,
                       FileDataTypes.DuplicateKeysHandling duplicateKeysHandling,
                       Logger logger)
 {
     _logger            = logger;
     _dataSourceUpdates = dataSourceUpdates;
     _paths             = new List <string>(paths);
     _parser            = new FlagFileParser(alternateParser);
     _dataMerger        = new FlagFileDataMerger(duplicateKeysHandling);
     _fileReader        = fileReader;
     _skipMissingPaths  = skipMissingPaths;
     if (autoUpdate)
     {
         try
         {
             _reloader = new FileWatchingReloader(_paths, TriggerReload);
         }
         catch (Exception e)
         {
             LogHelpers.LogException(_logger, "Unable to watch files for auto-updating", e);
             _reloader = null;
         }
     }
     else
     {
         _reloader = null;
     }
 }
Esempio n. 2
0
        public void AddToData_DuplicateKeysHandling_Ignore()
        {
            const string key = "flag1";

            FeatureFlag initialFeatureFlag = new FeatureFlagBuilder(key).Version(0).Build();

            var flagData = new Dictionary <string, ItemDescriptor>
            {
                { key, new ItemDescriptor(1, initialFeatureFlag) }
            };
            var          segmentData = new Dictionary <string, ItemDescriptor>();
            FlagFileData fileData    = new FlagFileData
            {
                Flags = new Dictionary <string, FeatureFlag>
                {
                    {
                        key,
                        new FeatureFlagBuilder(key).Version(1).Build()
                    }
                }
            };

            FlagFileDataMerger merger = new FlagFileDataMerger(FileDataTypes.DuplicateKeysHandling.Ignore);

            merger.AddToData(fileData, flagData, segmentData);

            ItemDescriptor postFeatureFlag = flagData[key];

            Assert.Same(initialFeatureFlag, postFeatureFlag.Item);
            Assert.Equal(1, postFeatureFlag.Version);
        }
        public void AddToData_DuplicateKeysHandling_Throw()
        {
            const string key = "flag1";

            FeatureFlag initialFeatureFlag = new FeatureFlagBuilder(key).Version(0).Build();

            var flagData = new Dictionary <string, ItemDescriptor>
            {
                { key, new ItemDescriptor(1, initialFeatureFlag) }
            };
            var segmentData = new Dictionary <string, ItemDescriptor>();
            var fileData    = new DataSetBuilder()
                              .Flags(new FeatureFlagBuilder(key).Version(1).Build()).Build();

            FlagFileDataMerger merger = new FlagFileDataMerger(FileDataTypes.DuplicateKeysHandling.Throw);

            Exception err = Assert.Throws <Exception>(() =>
            {
                merger.AddToData(fileData, flagData, segmentData);
            });

            Assert.Equal("in \"features\", key \"flag1\" was already defined", err.Message);

            ItemDescriptor postFeatureFlag = flagData[key];

            Assert.Same(initialFeatureFlag, postFeatureFlag.Item);
            Assert.Equal(1, postFeatureFlag.Version);
        }