示例#1
0
        public async Task PersistenceProvider_Memory_FixedLatency_WriteRead()
        {
            string   testName        = TestContext.TestName;
            TimeSpan expectedLatency = TimeSpan.FromMilliseconds(200);

            IStorageProvider store = new MemoryStorageWithLatency();

            providerCfgProps.Add("Latency", expectedLatency.ToString());
            providerCfgProps.Add("MockCalls", "true");
            var cfg = new ProviderConfiguration(providerCfgProps, null);
            await store.Init(testName, storageProviderManager, cfg);

            GrainReference      reference = GrainReference.FromGrainId(GrainId.NewId());
            TestStoreGrainState state     = TestStoreGrainState.NewRandomState();
            Stopwatch           sw        = new Stopwatch();

            sw.Start();
            await store.WriteStateAsync(testName, reference, state);

            TimeSpan writeTime = sw.Elapsed;

            Console.WriteLine("{0} - Write time = {1}", store.GetType().FullName, writeTime);
            Assert.IsTrue(writeTime >= expectedLatency, "Write: Expected minimum latency = {0} Actual = {1}", expectedLatency, writeTime);

            sw.Restart();
            TestStoreGrainState storedState = new TestStoreGrainState();
            await store.ReadStateAsync(testName, reference, storedState);

            TimeSpan readTime = sw.Elapsed;

            Console.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
            Assert.IsTrue(readTime >= expectedLatency, "Read: Expected minimum latency = {0} Actual = {1}", expectedLatency, readTime);
        }
示例#2
0
        public void GrainState_Store_WriteRead()
        {
            string name = TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference  = GrainReference.FromGrainId(GrainId.NewId());
            var            grainState = TestStoreGrainState.NewRandomState();
            var            state      = grainState.State;
            Stopwatch      sw         = new Stopwatch();

            sw.Start();
            IList <Tuple <string, string> > keys = new[]
            {
                Tuple.Create("GrainType", name),
                Tuple.Create("GrainId", reference.GrainId.GetPrimaryKey().ToString("N"))
            }.ToList();

            store.WriteRow(keys, AsDictionary(state), grainState.ETag);
            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();
            var      data     = store.ReadRow(keys);
            TimeSpan readTime = sw.Elapsed;

            Console.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            Assert.AreEqual(state.A, data["A"], "A");
            Assert.AreEqual(state.B, data["B"], "B");
            Assert.AreEqual(state.C, data["C"], "C");
        }
示例#3
0
        public void Store_WriteRead()
        {
            string name = TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference = GrainReference.FromGrainId(GrainId.NewId());
            var            state     = TestStoreGrainState.NewRandomState();
            Stopwatch      sw        = new Stopwatch();

            sw.Start();
            var keys            = GetKeys(name, reference);
            var stateProperties = AsDictionary(state.State);

            store.WriteRow(keys, stateProperties, state.ETag);
            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();
            var      data     = store.ReadRow(keys);
            TimeSpan readTime = sw.Elapsed;

            Console.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            Assert.AreEqual(state.State.A, data["A"], "A");
            Assert.AreEqual(state.State.B, data["B"], "B");
            Assert.AreEqual(state.State.C, data["C"], "C");
        }
示例#4
0
        private async Task <GrainState <TestStoreGrainState> > Test_PersistenceProvider_WriteRead(string grainTypeName,
                                                                                                  IStorageProvider store, GrainState <TestStoreGrainState> grainState = null, GrainId grainId = null)
        {
            GrainReference reference = GrainReference.FromGrainId(grainId ?? GrainId.NewId());

            if (grainState == null)
            {
                grainState = TestStoreGrainState.NewRandomState();
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            await store.WriteStateAsync(grainTypeName, reference, grainState);

            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();

            var storedGrainState = new GrainState <TestStoreGrainState>
            {
                State = new TestStoreGrainState()
            };
            await store.ReadStateAsync(grainTypeName, reference, storedGrainState);

            TimeSpan readTime = sw.Elapsed;

            output.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            Assert.AreEqual(grainState.State.A, storedGrainState.State.A, "A");
            Assert.AreEqual(grainState.State.B, storedGrainState.State.B, "B");
            Assert.AreEqual(grainState.State.C, storedGrainState.State.C, "C");

            return(storedGrainState);
        }
示例#5
0
        public async Task AzureTableStorage_ConvertToFromStorageFormat(int?stringLength, string useJson)
        {
            var testName = string.Format("{0}({1} = {2}, {3} = {4})",
                                         nameof(AzureTableStorage_ConvertToFromStorageFormat),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         nameof(useJson), useJson);

            var storage = await InitAzureTableStorageProvider(useJson, testName);

            var logger = TraceLogger.GetLogger("PersistenceProviderTests");

            storage.InitLogger(logger);

            var initialState = TestStoreGrainState.NewRandomState(stringLength).State;
            var entity       = new DynamicTableEntity();

            storage.ConvertToStorageFormat(initialState, entity);

            var convertedState = (TestStoreGrainState)storage.ConvertFromStorageFormat(entity);

            Assert.IsNotNull(convertedState, "Converted state");
            Assert.AreEqual(initialState.A, convertedState.A, "A");
            Assert.AreEqual(initialState.B, convertedState.B, "B");
            Assert.AreEqual(initialState.C, convertedState.C, "C");
        }
示例#6
0
        public void Store_WriteRead()
        {
            string name = Guid.NewGuid().ToString();//TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference = fixture.InternalGrainFactory.GetGrain(GrainId.NewId());
            var            state     = TestStoreGrainState.NewRandomState();
            Stopwatch      sw        = new Stopwatch();

            sw.Start();
            var keys            = GetKeys(name, reference);
            var stateProperties = AsDictionary(state.State);

            store.WriteRow(keys, stateProperties, state.ETag);
            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();
            var      data     = store.ReadRow(keys);
            TimeSpan readTime = sw.Elapsed;

            output.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            Assert.Equal(state.State.A, data["A"]);   // "A"
            Assert.Equal(state.State.B, data["B"]);   // "B"
            Assert.Equal(state.State.C, data["C"]);   // "C"
        }
示例#7
0
        private static async Task Test_PersistenceProvider_WriteRead(string grainTypeName, IStorageProvider store)
        {
            GrainReference reference = GrainReference.FromGrainId(GrainId.NewId());
            var            state     = TestStoreGrainState.NewRandomState();
            Stopwatch      sw        = new Stopwatch();

            sw.Start();
            await store.WriteStateAsync(grainTypeName, reference, state);

            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();
            var storedGrainState = new GrainState <TestStoreGrainState>
            {
                State = new TestStoreGrainState()
            };
            await store.ReadStateAsync(grainTypeName, reference, storedGrainState);

            TimeSpan readTime = sw.Elapsed;

            Console.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            var storedState = storedGrainState.State;

            Assert.AreEqual(state.State.A, storedState.A, "A");
            Assert.AreEqual(state.State.B, storedState.B, "B");
            Assert.AreEqual(state.State.C, storedState.C, "C");
        }
示例#8
0
        public void GrainState_Store_WriteRead()
        {
            string name = Guid.NewGuid().ToString();//TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference  = (GrainReference)this.fixture.InternalGrainFactory.GetGrain(LegacyGrainId.NewId());
            var            grainState = TestStoreGrainState.NewRandomState();
            var            state      = grainState.State;
            Stopwatch      sw         = new Stopwatch();

            sw.Start();
            IList <Tuple <string, string> > keys = new[]
            {
                Tuple.Create("GrainType", name),
                Tuple.Create("GrainId", reference.GrainId.ToString())
            }.ToList();

            store.WriteRow(keys, AsDictionary(state), grainState.ETag);
            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();
            var      data     = store.ReadRow(keys);
            TimeSpan readTime = sw.Elapsed;

            output.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            Assert.Equal(state.A, data["A"]);   // "A"
            Assert.Equal(state.B, data["B"]);   // "B"
            Assert.Equal(state.C, data["C"]);   // "C"
        }
示例#9
0
        public async Task PersistenceProvider_Azure_WriteClearRead(int?stringLength, string useJson)
        {
            var testName = string.Format("{0}({1} = {2}, {3} = {4})",
                                         nameof(PersistenceProvider_Azure_WriteClearRead),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         nameof(useJson), useJson);

            var grainState = TestStoreGrainState.NewRandomState(stringLength);

            var store = await InitAzureTableStorageProvider(useJson, testName);

            await Test_PersistenceProvider_WriteClearRead(testName, store, grainState);
        }
示例#10
0
        public void Store_Delete()
        {
            string name = Guid.NewGuid().ToString();//TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference = this.fixture.InternalGrainFactory.GetGrain(LegacyGrainId.NewId());
            var            data      = TestStoreGrainState.NewRandomState();

            output.WriteLine("Using store = {0}", store.GetType().FullName);
            Stopwatch sw = new Stopwatch();

            var keys = GetKeys(name, reference);

            sw.Restart();
            string eTag = store.WriteRow(keys, AsDictionary(data.State), null);

            output.WriteLine("Write returned Etag={0} after {1} {2}", eTag, sw.Elapsed, StorageProviderUtils.PrintOneWrite(keys, data, eTag));

            sw.Restart();
            var storedData = store.ReadRow(keys);

            output.WriteLine("Read returned {0} after {1}", StorageProviderUtils.PrintOneWrite(keys, storedData, eTag), sw.Elapsed);
            Assert.NotNull(data); // Should get some data from Read

            sw.Restart();
            bool ok = store.DeleteRow(keys, eTag);

            Assert.True(ok, $"Row deleted OK after {sw.Elapsed}. Etag={eTag} Keys={StorageProviderUtils.PrintKeys(keys)}");

            sw.Restart();
            storedData = store.ReadRow(keys); // Try to re-read after delete
            output.WriteLine("Re-Read took {0} and returned {1}", sw.Elapsed, StorageProviderUtils.PrintData(storedData));
            Assert.NotNull(data);             // Should not get null data from Re-Read
            Assert.True(storedData.Count == 0, $"Should get no data from Re-Read but got: {StorageProviderUtils.PrintData(storedData)}");

            sw.Restart();
            const string oldEtag = null;

            eTag = store.WriteRow(keys, storedData, oldEtag);
            output.WriteLine("Write for Keys={0} Etag={1} Data={2} returned New Etag={3} after {4}",
                             StorageProviderUtils.PrintKeys(keys), oldEtag, StorageProviderUtils.PrintData(storedData),
                             eTag, sw.Elapsed);

            sw.Restart();
            ok = store.DeleteRow(keys, eTag);
            Assert.True(ok, $"Row deleted OK after {sw.Elapsed}. Etag={eTag} Keys={StorageProviderUtils.PrintKeys(keys)}");
        }
示例#11
0
        public void Store_Delete()
        {
            string name = TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference          = GrainReference.FromGrainId(GrainId.NewId());
            IDictionary <string, object> data = TestStoreGrainState.NewRandomState().AsDictionary();

            Console.WriteLine("Using store = {0}", store.GetType().FullName);
            Stopwatch sw = new Stopwatch();

            var keys = GetKeys(name, reference);

            sw.Restart();
            string eTag = store.WriteRow(keys, data, null);

            Console.WriteLine("Write returned Etag={0} after {1} {2}", eTag, sw.Elapsed, StorageProviderUtils.PrintOneWrite(keys, data, eTag));

            sw.Restart();
            data = store.ReadRow(keys);
            Console.WriteLine("Read returned {0} after {1}", StorageProviderUtils.PrintOneWrite(keys, data, eTag), sw.Elapsed);
            Assert.IsNotNull(data, "Should get some data from Read");

            sw.Restart();
            bool ok = store.DeleteRow(keys, eTag);

            Assert.IsTrue(ok, "Row deleted OK after {0}. Etag={1} Keys={2}", sw.Elapsed, eTag, StorageProviderUtils.PrintKeys(keys));

            sw.Restart();
            data = store.ReadRow(keys); // Try to re-read after delete
            Console.WriteLine("Re-Read took {0} and returned {1}", sw.Elapsed, StorageProviderUtils.PrintData(data));
            Assert.IsNotNull(data, "Should not get null data from Re-Read");
            Assert.IsTrue(data.Count == 0, "Should get no data from Re-Read but got: {0}", StorageProviderUtils.PrintData(data));

            sw.Restart();
            const string oldEtag = null;

            eTag = store.WriteRow(keys, data, oldEtag);
            Console.WriteLine("Write for Keys={0} Etag={1} Data={2} returned New Etag={3} after {4}",
                              StorageProviderUtils.PrintKeys(keys), oldEtag, StorageProviderUtils.PrintData(data),
                              eTag, sw.Elapsed);

            sw.Restart();
            ok = store.DeleteRow(keys, eTag);
            Assert.IsTrue(ok, "Row deleted OK after {0}. Etag={1} Keys={2}", sw.Elapsed, eTag, StorageProviderUtils.PrintKeys(keys));
        }
示例#12
0
        public void AzureTableStorage_ConvertToFromStorageFormat()
        {
            TestStoreGrainState initialState = new TestStoreGrainState {
                A = "1", B = 2, C = 3
            };

            AzureTableStorage.GrainStateEntity entity = new AzureTableStorage.GrainStateEntity();
            var storage = new AzureTableStorage();
            var logger  = TraceLogger.GetLogger("PersistenceProviderTests");

            storage.InitLogger(logger);
            storage.ConvertToStorageFormat(initialState, entity);
            Assert.IsNotNull(entity.Data, "Entity.Data");
            var convertedState = (TestStoreGrainState)storage.ConvertFromStorageFormat(entity);

            Assert.IsNotNull(convertedState, "Converted state");
            Assert.AreEqual(initialState.A, convertedState.A, "A");
            Assert.AreEqual(initialState.B, convertedState.B, "B");
            Assert.AreEqual(initialState.C, convertedState.C, "C");
        }
示例#13
0
        public void Store_Read()
        {
            string name = TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference = GrainReference.FromGrainId(GrainId.NewId());
            TestStoreGrainState state = new TestStoreGrainState();
            var stateProperties = AsDictionary(state);
            var keys = GetKeys(name, reference);
            store.WriteRow(keys, stateProperties, null);
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var data = store.ReadRow(keys);
            TimeSpan readTime = sw.Elapsed;
            Console.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
            Assert.AreEqual(state.A, data["A"], "A");
            Assert.AreEqual(state.B, data["B"], "B");
            Assert.AreEqual(state.C, data["C"], "C");
        }
示例#14
0
        public void Store_Read()
        {
            string name = Guid.NewGuid().ToString();//TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference reference = GrainReference.FromGrainId(GrainId.NewId());
            TestStoreGrainState state = new TestStoreGrainState();
            var stateProperties = AsDictionary(state);
            var keys = GetKeys(name, reference);
            store.WriteRow(keys, stateProperties, null);
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var data = store.ReadRow(keys);
            TimeSpan readTime = sw.Elapsed;
            output.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
            Assert.AreEqual(state.A, data["A"], "A");
            Assert.AreEqual(state.B, data["B"], "B");
            Assert.AreEqual(state.C, data["C"], "C");
        }
示例#15
0
        public async Task PersistenceProvider_Azure_ChangeReadFormat(int?stringLength, string useJsonForWrite,
                                                                     string useJsonForRead)
        {
            var testName = string.Format("{0}({1} = {2}, {3} = {4}, {5} = {6})",
                                         nameof(PersistenceProvider_Azure_ChangeReadFormat),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         nameof(useJsonForWrite), useJsonForWrite,
                                         nameof(useJsonForRead), useJsonForRead);

            var grainState = TestStoreGrainState.NewRandomState(stringLength);
            var grainId    = GrainId.NewId();

            var store = await InitAzureTableStorageProvider(useJsonForWrite, testName);

            grainState = await Test_PersistenceProvider_WriteRead(testName, store,
                                                                  grainState, grainId);

            store = await InitAzureTableStorageProvider(useJsonForRead, testName);

            await Test_PersistenceProvider_Read(testName, store, grainState, grainId);
        }
示例#16
0
        public void Store_ReadMulti()
        {
            string name = Guid.NewGuid().ToString();//TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            // Write #1
            IList <Tuple <string, string> > keys = new[]
            {
                Tuple.Create("GrainType", name),
                Tuple.Create("GrainId", "1")
            }.ToList();
            var grainState = TestStoreGrainState.NewRandomState();
            var state      = grainState.State;

            state.A = name;
            store.WriteRow(keys, AsDictionary(state), grainState.ETag);

            // Write #2
            keys = new[]
            {
                Tuple.Create("GrainType", name),
                Tuple.Create("GrainId", "2")
            }.ToList();
            grainState = TestStoreGrainState.NewRandomState();
            state      = grainState.State;
            state.A    = name;
            store.WriteRow(keys, AsDictionary(state), grainState.ETag);

            // Multi Read
            keys = new[]
            {
                Tuple.Create("GrainType", name)
            }.ToList();

            var results = store.ReadMultiRow(keys);

            Assert.Equal(2, results.Count);   // "Count"
        }
示例#17
0
        public void Store_Read()
        {
            string name = TestContext.TestName;

            ILocalDataStore store = new HierarchicalKeyStore(2);

            GrainReference      reference = GrainReference.FromGrainId(GrainId.NewId());
            TestStoreGrainState state     = new TestStoreGrainState();
            Stopwatch           sw        = new Stopwatch();

            sw.Start();
            var keys = GetKeys(name, reference);
            TestStoreGrainState storedState = new TestStoreGrainState();
            var data = store.ReadRow(keys);

            storedState.SetAll(data);
            TimeSpan readTime = sw.Elapsed;

            Console.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
            Assert.AreEqual(state.A, storedState.A, "A");
            Assert.AreEqual(state.B, storedState.B, "B");
            Assert.AreEqual(state.C, storedState.C, "C");
        }
 public void AzureTableStorage_ConvertToFromStorageFormat()
 {
     TestStoreGrainState initialState = new TestStoreGrainState { A = "1", B = 2, C = 3 };
     AzureTableStorage.GrainStateEntity entity = new AzureTableStorage.GrainStateEntity();
     var storage = new AzureTableStorage();
     var logger = TraceLogger.GetLogger("PersistenceProviderTests");
     storage.InitLogger(logger);
     storage.ConvertToStorageFormat(initialState, entity);
     Assert.IsNotNull(entity.Data, "Entity.Data");
     var convertedState = (TestStoreGrainState)storage.ConvertFromStorageFormat(entity);
     Assert.IsNotNull(convertedState, "Converted state");
     Assert.AreEqual(initialState.A, convertedState.A, "A");
     Assert.AreEqual(initialState.B, convertedState.B, "B");
     Assert.AreEqual(initialState.C, convertedState.C, "C");
 }
 private static async Task Test_PersistenceProvider_Read(string grainTypeName, IStorageProvider store)
 {
     GrainReference reference = GrainReference.FromGrainId(GrainId.NewId());
     TestStoreGrainState state = new TestStoreGrainState();
     Stopwatch sw = new Stopwatch();
     var storedGrainState = new GrainState<TestStoreGrainState>
     {
         State = new TestStoreGrainState()
     };
     sw.Start();
     await store.ReadStateAsync(grainTypeName, reference, storedGrainState);
     TimeSpan readTime = sw.Elapsed;
     Console.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
     var storedState = storedGrainState.State;
     Assert.AreEqual(state.A, storedState.A, "A");
     Assert.AreEqual(state.B, storedState.B, "B");
     Assert.AreEqual(state.C, storedState.C, "C");
 }