Пример #1
0
        public async Task TestServiceState_InMemoryState_PromoteNewReplica()
        {
            var replicaSet = new MockStatefulServiceReplicaSet <MyStatefulService>(CreateStatefulService, CreateStateManagerReplica);
            await replicaSet.AddReplicaAsync(ReplicaRole.Primary, 1);

            await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 2);

            await replicaSet.AddReplicaAsync(ReplicaRole.ActiveSecondary, 3);

            const string stateName = "test";
            var          payload   = new Payload(StatePayload);

            //insert data
            await replicaSet.Primary.ServiceInstance.InsertAsync(stateName, payload);

            //promote one of the secondaries to primary
            await replicaSet.PromoteNewReplicaToPrimaryAsync(4);

            //get data
            var payloads = (await replicaSet.Primary.ServiceInstance.GetPayloadsAsync()).ToList();

            //data should match what was inserted against the primary
            Assert.IsTrue(payloads.Count == 1);
            Assert.IsTrue(payloads[0].Content == payload.Content);

            //the primary should not have any in-memory state
            var payloadsFromOldPrimary = await replicaSet[1].ServiceInstance.GetPayloadsAsync();

            Assert.IsTrue(payloadsFromOldPrimary.Any() == false);
        }