public async Task GeneratorDerivedGrain2ControlFlow() { var grainName = typeof(GeneratorTestDerivedGrain2).FullName; IGeneratorTestDerivedGrain2 grain = GrainClient.GrainFactory.GetGrain <IGeneratorTestDerivedGrain2>(GetRandomGrainId(), grainName); bool boolPromise = await grain.StringIsNullOrEmpty(); Assert.True(boolPromise); await grain.StringSet("Begin"); boolPromise = await grain.StringIsNullOrEmpty(); Assert.False(boolPromise); MemberVariables members = await grain.GetMemberVariables(); Assert.Equal("Begin", members.stringVar); ASCIIEncoding encoding = new ASCIIEncoding(); byte[] bytes = encoding.GetBytes("ByteBegin"); string str = "StringBegin"; MemberVariables memberVariables = new MemberVariables(bytes, str, ReturnCode.Fail); await grain.SetMemberVariables(memberVariables); members = await grain.GetMemberVariables(); ASCIIEncoding enc = new ASCIIEncoding(); Assert.Equal("ByteBegin", enc.GetString(members.byteArray)); Assert.Equal("StringBegin", members.stringVar); Assert.Equal(ReturnCode.Fail, members.code); string strPromise = await grain.StringConcat("Begin", "Cont", "End"); Assert.Equal("BeginContEnd", strPromise); }
public void FailOperationAfterSideCast() { // GeneratorTestDerivedGrain1Reference extends GeneratorTestGrainReference // GeneratorTestDerivedGrain2Reference extends GeneratorTestGrainReference try { IGeneratorTestDerivedGrain1 grain = GrainClient.GrainFactory.GetGrain <IGeneratorTestDerivedGrain1>(GetRandomGrainId()); // Cast works optimistically when the grain reference is not already resolved IGeneratorTestDerivedGrain2 cast = grain.AsReference <IGeneratorTestDerivedGrain2>(); // Operation fails when grain reference is completely resolved Task <string> av = cast.StringConcat("a", "b", "c"); string val = av.Result; } catch (AggregateException ae) { Exception ex = ae.InnerException; while (ex is AggregateException) { ex = ex.InnerException; } throw ex; } Assert.Fail("Exception should have been raised"); }