Exemplo n.º 1
0
        public async Task CanStoreActivation()
        {
            var timeout = new CancellationTokenSource(1000).Token;

            var(activator, identity, pid) = await GetActivatedClusterIdentity(timeout);

            var activation = await _storage.TryGetExistingActivation(identity, timeout);

            activation.Should().NotBeNull();
            activation !.MemberId.Should().Be(activator.Id);
            activation !.Pid.Should().BeEquivalentTo(pid);
        }
Exemplo n.º 2
0
        public async Task WillNotRemoveCurrentActivationByPrevMember()
        {
            var timeout = new CancellationTokenSource(1000).Token;

            var(originalActivator, identity, origPid) = await GetActivatedClusterIdentity(timeout);

            await _storage.RemoveActivation(identity, origPid, timeout);

            var(newActivator, _, newPid) = await GetActivatedClusterIdentity(timeout, identity : identity);

            await _storage.RemoveMember(originalActivator.Id, timeout);

            var activation = await _storage.TryGetExistingActivation(identity, timeout);

            activation.Should().NotBeNull();
            activation !.MemberId.Should().Be(newActivator.Id);
            activation !.Pid.Should().BeEquivalentTo(newPid);
        }
Exemplo n.º 3
0
        public async Task DoesNotRemoveIfIdDoesNotMatch()
        {
            var timeout = new CancellationTokenSource(1000).Token;

            var(activator, identity, pid) = await GetActivatedClusterIdentity(timeout);

            var differentPid = Activate(activator, identity);

            var activation = await _storage.TryGetExistingActivation(identity, timeout);

            await _storage.RemoveActivation(identity, differentPid, timeout);

            var afterRemoval = await _storage.TryGetExistingActivation(identity, timeout);

            activation.Should().NotBeNull();
            activation !.MemberId.Should().Be(activator.Id);
            activation !.Pid.Should().BeEquivalentTo(pid);

            afterRemoval.Should().NotBeNull("Removal pid did not match id, even if it matched cluster identity");
        }
Exemplo n.º 4
0
        public async Task CannotTakeLockWhenAlreadyActivated()
        {
            var activator = GetFakeActivator();
            var timeout   = new CancellationTokenSource(1000).Token;
            var identity  = new ClusterIdentity {
                Kind = "thing", Identity = NextId().ToString()
            };
            var spawnLock = await _storage.TryAcquireLock(identity, timeout);

            var pid = Activate(activator, identity);
            await _storage.StoreActivation(activator.Id, spawnLock !, pid, timeout);

            var activation = await _storage.TryGetExistingActivation(identity, timeout);

            activation.Should().NotBeNull();
            activation !.MemberId.Should().Be(activator.Id);
            activation !.Pid.Should().BeEquivalentTo(pid);

            var noLock = await _storage.TryAcquireLock(identity, timeout);

            noLock.Should().BeNull("Since the activation is active, it should not be possible to take the lock");
        }
Exemplo n.º 5
0
        public async Task CanWaitForActivation()
        {
            var activator = GetFakeActivator();
            var timeout   = CancellationTokens.WithTimeout(15 * 1000);
            var identity  = new ClusterIdentity {
                Kind = "thing", Identity = NextId().ToString()
            };
            var spawnLock = await _storage.TryAcquireLock(identity, timeout);

            var pid = Activate(activator, identity);

            _ = SafeTask.Run(async() => {
                await Task.Delay(500, timeout);
                await _storage.StoreActivation(activator.Id, spawnLock !, pid, timeout);
            }, timeout
                             );
            var activation = await _storage.WaitForActivation(identity, timeout);

            activation.Should().NotBeNull();
            activation !.MemberId.Should().Be(activator.Id);
            activation !.Pid.Should().BeEquivalentTo(pid);
        }