public async Task Expiration_Is_Updated_After_File_Write_If_Sliding_Expiration_Is_Used()
        {
            var fileId             = Guid.NewGuid().ToString("n");
            var tusStore           = Substitute.For <ITusStore, ITusCreationStore, ITusExpirationStore>();
            var tusCreationStore   = (ITusCreationStore)tusStore;
            var tusExpirationStore = (ITusExpirationStore)tusStore;

            tusCreationStore.CreateFileAsync(1, null, CancellationToken.None).ReturnsForAnyArgs(fileId);
            tusStore.AppendDataAsync(fileId, Arg.Any <Stream>(), Arg.Any <CancellationToken>()).Returns(3);
            tusStore.FileExistAsync(fileId, Arg.Any <CancellationToken>()).Returns(true);
            tusStore.GetUploadLengthAsync(fileId, Arg.Any <CancellationToken>()).Returns(1);

            var expiration = new SlidingExpiration(TimeSpan.FromHours(24));

            DateTimeOffset?uploadExpiresAt = null;

            using (var server = TestServerFactory.Create(app =>
            {
                var config = new DefaultTusConfiguration
                {
                    Store = tusStore,
                    UrlPath = "/files",
                    Expiration = expiration,
                };

                config.Events = new Events
                {
                    OnAuthorizeAsync = ctx =>
                    {
                        if (ctx.Intent != IntentType.WriteFile)
                        {
                            return(Task.FromResult(0));
                        }

                        // Emulate that OnCreateComplete took 10 sec to complete.
                        var fakeSystemTime = DateTimeOffset.UtcNow.AddSeconds(10);
                        config.MockSystemTime(fakeSystemTime);
                        uploadExpiresAt = fakeSystemTime.Add(expiration.Timeout);
                        return(Task.FromResult(0));
                    }
                };

                app.UseTus(_ => config);
            }))
            {
                var response = await server
                               .CreateTusResumableRequest("/files")
                               .AddHeader("Upload-Length", "100")
                               .AddBody()
                               .SendAsync("POST");

                response.StatusCode.ShouldBe(HttpStatusCode.Created);
                // Once for file creation, once for writing the data.
                await tusExpirationStore.Received(2).SetExpirationAsync(fileId, Arg.Any <DateTimeOffset>(), Arg.Any <CancellationToken>());

                response.ShouldContainHeader("Upload-Expires", uploadExpiresAt.Value.ToString("R"));
            }
        }
Exemplo n.º 2
0
        public void Describe(Description description)
        {
            description.ShortDescription                                  = "Authentication Configuration for the Running Application";
            description.Properties[nameof(Enabled)]                       = Enabled.ToString();
            description.Properties[nameof(ExcludeDiagnostics)]            = ExcludeDiagnostics.ToString();
            description.Properties[nameof(ExpireInMinutes)]               = ExpireInMinutes.ToString();
            description.Properties[nameof(SlidingExpiration)]             = SlidingExpiration.ToString();
            description.Properties[nameof(MaximumNumberOfFailedAttempts)] = MaximumNumberOfFailedAttempts.ToString();
            description.Properties[nameof(MembershipEnabled)]             = MembershipEnabled.ToString();
            description.Properties[nameof(NeverExpires)]                  = NeverExpires.ToString();

            description.AddChild("Saml2", Saml2);

            description.AddList("Strategies", Strategies);
        }