示例#1
0
        public async Task ClearCacheTest1Async()
        {
            var propertyManager = new MockPropertyManagerWrapper
            {
                SubmitPropertyBatchAsyncFunc = Workflow3
            };

            Guid activityId = Guid.NewGuid();

            IVersionedPropertyStore versionedPropertyStore = await VersionedPropertyStore.CreateAsync(
                activityId, traceType, defaultStoreName, propertyManager, retryPolicyFactory).ConfigureAwait(false);

            IVersionedKeyValue vkv = await versionedPropertyStore.GetValueAsync(activityId, "A").ConfigureAwait(false);

            VerifyVersionedKeyValue(vkv, "Apple", 2, 1, workflow3Counter);

            IVersionedKeyValue vkv2 = await versionedPropertyStore.GetValueAsync(activityId, "A").ConfigureAwait(false);

            // verify that the counter hasn't been incremented since the actual property manager hasn't been invoked
            // but the value has been obtained from the cache
            VerifyVersionedKeyValue(vkv2, "Apple", 2, 1, workflow3Counter);

            versionedPropertyStore.ClearCache();

            IVersionedKeyValue vkv3 = await versionedPropertyStore.GetValueAsync(activityId, "A").ConfigureAwait(false);

            // verify that the counter has been incremented since the actual property manager has been invoked
            // since the value has been cleared from the cache
            VerifyVersionedKeyValue(vkv3, "Apple", 2, 2, workflow3Counter);

            Assert.AreEqual(workflow3Counter, 2);
        }
示例#2
0
        public async Task UpdateValueAsyncTest1Async()
        {
            var propertyManager = new MockPropertyManagerWrapper
            {
                SubmitPropertyBatchAsyncFunc = Workflow2
            };

            Guid activityId = Guid.NewGuid();

            IVersionedPropertyStore versionedPropertyStore = await VersionedPropertyStore.CreateAsync(
                activityId, traceType, defaultStoreName, propertyManager, retryPolicyFactory).ConfigureAwait(false);

            await versionedPropertyStore.UpdateValueAsync(activityId, "A", "Apple").ConfigureAwait(false);

            IVersionedKeyValue vkv = await versionedPropertyStore.GetValueAsync(activityId, "A");

            // Cache is updated correctly after UpdateValueAsync so hitting remote store is not needed
            VerifyVersionedKeyValue(vkv, "Apple", 0, 1, workflow2Counter);

            // now, get from the remote store. (workflow2 is modified to send appropriate return values)
            vkv = await versionedPropertyStore.GetValueAsync(activityId, "A", false);

            VerifyVersionedKeyValue(vkv, "Antelope", 25, 2, workflow2Counter);

            vkv = await versionedPropertyStore.GetValueAsync(activityId, "A");

            // verify cache is updated correctly
            VerifyVersionedKeyValue(vkv, "Antelope", 25, 2, workflow2Counter);
        }
示例#3
0
 private static void VerifyVersionedKeyValue(IVersionedKeyValue vkv, string value, long version, int expectedCounterValue, int actualCounterValue)
 {
     Assert.IsNotNull(vkv);
     Assert.AreEqual(vkv.Value, value);
     Assert.AreEqual(vkv.Version, version);
     Assert.AreEqual(expectedCounterValue, actualCounterValue);
 }
        private IVersionedKeyValue UpdateCache(Guid activityId, IVersionedKeyValue vkv)
        {
            lock (locker)
            {
                if (cachedProperties.ContainsKey(vkv.Key))
                {
                    var existingVkv = cachedProperties[vkv.Key];

                    if (existingVkv.Version >= vkv.Version)
                    {
                        traceType.WriteWarning(
                            "UpdateCache ignored for store name '{0}'. Current local cache data is newer than data to be updated. Current local cache data: {1}{2}Data to be updated: {3}{4}ActivityId: {5}",
                            storeName,
                            existingVkv,
                            Environment.NewLine,
                            vkv,
                            Environment.NewLine,
                            activityId);

                        return(existingVkv);
                    }
                }

                cachedProperties[vkv.Key] = vkv;
                return(vkv);
            }
        }
示例#5
0
        public async Task GetValueAsyncTest1Async()
        {
            var propertyManager = new MockPropertyManagerWrapper
            {
                SubmitPropertyBatchAsyncFunc = Workflow1
            };

            Guid activityId = Guid.NewGuid();

            IVersionedPropertyStore versionedPropertyStore = await VersionedPropertyStore.CreateAsync(
                activityId, traceType, defaultStoreName, propertyManager, retryPolicyFactory).ConfigureAwait(false);

            IVersionedKeyValue vkv = await versionedPropertyStore.GetValueAsync(activityId, "A").ConfigureAwait(false);

            VerifyVersionedKeyValue(vkv, "Apple", 2, 1, workflow1Counter);

            vkv = await versionedPropertyStore.GetValueAsync(activityId, "A").ConfigureAwait(false);

            // Verifying that remote store is not hit now and data is fetched from cache
            VerifyVersionedKeyValue(vkv, "Apple", 2, 1, workflow1Counter);
        }