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")); } }
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); }