public async Task TestStandardOperation()
        {
            var server = new TestingServer(clientFactory, null);

            using (var serverCts = new CancellationTokenSource())
            {
                var cancellationToken = serverCts.Token;
                var serverTask        = server.RunAsync(cancellationToken);
                try
                {
                    IServerClient adminClient;

                    var giveUpAt = DateTimeOffset.Now.AddSeconds(60);
                    do
                    {
                        try
                        {
                            adminClient = await clientFactory.CreateServerClient(server.Url, User.AdminName, User.DefaultAdminPassword).ConfigureAwait(false);

                            break;
                        }
                        catch (ServiceUnavailableException)
                        {
                            // migrating, to be expected
                            if (DateTimeOffset.Now > giveUpAt)
                            {
                                throw;
                            }
                            await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
                        }
                    } while (true);

                    using (adminClient)
                    {
                        var serverInfo = await adminClient.Version(default).ConfigureAwait(false);
Пример #2
0
 public async Task FullMonty()
 {
     using (var server = new TestingServer())
         using (var serverCts = new CancellationTokenSource())
         {
             var serverTask = server.RunAsync(serverCts.Token);
             try
             {
                 using (var adminClient = await clientFactory.CreateServerClient(server.Url, User.AdminName, User.DefaultAdminPassword).ConfigureAwait(false))
                 {
                     var serverInfo = await adminClient.Version(default).ConfigureAwait(false);
        public async Task TestUpdate()
        {
            var updatePathRoot = Path.GetTempFileName();

            File.Delete(updatePathRoot);
            Directory.CreateDirectory(updatePathRoot);
            try
            {
                var updatePath = Path.Combine(updatePathRoot, Guid.NewGuid().ToString());
                var server     = new TestingServer(clientFactory, updatePath);
                using (var serverCts = new CancellationTokenSource())
                {
                    var cancellationToken = serverCts.Token;
                    var serverTask        = server.RunAsync(cancellationToken);
                    try
                    {
                        IServerClient adminClient;

                        var giveUpAt = DateTimeOffset.Now.AddSeconds(60);
                        do
                        {
                            try
                            {
                                adminClient = await clientFactory.CreateServerClient(server.Url, User.AdminName, User.DefaultAdminPassword).ConfigureAwait(false);

                                break;
                            }
                            catch (ServiceUnavailableException)
                            {
                                //migrating, to be expected
                                if (DateTimeOffset.Now > giveUpAt)
                                {
                                    throw;
                                }
                                await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
                            }
                        } while (true);

                        var testUpdateVersion = new Version(4, 0, 0, 6);
                        using (adminClient)
                            //attempt to update to stable
                            await adminClient.Administration.Update(new Administration
                            {
                                NewVersion = testUpdateVersion
                            }, cancellationToken).ConfigureAwait(false);

                        //wait up to 3 minutes for the dl and install
                        await Task.WhenAny(serverTask, Task.Delay(TimeSpan.FromMinutes(3), cancellationToken)).ConfigureAwait(false);

                        Assert.IsTrue(serverTask.IsCompleted, "Sever still running!");

                        Assert.IsTrue(Directory.Exists(updatePath), "Update directory not present!");

                        var updatedAssemblyPath = Path.Combine(updatePath, "Tgstation.Server.Host.dll");
                        Assert.IsTrue(File.Exists(updatedAssemblyPath), "Updated assembly missing!");

                        var updatedAssemblyVersion = FileVersionInfo.GetVersionInfo(updatedAssemblyPath);
                        Assert.AreEqual(testUpdateVersion, Version.Parse(updatedAssemblyVersion.FileVersion));
                    }
                    finally
                    {
                        serverCts.Cancel();
                        try
                        {
                            await serverTask.ConfigureAwait(false);
                        }
                        catch (OperationCanceledException) { }
                    }
                    Assert.IsTrue(server.RestartRequested, "Server not requesting restart!");
                }
            }
            finally
            {
                Directory.Delete(updatePathRoot, true);
            }
        }