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); }
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"); }
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"); }
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); }
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"); }
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" }
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"); }
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" }
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); }
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)}"); }
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)); }
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"); }
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"); }
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"); }
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); }
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" }
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"); }
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"); }