Ejemplo n.º 1
0
        public void SimpleGrain_PromiseForward()
        {
            ISimpleGrain forwardGrain = GrainClient.GrainFactory.GetGrain <IPromiseForwardGrain>(GetRandomGrainId());
            Task <int>   promise      = forwardGrain.GetAxB(5, 6);
            int          result       = promise.Result;

            Assert.AreEqual(30, result);
        }
Ejemplo n.º 2
0
        public async Task GettingGrainWithMultipleConstructorsActivesViaDefaultConstructor()
        {
            ISimpleGrain grain = GrainFactory.GetGrain <ISimpleGrain>(GetRandomGrainId(), grainClassNamePrefix: MultipleConstructorsSimpleGrain.MultipleConstructorsSimpleGrainPrefix);

            var actual = await grain.GetA();

            Assert.Equal(MultipleConstructorsSimpleGrain.ValueUsedByParameterlessConstructor, actual);
        }
Ejemplo n.º 3
0
        public async Task LoadSheddingBasic()
        {
            ISimpleGrain grain = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), SimpleGrain.SimpleGrainNamePrefix);

            this.HostedCluster.Primary.TestHook.LatchIsOverloaded(true);

            // Do not accept message in overloaded state
            await Assert.ThrowsAsync <GatewayTooBusyException>(() =>
                                                               grain.SetA(5));
        }
Ejemplo n.º 4
0
        public async Task LoadSheddingBasic()
        {
            ISimpleGrain grain = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), SimpleGrain.SimpleGrainNamePrefix);

            this.HostedCluster.Primary.Silo.Metrics.LatchIsOverload(true);
            Assert.True(this.HostedCluster.Primary.Silo.Metrics.IsOverloaded, "Primary silo did not successfully latch overload state");

            // Do not accept message in overloaded state
            await Assert.ThrowsAsync <GatewayTooBusyException>(() =>
                                                               grain.SetA(5));
        }
Ejemplo n.º 5
0
        public void LoadSheddingComplex()
        {
            ISimpleGrain grain = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), SimpleGrain.SimpleGrainNamePrefix);

            Console.WriteLine("Acquired grain reference");

            var promise = grain.SetA(1);

            try
            {
                promise.Wait();
            }
            catch (Exception ex)
            {
                Assert.Fail("Simple request failed with exception: " + ex);
            }

            Console.WriteLine("First set succeeded");

            Primary.Silo.Metrics.LatchIsOverload(true);
            Assert.IsTrue(Primary.Silo.Metrics.IsOverloaded, "Primary silo did not successfully latch overload state");

            promise = grain.SetA(2);
            try
            {
                promise.Wait();
                Assert.Fail("Message was accepted even though silo was in overload state");
            }
            catch (Exception ex)
            {
                var exc = ex.GetBaseException();
                if (!(exc is GatewayTooBusyException))
                {
                    Assert.Fail("Incorrect exception thrown for load-shed rejection: " + exc);
                }
            }

            Console.WriteLine("Second set was shed");

            Primary.Silo.Metrics.LatchIsOverload(false);
            Assert.IsFalse(Primary.Silo.Metrics.IsOverloaded, "Primary silo did not successfully latch non-overload state");

            promise = grain.SetA(4);
            try
            {
                promise.Wait();
            }
            catch (Exception ex)
            {
                Assert.Fail("Simple request after overload is cleared failed with exception: " + ex);
            }

            Console.WriteLine("Third set succeeded");
        }
Ejemplo n.º 6
0
        public void GrainReferenceComparison_DifferentReference()
        {
            ISimpleGrain ref1 = this.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), UnitTests.Grains.SimpleGrain.SimpleGrainNamePrefix);
            ISimpleGrain ref2 = this.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), UnitTests.Grains.SimpleGrain.SimpleGrainNamePrefix);

            Assert.True(ref1 != ref2);
            Assert.True(ref2 != ref1);
            Assert.False(ref1 == ref2);
            Assert.False(ref2 == ref1);
            Assert.False(ref1.Equals(ref2));
            Assert.False(ref2.Equals(ref1));
        }
Ejemplo n.º 7
0
        public void SimpleGrainControlFlow()
        {
            ISimpleGrain grain = GetSimpleGrain();

            Task setPromise = grain.SetA(2);

            setPromise.Wait();

            setPromise = grain.SetB(3);
            setPromise.Wait();

            Task <int> intPromise = grain.GetAxB();

            Assert.AreEqual(6, intPromise.Result);
        }
Ejemplo n.º 8
0
        public async Task BootstrapProvider_GrainCall()
        {
            string providerName = "bootstrap2";
            GrainCallBootstrapper bootstrapProvider = (GrainCallBootstrapper)FindBootstrapProvider(providerName);

            Assert.IsNotNull(bootstrapProvider, "Found bootstrap provider {0}", providerName);
            Assert.AreEqual(1, bootstrapProvider.InitCount, "Init count");

            long         grainId = GrainCallBootstrapTestConstants.GrainId;
            int          a       = GrainCallBootstrapTestConstants.A;
            int          b       = GrainCallBootstrapTestConstants.B;
            ISimpleGrain grain   = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(grainId, SimpleGrain.SimpleGrainNamePrefix);
            int          axb     = await grain.GetAxB();

            Assert.AreEqual((a * b), axb, "Returned value from {0}", grainId);
        }
Ejemplo n.º 9
0
        public async Task BootstrapProvider_GrainCall()
        {
            string providerName = "bootstrap2";
            GrainCallBootstrapper bootstrapProvider = (GrainCallBootstrapper)FindBootstrapProvider(providerName);

            Assert.NotNull(bootstrapProvider);
            Assert.Equal(1, bootstrapProvider.InitCount); // Init count

            long         grainId = GrainCallBootstrapTestConstants.GrainId;
            int          a       = GrainCallBootstrapTestConstants.A;
            int          b       = GrainCallBootstrapTestConstants.B;
            ISimpleGrain grain   = this.GrainFactory.GetGrain <ISimpleGrain>(grainId, SimpleGrain.SimpleGrainNamePrefix);
            int          axb     = await grain.GetAxB();

            Assert.Equal((a * b), axb);
        }
Ejemplo n.º 10
0
        public async Task BootstrapProvider_GrainCall()
        {
            string providerName            = BootstrapProviderName2;
            bool   canGetBootstrapProvider = await CanFindBootstrapProviderInUse(providerName);

            Assert.True(canGetBootstrapProvider);
            int initCount = await GetInitCountForBootstrapProviderInUse(providerName);

            Assert.Equal(1, initCount); // Init count
            long         grainId = GrainCallBootstrapTestConstants.GrainId;
            int          a       = GrainCallBootstrapTestConstants.A;
            int          b       = GrainCallBootstrapTestConstants.B;
            ISimpleGrain grain   = this.GrainFactory.GetGrain <ISimpleGrain>(grainId, SimpleGrain.SimpleGrainNamePrefix);
            int          axb     = await grain.GetAxB();

            Assert.Equal((a * b), axb);
        }
Ejemplo n.º 11
0
        public void GetGrainStatistics_ActivationCounts_OrleansManagedGrains()
        {
            SimpleGrainStatistic[] stats = GetSimpleGrainStatistics("Before Create");
            Assert.IsTrue(stats.Length > 0, "Got some grain statistics: " + stats.Length);

            string grainType = typeof(SimpleGrain).FullName;

            Assert.AreEqual(0, stats.Count(s => s.GrainType == grainType), "No activation counter yet for grain: " + grainType);
            ISimpleGrain grain1 = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), SimpleGrain.SimpleGrainNamePrefix);
            int          x      = grain1.GetA().Result; // Call grain method

            stats = GetSimpleGrainStatistics("After Invoke");
            Assert.AreEqual(1, stats.Count(s => s.GrainType == grainType), "Activation counter now exists for grain: " + grainType);
            SimpleGrainStatistic grainStats = stats.First(s => s.GrainType == grainType);

            Assert.AreEqual(1, grainStats.ActivationCount, "Activation count for grain after activation: " + grainType);
        }
Ejemplo n.º 12
0
        public void LoadSheddingBasic()
        {
            ISimpleGrain grain = GrainClient.GrainFactory.GetGrain <ISimpleGrain>(random.Next(), SimpleGrain.SimpleGrainNamePrefix);

            Primary.Silo.Metrics.LatchIsOverload(true);
            Assert.IsTrue(Primary.Silo.Metrics.IsOverloaded, "Primary silo did not successfully latch overload state");

            var  promise = grain.SetA(5);
            bool failed  = false;

            try
            {
                promise.Wait();
            }
            catch (Exception)
            {
                failed = true;
            }
            Assert.IsTrue(failed, "Message was accepted even though silo was in overload state");
        }
Ejemplo n.º 13
0
        public override async Task Init(string name, IProviderRuntime providerRuntime, IProviderConfiguration config)
        {
            await base.Init(name, providerRuntime, config);

            long         grainId = GrainCallBootstrapTestConstants.GrainId;
            int          a       = GrainCallBootstrapTestConstants.A;
            int          b       = GrainCallBootstrapTestConstants.B;
            ISimpleGrain grain   = providerRuntime.GrainFactory.GetGrain <ISimpleGrain>(grainId, SimpleGrain.SimpleGrainNamePrefix);

            logger.Info("Setting A={0} on {1}", a, grainId);
            await grain.SetA(a);

            logger.Info("Setting B={0} on {1}", b, grainId);
            await grain.SetB(b);

            logger.Info("Getting AxB from {0}", grainId);
            int axb = await grain.GetAxB();

            logger.Info("Got AxB={0} from {1}", axb, grainId);
            Assert.AreEqual((a * b), axb, "Value returned to {0} by {1}", this.GetType().Name, grainId);
        }
Ejemplo n.º 14
0
        public async Task SimpleGrainGetGrain()
        {
            ISimpleGrain grain = GetSimpleGrain();

            _ = await grain.GetAxB();
        }