Beispiel #1
0
        private async Task <GrainState <TestStoreGrainState> > Test_PersistenceProvider_WriteRead(string grainTypeName,
                                                                                                  IStorageProvider store, GrainState <TestStoreGrainState> grainState = null, GrainId grainId = null)
        {
            GrainReference reference = this.fixture.InternalGrainFactory.GetGrain(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.Equal(grainState.State.A, storedGrainState.State.A);
            Assert.Equal(grainState.State.B, storedGrainState.State.B);
            Assert.Equal(grainState.State.C, storedGrainState.State.C);

            return(storedGrainState);
        }
Beispiel #2
0
        public async Task PersistenceProvider_Memory_FixedLatency_WriteRead()
        {
            const string testName        = nameof(PersistenceProvider_Memory_FixedLatency_WriteRead);
            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 = this.fixture.InternalGrainFactory.GetGrain(GrainId.NewId());
            var            state     = TestStoreGrainState.NewRandomState();
            Stopwatch      sw        = new Stopwatch();

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

            TimeSpan writeTime = sw.Elapsed;

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

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

            TimeSpan readTime = sw.Elapsed;

            output.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
            Assert.True(readTime >= expectedLatency, $"Read: Expected minimum latency = {expectedLatency} Actual = {readTime}");
        }
Beispiel #3
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 state = TestStoreGrainState.NewRandomState(stringLength);

            EnsureEnvironmentSupportsState(state);

            var storage = await InitAzureTableStorageProvider(useJson, testName);

            var initialState = state.State;

            var entity = new DynamicTableEntity();

            storage.ConvertToStorageFormat(initialState, entity);

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

            Assert.NotNull(convertedState);
            Assert.Equal(initialState.A, convertedState.A);
            Assert.Equal(initialState.B, convertedState.B);
            Assert.Equal(initialState.C, convertedState.C);
        }
Beispiel #4
0
        public async Task PersistenceProvider_Azure_ChangeWriteFormat(int?stringLength, string useJsonForFirstWrite, string useJsonForSecondWrite)
        {
            var testName = string.Format("{0}({1}={2},{3}={4},{5}={6})",
                                         nameof(PersistenceProvider_Azure_ChangeWriteFormat),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         "json1stW", useJsonForFirstWrite,
                                         "json2ndW", useJsonForSecondWrite);

            var grainState = TestStoreGrainState.NewRandomState(stringLength);

            EnsureEnvironmentSupportsState(grainState);

            var grainId = GrainId.NewId();

            var store = await InitAzureTableStorageProvider(useJsonForFirstWrite, testName);

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

            grainState      = TestStoreGrainState.NewRandomState(stringLength);
            grainState.ETag = "*";

            store = await InitAzureTableStorageProvider(useJsonForSecondWrite, testName);

            await Test_PersistenceProvider_WriteRead(testName, store, grainState, grainId);
        }
Beispiel #5
0
        public async Task DynamoDBStorage_ConvertToFromStorageFormat(int?stringLength, bool useJson)
        {
            var testName = string.Format("{0}({1} = {2}, {3} = {4})",
                                         nameof(DynamoDBStorage_ConvertToFromStorageFormat),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         nameof(useJson), useJson);

            var state = TestStoreGrainState.NewRandomState(stringLength);

            EnsureEnvironmentSupportsState(state);

            var storage = await InitDynamoDBGrainStorage(useJson);

            var initialState = state.State;

            var entity = new GrainStateRecord();

            storage.ConvertToStorageFormat(initialState, entity);

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

            Assert.NotNull(convertedState);
            Assert.Equal(initialState.A, convertedState.A);
            Assert.Equal(initialState.B, convertedState.B);
            Assert.Equal(initialState.C, convertedState.C);
        }
Beispiel #6
0
        public async Task PersistenceProvider_Memory_FixedLatency_WriteRead()
        {
            const string testName               = nameof(PersistenceProvider_Memory_FixedLatency_WriteRead);
            TimeSpan     expectedLatency        = TimeSpan.FromMilliseconds(200);
            MemoryGrainStorageWithLatency store = new MemoryGrainStorageWithLatency(testName, new MemoryStorageWithLatencyOptions()
            {
                Latency       = expectedLatency,
                MockCallsOnly = true
            }, NullLoggerFactory.Instance, this.providerRuntime.ServiceProvider.GetService <IGrainFactory>());

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

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

            TimeSpan writeTime = sw.Elapsed;

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

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

            TimeSpan readTime = sw.Elapsed;

            this.output.WriteLine("{0} - Read time = {1}", store.GetType().FullName, readTime);
            Assert.True(readTime >= expectedLatency, $"Read: Expected minimum latency = {expectedLatency} Actual = {readTime}");
        }
Beispiel #7
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);
        }
        public async Task PersistenceProvider_DynamoDB_WriteClearRead(int?stringLength, bool useJson)
        {
            var testName = string.Format("{0}({1} = {2}, {3} = {4})",
                                         nameof(PersistenceProvider_DynamoDB_WriteClearRead),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         nameof(useJson), useJson);

            var grainState = TestStoreGrainState.NewRandomState(stringLength);

            EnsureEnvironmentSupportsState(grainState);

            var store = await InitDynamoDBGrainStorage(useJson);

            await Test_PersistenceProvider_WriteClearRead(testName, store, grainState);
        }
Beispiel #9
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);
        }
        public async Task PersistenceProvider_DynamoDB_ChangeReadFormat(int?stringLength, bool useJsonForWrite, bool useJsonForRead)
        {
            var testName = string.Format("{0}({1} = {2}, {3} = {4}, {5} = {6})",
                                         nameof(PersistenceProvider_DynamoDB_ChangeReadFormat),
                                         nameof(stringLength), stringLength == null ? "default" : stringLength.ToString(),
                                         nameof(useJsonForWrite), useJsonForWrite,
                                         nameof(useJsonForRead), useJsonForRead);

            var grainState = TestStoreGrainState.NewRandomState(stringLength);

            EnsureEnvironmentSupportsState(grainState);
            var grainId = GrainId.Create("test", Guid.NewGuid().ToString("N"));

            var store = await InitDynamoDBGrainStorage(useJsonForWrite);

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

            store = await InitDynamoDBGrainStorage(useJsonForRead);

            await Test_PersistenceProvider_Read(testName, store, grainState, grainId);
        }
        private async Task <GrainState <TestStoreGrainState> > Test_PersistenceProvider_WriteClearRead(string grainTypeName,
                                                                                                       IGrainStorage store, GrainState <TestStoreGrainState> grainState = null, GrainId grainId = default)
        {
            GrainReference reference = (GrainReference)this.fixture.InternalGrainFactory.GetGrain(grainId.IsDefault ? (GrainId)LegacyGrainId.NewId() : grainId);

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

            Stopwatch sw = new Stopwatch();

            sw.Start();

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

            TimeSpan writeTime = sw.Elapsed;

            sw.Restart();

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

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

            TimeSpan readTime = sw.Elapsed;

            this.output.WriteLine("{0} - Write time = {1} Read time = {2}", store.GetType().FullName, writeTime, readTime);
            Assert.NotNull(storedGrainState.State);
            Assert.Equal(default(string), storedGrainState.State.A);
            Assert.Equal(default(int), storedGrainState.State.B);
            Assert.Equal(default(long), storedGrainState.State.C);

            return(storedGrainState);
        }