public async Task Should_stop_all_applications()
        {
            vostokMultiHost = new VostokMultiHost(new VostokMultiHostSettings(SetupMultiHost));

            var applications = new List <VostokMultiHostApplicationSettings>();

            for (var i = 0; i < 10; i++)
            {
                applications.Add(
                    new VostokMultiHostApplicationSettings(
                        new NeverEndingApplication(),
                        ("test", i.ToString()),
                        SetupMultiHostApplication));
            }

            foreach (var app in applications)
            {
                vostokMultiHost.AddApplication(app);
            }

            await vostokMultiHost.StartAsync();

            await Task.Delay(1000);

            await vostokMultiHost.StopAsync();

            foreach (var app in applications)
            {
                // ReSharper disable once PossibleNullReferenceException
                vostokMultiHost.GetApplication(app.Identifier).ApplicationState.IsTerminal().Should().BeTrue();
            }
        }
        public async Task Start_should_wait_until_given_state_occurs(VostokApplicationState stateToAwait)
        {
            var identifier        = ("test", "test");
            var workerApplication = new VostokMultiHostApplicationSettings(new NeverEndingApplication(), identifier, SetupMultiHostApplication);

            vostokMultiHost = new VostokMultiHost(new VostokMultiHostSettings(SetupMultiHost), workerApplication);

            await vostokMultiHost.StartAsync();

            await vostokMultiHost.GetApplication(identifier).StartAsync(stateToAwait);

            vostokMultiHost.GetApplication(identifier).ApplicationState.Should().Match <VostokApplicationState>(state => state >= stateToAwait);

            await vostokMultiHost.StopApplicationAsync(identifier);

            vostokMultiHost.GetApplication(identifier).ApplicationState.IsTerminal().Should().BeTrue();

            await vostokMultiHost.StopAsync();
        }
        public async Task Start_should_not_throw_on_run_failed()
        {
            await SetupAndStartMultiHost();

            var identifier = ("test", "test");

            var badApplication = new VostokMultiHostApplicationSettings(new BadApplication(false), identifier, SetupMultiHostApplication);

            Action checkStart = () => vostokMultiHost.StartApplicationAsync(badApplication).GetAwaiter().GetResult();

            checkStart.Should().NotThrow <Exception>();

            var application = vostokMultiHost.GetApplication(identifier);

            AssertionAssertions.ShouldPassIn(() => { application.ApplicationState.IsTerminal().Should().BeTrue(); }, 10.Seconds());

            Action checkStop = () => vostokMultiHost.StopApplicationAsync(identifier).GetAwaiter().GetResult();

            checkStop.Should().Throw <Exception>().WithMessage("run");
        }