public void FailSideCastAfterResolve() { // GeneratorTestDerivedGrain1Reference extends GeneratorTestGrainReference // GeneratorTestDerivedGrain2Reference extends GeneratorTestGrainReference try { IGeneratorTestDerivedGrain1 grain = GrainClient.GrainFactory.GetGrain <IGeneratorTestDerivedGrain1>(GetRandomGrainId()); Assert.IsTrue(grain.StringIsNullOrEmpty().Result); // Fails the next line as grain reference is already resolved IGeneratorTestDerivedGrain2 cast = grain.AsReference <IGeneratorTestDerivedGrain2>(); Task <string> av = cast.StringConcat("a", "b", "c"); av.Wait(); Assert.IsFalse(cast.StringIsNullOrEmpty().Result); // Not reached } catch (AggregateException ae) { Exception ex = ae.InnerException; while (ex is AggregateException) { ex = ex.InnerException; } throw ex; } Assert.Fail("Exception should have been raised"); }
public async Task GeneratorDerivedGrain2ControlFlow() { var grainName = typeof(GeneratorTestDerivedGrain2).FullName; IGeneratorTestDerivedGrain2 grain = this.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 FailSideCastAfterContinueWith() { Assert.Throws <InvalidCastException>(() => { // GeneratorTestDerivedGrain1Reference extends GeneratorTestGrainReference // GeneratorTestDerivedGrain2Reference extends GeneratorTestGrainReference try { IGeneratorTestDerivedGrain1 grain = GrainClient.GrainFactory.GetGrain <IGeneratorTestDerivedGrain1>(GetRandomGrainId()); IGeneratorTestDerivedGrain2 cast = null; Task <bool> av = grain.StringIsNullOrEmpty(); Task <bool> av2 = av.ContinueWith((Task <bool> t) => Assert.True(t.Result)).ContinueWith((_AppDomain) => { cast = grain.AsReference <IGeneratorTestDerivedGrain2>(); }).ContinueWith((_) => cast.StringConcat("a", "b", "c")).ContinueWith((_) => cast.StringIsNullOrEmpty().Result); Assert.False(av2.Result); } catch (AggregateException ae) { Exception ex = ae.InnerException; while (ex is AggregateException) { ex = ex.InnerException; } throw ex; } Assert.True(false, "Exception should have been raised"); }); }