Fix UpdateFileSystem Context

to be done when either the runner is destroyed (case ignored before) or the request is interrupted.
This commit is contained in:
Maximilian Paß
2023-08-21 17:33:24 +02:00
parent 09604997a7
commit c0a3fb12c3
2 changed files with 33 additions and 3 deletions

View File

@ -149,7 +149,8 @@ func (r *NomadJob) ExecuteInteractively(
} }
func (r *NomadJob) ListFileSystem( func (r *NomadJob) ListFileSystem(
path string, recursive bool, content io.Writer, privilegedExecution bool, ctx context.Context) error { path string, recursive bool, content io.Writer, privilegedExecution bool, requestCtx context.Context) error {
ctx := util.NewMergeContext([]context.Context{r.ctx, requestCtx})
r.ResetTimeout() r.ResetTimeout()
command := lsCommand command := lsCommand
if recursive { if recursive {
@ -173,7 +174,8 @@ func (r *NomadJob) ListFileSystem(
return err return err
} }
func (r *NomadJob) UpdateFileSystem(copyRequest *dto.UpdateFileSystemRequest, ctx context.Context) error { func (r *NomadJob) UpdateFileSystem(copyRequest *dto.UpdateFileSystemRequest, requestCtx context.Context) error {
ctx := util.NewMergeContext([]context.Context{r.ctx, requestCtx})
r.ResetTimeout() r.ResetTimeout()
var tarBuffer bytes.Buffer var tarBuffer bytes.Buffer
@ -206,7 +208,8 @@ func (r *NomadJob) UpdateFileSystem(copyRequest *dto.UpdateFileSystemRequest, ct
} }
func (r *NomadJob) GetFileContent( func (r *NomadJob) GetFileContent(
path string, content http.ResponseWriter, privilegedExecution bool, ctx context.Context) error { path string, content http.ResponseWriter, privilegedExecution bool, requestCtx context.Context) error {
ctx := util.NewMergeContext([]context.Context{r.ctx, requestCtx})
r.ResetTimeout() r.ResetTimeout()
contentLengthWriter := &nullio.ContentLengthWriter{Target: content} contentLengthWriter := &nullio.ContentLengthWriter{Target: content}

View File

@ -468,3 +468,30 @@ func (s *UpdateFileSystemTestSuite) TestGetFileContentReturnsErrorIfExitCodeIsNo
err := s.runner.GetFileContent("", logging.NewLoggingResponseWriter(nil), false, context.Background()) err := s.runner.GetFileContent("", logging.NewLoggingResponseWriter(nil), false, context.Background())
s.ErrorIs(err, ErrFileNotFound) s.ErrorIs(err, ErrFileNotFound)
} }
func (s *UpdateFileSystemTestSuite) TestFileCopyIsCanceledOnRunnerDestroy() {
s.mockedExecuteCommandCall.Run(func(args mock.Arguments) {
ctx, ok := args.Get(1).(context.Context)
s.Require().True(ok)
select {
case <-ctx.Done():
s.Fail("mergeContext is done before any of its parents")
return
case <-time.After(tests.ShortTimeout):
}
select {
case <-ctx.Done():
case <-time.After(3 * tests.ShortTimeout):
s.Fail("mergeContext is not done after the earliest of its parents")
return
}
})
ctx, cancel := context.WithCancel(context.Background())
s.runner.ctx = ctx
s.runner.cancel = cancel
<-time.After(2 * tests.ShortTimeout)
s.runner.cancel()
}