Ejemplo n.º 1
0
        public void TestNothingChanges()
        {
            var oldCache   = new DataReaderPartition <TestEntity>();
            var newCache   = new DataReaderPartition <TestEntity>();
            var newElement = new TestEntity
            {
                PartitionKey = "PK",
                RowKey       = "RK",
                TimeStamp    = "0"
            };

            oldCache.Update(newElement);
            newCache.Update(newElement);

            var updated = new List <TestEntity>();
            var deleted = new List <TestEntity>();


            oldCache.FindDifference(newCache,
                                    itm => updated.Add(itm),
                                    itm => deleted.Add(itm));

            Assert.AreEqual(0, updated.Count);
            Assert.AreEqual(0, deleted.Count);
        }
        private void InitPartition(string partitionKey, IReadOnlyList <T> items)
        {
            IReadOnlyList <T> updated;
            IReadOnlyList <T> deleted;

            _lock.EnterWriteLock();
            try
            {
                var oldPartition = _cache.ContainsKey(partitionKey)
                    ? _cache[partitionKey]
                    : null;

                _cache[partitionKey] = new DataReaderPartition <T>();

                foreach (var item in items)
                {
                    if (!_cache.ContainsKey(item.PartitionKey))
                    {
                        _cache.Add(item.PartitionKey, new DataReaderPartition <T>());
                    }

                    var partition = _cache[item.PartitionKey];

                    partition.Update(item);
                }

                if (oldPartition == null)
                {
                    NotifyChanged(_cache[partitionKey].GetRows().ToList());
                    return;
                }

                (updated, deleted) = oldPartition.FindDifference(_cache[partitionKey]);
            }
            finally
            {
                _lock.ExitWriteLock();
            }


            if (updated != null)
            {
                NotifyChanged(updated);
            }

            if (deleted != null)
            {
                NotifyDeleted(deleted);
            }
        }
Ejemplo n.º 3
0
        public void TestComplexUpdateDeleteChanges()
        {
            var oldCache = new DataReaderPartition <TestEntity>();
            var newCache = new DataReaderPartition <TestEntity>();
            var element1 = new TestEntity
            {
                PartitionKey = "PK1",
                RowKey       = "RK1",
                TimeStamp    = "1"
            };
            var element2 = new TestEntity
            {
                PartitionKey = "PK2",
                RowKey       = "RK2",
                TimeStamp    = "2"
            };

            var element3 = new TestEntity
            {
                PartitionKey = "PK3",
                RowKey       = "RK3",
                TimeStamp    = "3"
            };


            oldCache.Update(element1);
            oldCache.Update(element2);

            newCache.Update(element2);
            newCache.Update(element3);

            var updated = new List <TestEntity>();
            var deleted = new List <TestEntity>();


            oldCache.FindDifference(newCache,
                                    itm => updated.Add(itm),
                                    itm => deleted.Add(itm));

            Assert.AreEqual(1, updated.Count);
            Assert.AreEqual(1, deleted.Count);
            Assert.AreEqual("PK3", updated[0].PartitionKey);
            Assert.AreEqual("PK1", deleted[0].PartitionKey);
        }