Пример #1
0
 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");
     });
 }
Пример #2
0
 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");
 }
Пример #3
0
        public async Task FailOperationAfterSideCast()
        {
            // GeneratorTestDerivedGrain1Reference extends GeneratorTestGrainReference
            // GeneratorTestDerivedGrain2Reference extends GeneratorTestGrainReference
            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
            await Assert.ThrowsAsync <InvalidCastException>(() => cast.StringConcat("a", "b", "c"));
        }
Пример #4
0
        public async Task FailSideCastAfterResolve()
        {
            // GeneratorTestDerivedGrain1Reference extends GeneratorTestGrainReference
            // GeneratorTestDerivedGrain2Reference extends GeneratorTestGrainReference
            IGeneratorTestDerivedGrain1 grain = GrainClient.GrainFactory.GetGrain <IGeneratorTestDerivedGrain1>(GetRandomGrainId());

            Assert.True(grain.StringIsNullOrEmpty().Result);

            // Fails the next line as grain reference is already resolved
            IGeneratorTestDerivedGrain2 cast = grain.AsReference <IGeneratorTestDerivedGrain2>();

            await Assert.ThrowsAsync <InvalidCastException>(() => cast.StringConcat("a", "b", "c"));
        }
Пример #5
0
        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);
        }
Пример #6
0
 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");
 }