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:
@ -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}
|
||||||
|
@ -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()
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user