public async Task Storage_WriteAsync_ShouldSave_GrainState_FirstTime_UnderOptimisticLockingControl()
        {
            //Arrange
            InitilizeProviderHost();
            ProviderExt = new ElasticStorageProvider();
            Provider = ProviderExt;
            var grainState = new MyTestGrainState();
            var currentVersion = grainState.Version;

            //Act
            await ProviderExt.Init("test", Runtime, Configuration);
            // due to difficulties in creating grainReference as object we test internal WriteStateToElasticAsync
            await ProviderExt.WriteStateToElasticAsync(nameof(MyGrainState), ExampleGrainRefKeyString, grainState);

            //Assert
            grainState.Version.Should().BeGreaterThan(currentVersion);
        }
        public async Task Storage_ClearStateAsync_Should_DeleteStored_GrainState()
        {
            //Arrange
            InitilizeProviderHost();
            ProviderExt = new ElasticStorageProvider();
            Provider = ProviderExt;
            var grainState = new MyTestGrainState() { Etag = "xxx", MyString = "mystring", MyInt = 1 };
            await ProviderExt.Init("test", Runtime, Configuration);
            // due to difficulties in creating grainReference as object we test internal WriteStateToElasticAsync
            await ProviderExt.WriteStateToElasticAsync(nameof(MyGrainState), ExampleGrainRefKeyString, grainState);

            //Act
            await ProviderExt.ClearStateInElasticAsync(nameof(MyGrainState), ExampleGrainRefKeyString, grainState);

            //Assert
            var anotherCopy = new MyTestGrainState();
            var newObject = new MyTestGrainState();
            await ProviderExt.ReadStateFromElasticAsync(nameof(MyGrainState), ExampleGrainRefKeyString, anotherCopy);
            anotherCopy.ShouldBeEquivalentTo(newObject, x => x.Excluding(t => t.Etag));
        }
        public async Task Storage_WriteAsync_Should_NOT_Allow_Store_updated_GrainState_WithIncorrectVersion()
        {
            //Arrange
            InitilizeProviderHost();
            ProviderExt = new ElasticStorageProvider();
            Provider = ProviderExt;
            var grainState = new MyTestGrainState();
            await ProviderExt.Init("test", Runtime, Configuration);
            // due to difficulties in creating grainReference as object we test internal WriteStateToElasticAsync
            await ProviderExt.WriteStateToElasticAsync(nameof(MyGrainState), ExampleGrainRefKeyString, grainState);
            grainState.Version = 222;//incorrect version

            //Act
            grainState.MyInt = 4;
            await ProviderExt.WriteStateToElasticAsync(nameof(MyGrainState), ExampleGrainRefKeyString, grainState);

            //Assert
            // throw ElasticsearchStorageException
        }