bindings: reuse context for API requests

One of the main uses of context.Context is to provide cancellation for
go-routines, including API requests. While all user-facing bindings
already used a context parameter, it was only used to pass the client
information around.

This commit changes the internal DoRequest wrapper to take an additional
context argument, and pass that to the http request. Previously, the context
was derived from context.Background(), which made it impossible to cancel
once started.

All the convenience wrappers already supported the context parameter, so the
only user facing change is that cancelling those context now works as one
would expect.

Signed-off-by: Moritz "WanzenBug" Wanzenböck <moritz@wanzenbug.xyz>
This commit is contained in:
Moritz "WanzenBug" Wanzenböck
2021-11-15 15:42:39 +01:00
parent cca6df428c
commit 5df883e87d
28 changed files with 174 additions and 106 deletions

@ -145,7 +145,7 @@ func pingNewConnection(ctx context.Context) error {
return err return err
} }
// the ping endpoint sits at / in this case // the ping endpoint sits at / in this case
response, err := client.DoRequest(nil, http.MethodGet, "/_ping", nil, nil) response, err := client.DoRequest(ctx, nil, http.MethodGet, "/_ping", nil, nil)
if err != nil { if err != nil {
return err return err
} }
@ -306,7 +306,7 @@ func unixClient(_url *url.URL) Connection {
} }
// DoRequest assembles the http request and returns the response // DoRequest assembles the http request and returns the response
func (c *Connection) DoRequest(httpBody io.Reader, httpMethod, endpoint string, queryParams url.Values, header map[string]string, pathValues ...string) (*APIResponse, error) { func (c *Connection) DoRequest(ctx context.Context, httpBody io.Reader, httpMethod, endpoint string, queryParams url.Values, header map[string]string, pathValues ...string) (*APIResponse, error) {
var ( var (
err error err error
response *http.Response response *http.Response
@ -328,7 +328,7 @@ func (c *Connection) DoRequest(httpBody io.Reader, httpMethod, endpoint string,
uri := fmt.Sprintf("http://d/v%d.%d.%d/libpod"+endpoint, params...) uri := fmt.Sprintf("http://d/v%d.%d.%d/libpod"+endpoint, params...)
logrus.Debugf("DoRequest Method: %s URI: %v", httpMethod, uri) logrus.Debugf("DoRequest Method: %s URI: %v", httpMethod, uri)
req, err := http.NewRequestWithContext(context.WithValue(context.Background(), clientKey, c), httpMethod, uri, httpBody) req, err := http.NewRequestWithContext(ctx, httpMethod, uri, httpBody)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -23,7 +23,7 @@ func Stat(ctx context.Context, nameOrID string, path string) (*entities.Containe
params := url.Values{} params := url.Values{}
params.Set("path", path) params.Set("path", path)
response, err := conn.DoRequest(nil, http.MethodHead, "/containers/%s/archive", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodHead, "/containers/%s/archive", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -71,7 +71,7 @@ func CopyFromArchiveWithOptions(ctx context.Context, nameOrID string, path strin
params.Set("path", path) params.Set("path", path)
return func() error { return func() error {
response, err := conn.DoRequest(reader, http.MethodPut, "/containers/%s/archive", params, nil, nameOrID) response, err := conn.DoRequest(ctx, reader, http.MethodPut, "/containers/%s/archive", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -92,7 +92,7 @@ func CopyToArchive(ctx context.Context, nameOrID string, path string, writer io.
params := url.Values{} params := url.Values{}
params.Set("path", path) params.Set("path", path)
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/archive", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/archive", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -130,7 +130,7 @@ func Attach(ctx context.Context, nameOrID string, stdin io.Reader, stdout io.Wri
IdleConnTimeout: time.Duration(0), IdleConnTimeout: time.Duration(0),
} }
conn.Client.Transport = t conn.Client.Transport = t
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/attach", params, headers, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/attach", params, headers, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -322,7 +322,7 @@ func resizeTTY(ctx context.Context, endpoint string, height *int, width *int) er
params.Set("w", strconv.Itoa(*width)) params.Set("w", strconv.Itoa(*width))
} }
params.Set("running", "true") params.Set("running", "true")
rsp, err := conn.DoRequest(nil, http.MethodPost, endpoint, params, nil) rsp, err := conn.DoRequest(ctx, nil, http.MethodPost, endpoint, params, nil)
if err != nil { if err != nil {
return err return err
} }
@ -407,7 +407,7 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, options *ExecStar
// We need to inspect the exec session first to determine whether to use // We need to inspect the exec session first to determine whether to use
// -t. // -t.
resp, err := conn.DoRequest(nil, http.MethodGet, "/exec/%s/json", nil, nil, sessionID) resp, err := conn.DoRequest(ctx, nil, http.MethodGet, "/exec/%s/json", nil, nil, sessionID)
if err != nil { if err != nil {
return err return err
} }
@ -478,7 +478,7 @@ func ExecStartAndAttach(ctx context.Context, sessionID string, options *ExecStar
IdleConnTimeout: time.Duration(0), IdleConnTimeout: time.Duration(0),
} }
conn.Client.Transport = t conn.Client.Transport = t
response, err := conn.DoRequest(bytes.NewReader(bodyJSON), http.MethodPost, "/exec/%s/start", nil, nil, sessionID) response, err := conn.DoRequest(ctx, bytes.NewReader(bodyJSON), http.MethodPost, "/exec/%s/start", nil, nil, sessionID)
if err != nil { if err != nil {
return err return err
} }

@ -23,7 +23,7 @@ func Checkpoint(ctx context.Context, nameOrID string, options *CheckpointOptions
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/checkpoint", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/checkpoint", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -52,7 +52,7 @@ func Restore(ctx context.Context, nameOrID string, options *RestoreOptions) (*en
if i := options.GetImportAchive(); options.Changed("ImportArchive") { if i := options.GetImportAchive(); options.Changed("ImportArchive") {
params.Set("import", i) params.Set("import", i)
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/restore", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/restore", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -24,7 +24,7 @@ func Commit(ctx context.Context, nameOrID string, options *CommitOptions) (handl
return handlers.IDResponse{}, err return handlers.IDResponse{}, err
} }
params.Set("container", nameOrID) params.Set("container", nameOrID)
response, err := conn.DoRequest(nil, http.MethodPost, "/commit", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/commit", params, nil)
if err != nil { if err != nil {
return id, err return id, err
} }

@ -38,7 +38,7 @@ func List(ctx context.Context, options *ListOptions) ([]entities.ListContainer,
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/json", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/json", params, nil)
if err != nil { if err != nil {
return containers, err return containers, err
} }
@ -64,7 +64,7 @@ func Prune(ctx context.Context, options *PruneOptions) ([]*reports.PruneReport,
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/prune", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/prune", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -90,7 +90,7 @@ func Remove(ctx context.Context, nameOrID string, options *RemoveOptions) error
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodDelete, "/containers/%s", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/containers/%s", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -115,7 +115,7 @@ func Inspect(ctx context.Context, nameOrID string, options *InspectOptions) (*de
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/json", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/json", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -140,7 +140,7 @@ func Kill(ctx context.Context, nameOrID string, options *KillOptions) error {
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/kill", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/kill", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -160,7 +160,7 @@ func Pause(ctx context.Context, nameOrID string, options *PauseOptions) error {
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/pause", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/pause", nil, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -184,7 +184,7 @@ func Restart(ctx context.Context, nameOrID string, options *RestartOptions) erro
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/restart", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/restart", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -209,7 +209,7 @@ func Start(ctx context.Context, nameOrID string, options *StartOptions) error {
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/start", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/start", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -235,7 +235,7 @@ func Stats(ctx context.Context, containers []string, options *StatsOptions) (cha
params.Add("containers", c) params.Add("containers", c)
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/stats", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/stats", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -293,7 +293,7 @@ func Top(ctx context.Context, nameOrID string, options *TopOptions) ([]string, e
psArgs := strings.Join(options.GetDescriptors(), ",") psArgs := strings.Join(options.GetDescriptors(), ",")
params.Add("ps_args", psArgs) params.Add("ps_args", psArgs)
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/top", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/top", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -326,7 +326,7 @@ func Unpause(ctx context.Context, nameOrID string, options *UnpauseOptions) erro
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/unpause", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/unpause", nil, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -351,7 +351,7 @@ func Wait(ctx context.Context, nameOrID string, options *WaitOptions) (int32, er
if err != nil { if err != nil {
return exitCode, err return exitCode, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/wait", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/wait", params, nil, nameOrID)
if err != nil { if err != nil {
return exitCode, err return exitCode, err
} }
@ -372,7 +372,7 @@ func Exists(ctx context.Context, nameOrID string, options *ExistsOptions) (bool,
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/exists", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/exists", params, nil, nameOrID)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -395,7 +395,7 @@ func Stop(ctx context.Context, nameOrID string, options *StopOptions) error {
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/stop", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/stop", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -416,7 +416,7 @@ func Export(ctx context.Context, nameOrID string, w io.Writer, options *ExportOp
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/export", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/export", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -441,7 +441,7 @@ func ContainerInit(ctx context.Context, nameOrID string, options *InitOptions) e
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/init", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/init", nil, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -462,7 +462,7 @@ func ShouldRestart(ctx context.Context, nameOrID string, options *ShouldRestartO
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/shouldrestart", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/shouldrestart", nil, nil, nameOrID)
if err != nil { if err != nil {
return false, err return false, err
} }

@ -26,7 +26,7 @@ func CreateWithSpec(ctx context.Context, s *specgen.SpecGenerator, options *Crea
return ccr, err return ccr, err
} }
stringReader := strings.NewReader(specgenString) stringReader := strings.NewReader(specgenString)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/containers/create", nil, nil) response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/containers/create", nil, nil)
if err != nil { if err != nil {
return ccr, err return ccr, err
} }

@ -22,7 +22,7 @@ func Diff(ctx context.Context, nameOrID string, options *DiffOptions) ([]archive
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/changes", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/changes", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -35,7 +35,7 @@ func ExecCreate(ctx context.Context, nameOrID string, config *handlers.ExecCreat
} }
jsonReader := strings.NewReader(string(requestJSON)) jsonReader := strings.NewReader(string(requestJSON))
resp, err := conn.DoRequest(jsonReader, http.MethodPost, "/containers/%s/exec", nil, nil, nameOrID) resp, err := conn.DoRequest(ctx, jsonReader, http.MethodPost, "/containers/%s/exec", nil, nil, nameOrID)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -63,7 +63,7 @@ func ExecInspect(ctx context.Context, sessionID string, options *ExecInspectOpti
logrus.Debugf("Inspecting session ID %q", sessionID) logrus.Debugf("Inspecting session ID %q", sessionID)
resp, err := conn.DoRequest(nil, http.MethodGet, "/exec/%s/json", nil, nil, sessionID) resp, err := conn.DoRequest(ctx, nil, http.MethodGet, "/exec/%s/json", nil, nil, sessionID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -101,7 +101,7 @@ func ExecStart(ctx context.Context, sessionID string, options *ExecStartOptions)
return err return err
} }
resp, err := conn.DoRequest(bytes.NewReader(bodyJSON), http.MethodPost, "/exec/%s/start", nil, nil, sessionID) resp, err := conn.DoRequest(ctx, bytes.NewReader(bodyJSON), http.MethodPost, "/exec/%s/start", nil, nil, sessionID)
if err != nil { if err != nil {
return err return err
} }

@ -22,7 +22,7 @@ func RunHealthCheck(ctx context.Context, nameOrID string, options *HealthCheckOp
var ( var (
status define.HealthCheckResults status define.HealthCheckResults
) )
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/healthcheck", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/healthcheck", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -29,7 +29,7 @@ func Logs(ctx context.Context, nameOrID string, options *LogOptions, stdoutChan,
if options.Stdout == nil && options.Stderr == nil { if options.Stdout == nil && options.Stderr == nil {
params.Set("stdout", strconv.FormatBool(true)) params.Set("stdout", strconv.FormatBool(true))
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/%s/logs", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/%s/logs", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }

@ -21,7 +21,7 @@ func Mount(ctx context.Context, nameOrID string, options *MountOptions) (string,
var ( var (
path string path string
) )
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/mount", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/mount", nil, nil, nameOrID)
if err != nil { if err != nil {
return path, err return path, err
} }
@ -41,7 +41,7 @@ func Unmount(ctx context.Context, nameOrID string, options *UnmountOptions) erro
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/unmount", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/unmount", nil, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -61,7 +61,7 @@ func GetMountedContainerPaths(ctx context.Context, options *MountedContainerPath
return nil, err return nil, err
} }
mounts := make(map[string]string) mounts := make(map[string]string)
response, err := conn.DoRequest(nil, http.MethodGet, "/containers/showmounted", nil, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/containers/showmounted", nil, nil)
if err != nil { if err != nil {
return mounts, err return mounts, err
} }

@ -20,7 +20,7 @@ func Rename(ctx context.Context, nameOrID string, options *RenameOptions) error
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/containers/%s/rename", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/containers/%s/rename", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }

@ -22,7 +22,7 @@ func Systemd(ctx context.Context, nameOrID string, options *SystemdOptions) (*en
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/generate/%s/systemd", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/generate/%s/systemd", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -54,7 +54,7 @@ func Kube(ctx context.Context, nameOrIDs []string, options *KubeOptions) (*entit
for _, name := range nameOrIDs { for _, name := range nameOrIDs {
params.Add("names", name) params.Add("names", name)
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/generate/kube", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/generate/kube", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -392,7 +392,7 @@ func Build(ctx context.Context, containerFiles []string, options entities.BuildO
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(tarfile, http.MethodPost, "/build", params, headers) response, err := conn.DoRequest(ctx, tarfile, http.MethodPost, "/build", params, headers)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -19,7 +19,7 @@ func Diff(ctx context.Context, nameOrID string, options *DiffOptions) ([]archive
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/%s/changes", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/%s/changes", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -23,7 +23,7 @@ func Exists(ctx context.Context, nameOrID string, options *ExistsOptions) (bool,
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/%s/exists", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/%s/exists", nil, nil, nameOrID)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -47,7 +47,7 @@ func List(ctx context.Context, options *ListOptions) ([]*entities.ImageSummary,
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/json", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/json", params, nil)
if err != nil { if err != nil {
return imageSummary, err return imageSummary, err
} }
@ -71,7 +71,7 @@ func GetImage(ctx context.Context, nameOrID string, options *GetOptions) (*entit
return nil, err return nil, err
} }
inspectedData := entities.ImageInspectReport{} inspectedData := entities.ImageInspectReport{}
response, err := conn.DoRequest(nil, http.MethodGet, "/images/%s/json", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/%s/json", params, nil, nameOrID)
if err != nil { if err != nil {
return &inspectedData, err return &inspectedData, err
} }
@ -94,7 +94,7 @@ func Tree(ctx context.Context, nameOrID string, options *TreeOptions) (*entities
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/%s/tree", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/%s/tree", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -114,7 +114,7 @@ func History(ctx context.Context, nameOrID string, options *HistoryOptions) ([]*
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/%s/history", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/%s/history", nil, nil, nameOrID)
if err != nil { if err != nil {
return history, err return history, err
} }
@ -129,7 +129,7 @@ func Load(ctx context.Context, r io.Reader) (*entities.ImageLoadReport, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(r, http.MethodPost, "/images/load", nil, nil) response, err := conn.DoRequest(ctx, r, http.MethodPost, "/images/load", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -155,7 +155,7 @@ func Export(ctx context.Context, nameOrIDs []string, w io.Writer, options *Expor
for _, ref := range nameOrIDs { for _, ref := range nameOrIDs {
params.Add("references", ref) params.Add("references", ref)
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/export", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/export", params, nil)
if err != nil { if err != nil {
return err return err
} }
@ -185,7 +185,7 @@ func Prune(ctx context.Context, options *PruneOptions) ([]*reports.PruneReport,
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/images/prune", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/images/prune", params, nil)
if err != nil { if err != nil {
return deleted, err return deleted, err
} }
@ -207,7 +207,7 @@ func Tag(ctx context.Context, nameOrID, tag, repo string, options *TagOptions) e
params := url.Values{} params := url.Values{}
params.Set("tag", tag) params.Set("tag", tag)
params.Set("repo", repo) params.Set("repo", repo)
response, err := conn.DoRequest(nil, http.MethodPost, "/images/%s/tag", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/images/%s/tag", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -229,7 +229,7 @@ func Untag(ctx context.Context, nameOrID, tag, repo string, options *UntagOption
params := url.Values{} params := url.Values{}
params.Set("tag", tag) params.Set("tag", tag)
params.Set("repo", repo) params.Set("repo", repo)
response, err := conn.DoRequest(nil, http.MethodPost, "/images/%s/untag", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/images/%s/untag", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -257,7 +257,7 @@ func Import(ctx context.Context, r io.Reader, options *ImportOptions) (*entities
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(r, http.MethodPost, "/images/import", params, nil) response, err := conn.DoRequest(ctx, r, http.MethodPost, "/images/import", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -298,7 +298,7 @@ func Push(ctx context.Context, source string, destination string, options *PushO
params.Set("destination", destination) params.Set("destination", destination)
path := fmt.Sprintf("/images/%s/push", source) path := fmt.Sprintf("/images/%s/push", source)
response, err := conn.DoRequest(nil, http.MethodPost, path, params, header) response, err := conn.DoRequest(ctx, nil, http.MethodPost, path, params, header)
if err != nil { if err != nil {
return err return err
} }
@ -334,7 +334,7 @@ func Search(ctx context.Context, term string, options *SearchOptions) ([]entitie
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/images/search", params, header) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/images/search", params, header)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -47,7 +47,7 @@ func Pull(ctx context.Context, rawImage string, options *PullOptions) ([]string,
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/images/pull", params, header) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/images/pull", params, header)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -32,7 +32,7 @@ func Remove(ctx context.Context, images []string, options *RemoveOptions) (*enti
for _, image := range images { for _, image := range images {
params.Add("images", image) params.Add("images", image)
} }
response, err := conn.DoRequest(nil, http.MethodDelete, "/images/remove", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/images/remove", params, nil)
if err != nil { if err != nil {
return nil, []error{err} return nil, []error{err}
} }

@ -42,7 +42,7 @@ func Create(ctx context.Context, names, images []string, options *CreateOptions)
params.Add("image", i) params.Add("image", i)
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/manifests/create", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/manifests/create", params, nil)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -57,7 +57,7 @@ func Exists(ctx context.Context, name string, options *ExistsOptions) (bool, err
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/manifests/%s/exists", nil, nil, name) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/manifests/%s/exists", nil, nil, name)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -77,7 +77,7 @@ func Inspect(ctx context.Context, name string, options *InspectOptions) (*manife
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/manifests/%s/json", nil, nil, name) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/manifests/%s/json", nil, nil, name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -102,7 +102,7 @@ func Add(ctx context.Context, name string, options *AddOptions) (string, error)
return "", err return "", err
} }
stringReader := strings.NewReader(optionsString) stringReader := strings.NewReader(optionsString)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/manifests/%s/add", nil, nil, name) response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/manifests/%s/add", nil, nil, name)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -125,7 +125,7 @@ func Remove(ctx context.Context, name, digest string, options *RemoveOptions) (s
} }
params := url.Values{} params := url.Values{}
params.Set("digest", digest) params.Set("digest", digest)
response, err := conn.DoRequest(nil, http.MethodDelete, "/manifests/%s", params, nil, name) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/manifests/%s", params, nil, name)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -163,7 +163,7 @@ func Push(ctx context.Context, name, destination string, options *images.PushOpt
} }
params.Set("image", name) params.Set("image", name)
params.Set("destination", destination) params.Set("destination", destination)
response, err := conn.DoRequest(nil, http.MethodPost, "/manifests/%s/push", params, nil, name) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/manifests/%s/push", params, nil, name)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -187,7 +187,7 @@ func Push(ctx context.Context, name, destination string, options *images.PushOpt
// return "", err // return "", err
// } // }
// stringReader := strings.NewReader(optionsString) // stringReader := strings.NewReader(optionsString)
// response, err := conn.DoRequest(stringReader, http.MethodPost, "/manifests/%s/annotate", params, name) // response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/manifests/%s/annotate", params, name)
// if err != nil { // if err != nil {
// return "", err // return "", err
// } // }

@ -28,7 +28,7 @@ func Create(ctx context.Context, network *types.Network) (types.Network, error)
return report, err return report, err
} }
reader := strings.NewReader(networkConfig) reader := strings.NewReader(networkConfig)
response, err := conn.DoRequest(reader, http.MethodPost, "/networks/create", nil, nil) response, err := conn.DoRequest(ctx, reader, http.MethodPost, "/networks/create", nil, nil)
if err != nil { if err != nil {
return report, err return report, err
} }
@ -44,7 +44,7 @@ func Inspect(ctx context.Context, nameOrID string, _ *InspectOptions) (types.Net
if err != nil { if err != nil {
return net, err return net, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/networks/%s/json", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/networks/%s/json", nil, nil, nameOrID)
if err != nil { if err != nil {
return net, err return net, err
} }
@ -69,7 +69,7 @@ func Remove(ctx context.Context, nameOrID string, options *RemoveOptions) ([]*en
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodDelete, "/networks/%s", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/networks/%s", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -92,7 +92,7 @@ func List(ctx context.Context, options *ListOptions) ([]types.Network, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/networks/json", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/networks/json", params, nil)
if err != nil { if err != nil {
return netList, err return netList, err
} }
@ -128,7 +128,7 @@ func Disconnect(ctx context.Context, networkName string, ContainerNameOrID strin
return err return err
} }
stringReader := strings.NewReader(body) stringReader := strings.NewReader(body)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/networks/%s/disconnect", params, nil, networkName) response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/networks/%s/disconnect", params, nil, networkName)
if err != nil { if err != nil {
return err return err
} }
@ -163,7 +163,7 @@ func Connect(ctx context.Context, networkName string, ContainerNameOrID string,
return err return err
} }
stringReader := strings.NewReader(body) stringReader := strings.NewReader(body)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/networks/%s/connect", params, nil, networkName) response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/networks/%s/connect", params, nil, networkName)
if err != nil { if err != nil {
return err return err
} }
@ -178,7 +178,7 @@ func Exists(ctx context.Context, nameOrID string, options *ExistsOptions) (bool,
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/networks/%s/exists", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/networks/%s/exists", nil, nil, nameOrID)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -204,7 +204,7 @@ func Prune(ctx context.Context, options *PruneOptions) ([]*entities.NetworkPrune
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/networks/prune", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/networks/prune", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -45,7 +45,7 @@ func Kube(ctx context.Context, path string, options *KubeOptions) (*entities.Pla
return nil, err return nil, err
} }
response, err := conn.DoRequest(f, http.MethodPost, "/play/kube", params, header) response, err := conn.DoRequest(ctx, f, http.MethodPost, "/play/kube", params, header)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -74,7 +74,7 @@ func KubeDown(ctx context.Context, path string) (*entities.PlayKubeReport, error
logrus.Warn(err) logrus.Warn(err)
} }
}() }()
response, err := conn.DoRequest(f, http.MethodDelete, "/play/kube", nil, nil) response, err := conn.DoRequest(ctx, f, http.MethodDelete, "/play/kube", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -29,7 +29,7 @@ func CreatePodFromSpec(ctx context.Context, spec *entities.PodSpec) (*entities.P
return nil, err return nil, err
} }
stringReader := strings.NewReader(specString) stringReader := strings.NewReader(specString)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/pods/create", nil, nil) response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/pods/create", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -44,7 +44,7 @@ func Exists(ctx context.Context, nameOrID string, options *ExistsOptions) (bool,
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/pods/%s/exists", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/pods/%s/exists", nil, nil, nameOrID)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -66,7 +66,7 @@ func Inspect(ctx context.Context, nameOrID string, options *InspectOptions) (*en
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/pods/%s/json", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/pods/%s/json", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -92,7 +92,7 @@ func Kill(ctx context.Context, nameOrID string, options *KillOptions) (*entities
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/%s/kill", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/%s/kill", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -112,7 +112,7 @@ func Pause(ctx context.Context, nameOrID string, options *PauseOptions) (*entiti
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/%s/pause", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/%s/pause", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -133,7 +133,7 @@ func Prune(ctx context.Context, options *PruneOptions) ([]*entities.PodPruneRepo
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/prune", nil, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/prune", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -159,7 +159,7 @@ func List(ctx context.Context, options *ListOptions) ([]*entities.ListPodsReport
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/pods/json", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/pods/json", params, nil)
if err != nil { if err != nil {
return podsReports, err return podsReports, err
} }
@ -179,7 +179,7 @@ func Restart(ctx context.Context, nameOrID string, options *RestartOptions) (*en
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/%s/restart", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/%s/restart", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -203,7 +203,7 @@ func Remove(ctx context.Context, nameOrID string, options *RemoveOptions) (*enti
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodDelete, "/pods/%s", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/pods/%s", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -223,7 +223,7 @@ func Start(ctx context.Context, nameOrID string, options *StartOptions) (*entiti
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/%s/start", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/%s/start", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -252,7 +252,7 @@ func Stop(ctx context.Context, nameOrID string, options *StopOptions) (*entities
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/%s/stop", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/%s/stop", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -279,7 +279,7 @@ func Top(ctx context.Context, nameOrID string, options *TopOptions) ([]string, e
if descriptors := options.GetDescriptors(); len(descriptors) > 0 { if descriptors := options.GetDescriptors(); len(descriptors) > 0 {
params.Set("ps_args", strings.Join(descriptors, ",")) params.Set("ps_args", strings.Join(descriptors, ","))
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/pods/%s/top", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/pods/%s/top", params, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -312,7 +312,7 @@ func Unpause(ctx context.Context, nameOrID string, options *UnpauseOptions) (*en
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/pods/%s/unpause", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/pods/%s/unpause", nil, nil, nameOrID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -339,7 +339,7 @@ func Stats(ctx context.Context, namesOrIDs []string, options *StatsOptions) ([]*
} }
var reports []*entities.PodStatsReport var reports []*entities.PodStatsReport
response, err := conn.DoRequest(nil, http.MethodGet, "/pods/stats", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/pods/stats", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -22,7 +22,7 @@ func List(ctx context.Context, options *ListOptions) ([]*entities.SecretInfoRepo
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/secrets/json", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/secrets/json", params, nil)
if err != nil { if err != nil {
return secrs, err return secrs, err
} }
@ -40,7 +40,7 @@ func Inspect(ctx context.Context, nameOrID string, options *InspectOptions) (*en
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/secrets/%s/json", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/secrets/%s/json", nil, nil, nameOrID)
if err != nil { if err != nil {
return inspect, err return inspect, err
} }
@ -56,7 +56,7 @@ func Remove(ctx context.Context, nameOrID string) error {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodDelete, "/secrets/%s", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/secrets/%s", nil, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -80,7 +80,7 @@ func Create(ctx context.Context, reader io.Reader, options *CreateOptions) (*ent
return nil, err return nil, err
} }
response, err := conn.DoRequest(reader, http.MethodPost, "/secrets/create", params, nil) response, err := conn.DoRequest(ctx, reader, http.MethodPost, "/secrets/create", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -14,7 +14,7 @@ func Info(ctx context.Context, _ *InfoOptions) (*define.Info, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/info", nil, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/info", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -27,7 +27,7 @@ func Events(ctx context.Context, eventChan chan entities.Event, cancelChan chan
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/events", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/events", params, nil)
if err != nil { if err != nil {
return err return err
} }
@ -73,7 +73,7 @@ func Prune(ctx context.Context, options *PruneOptions) (*entities.SystemPruneRep
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/system/prune", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/system/prune", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -101,7 +101,7 @@ func Version(ctx context.Context, options *VersionOptions) (*entities.SystemVers
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/version", nil, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/version", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -142,7 +142,7 @@ func DiskUsage(ctx context.Context, options *DiskOptions) (*entities.SystemDfRep
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/system/df", nil, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/system/df", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }

@ -0,0 +1,68 @@
package test_bindings
import (
"context"
"time"
"github.com/containers/podman/v3/pkg/bindings/containers"
"github.com/containers/podman/v3/pkg/bindings/system"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gexec"
)
var _ = Describe("Podman connection", func() {
var (
bt *bindingTest
s *gexec.Session
)
BeforeEach(func() {
bt = newBindingTest()
bt.RestoreImagesFromCache()
s = bt.startAPIService()
time.Sleep(1 * time.Second)
err := bt.NewConnection()
Expect(err).To(BeNil())
})
AfterEach(func() {
s.Kill()
bt.cleanup()
})
It("request on cancelled context results in error", func() {
ctx, cancel := context.WithCancel(bt.conn)
cancel()
_, err := system.Version(ctx, nil)
Expect(err).To(MatchError(ctx.Err()))
})
It("cancel request in flight reports cancelled context", func() {
var name = "top"
_, err := bt.RunTopContainer(&name, nil)
Expect(err).To(BeNil())
errChan := make(chan error)
ctx, cancel := context.WithCancel(bt.conn)
go func() {
defer close(errChan)
_, err := containers.Wait(ctx, name, nil)
errChan <- err
}()
// Wait for the goroutine to fire the request
time.Sleep(1 * time.Second)
cancel()
select {
case err, ok := <-errChan:
Expect(ok).To(BeTrue())
Expect(err).To(MatchError(ctx.Err()))
case <-time.NewTimer(1 * time.Second).C:
Fail("cancelled request did not return in less than 1 second")
}
})
})

@ -29,7 +29,7 @@ func Create(ctx context.Context, config entities.VolumeCreateOptions, options *C
return nil, err return nil, err
} }
stringReader := strings.NewReader(createString) stringReader := strings.NewReader(createString)
response, err := conn.DoRequest(stringReader, http.MethodPost, "/volumes/create", nil, nil) response, err := conn.DoRequest(ctx, stringReader, http.MethodPost, "/volumes/create", nil, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -51,7 +51,7 @@ func Inspect(ctx context.Context, nameOrID string, options *InspectOptions) (*en
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/volumes/%s/json", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/volumes/%s/json", nil, nil, nameOrID)
if err != nil { if err != nil {
return &inspect, err return &inspect, err
} }
@ -74,7 +74,7 @@ func List(ctx context.Context, options *ListOptions) ([]*entities.VolumeListRepo
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/volumes/json", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/volumes/json", params, nil)
if err != nil { if err != nil {
return vols, err return vols, err
} }
@ -96,7 +96,7 @@ func Prune(ctx context.Context, options *PruneOptions) ([]*reports.PruneReport,
if err != nil { if err != nil {
return nil, err return nil, err
} }
response, err := conn.DoRequest(nil, http.MethodPost, "/volumes/prune", params, nil) response, err := conn.DoRequest(ctx, nil, http.MethodPost, "/volumes/prune", params, nil)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -116,7 +116,7 @@ func Remove(ctx context.Context, nameOrID string, options *RemoveOptions) error
if err != nil { if err != nil {
return err return err
} }
response, err := conn.DoRequest(nil, http.MethodDelete, "/volumes/%s", params, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodDelete, "/volumes/%s", params, nil, nameOrID)
if err != nil { if err != nil {
return err return err
} }
@ -131,7 +131,7 @@ func Exists(ctx context.Context, nameOrID string, options *ExistsOptions) (bool,
if err != nil { if err != nil {
return false, err return false, err
} }
response, err := conn.DoRequest(nil, http.MethodGet, "/volumes/%s/exists", nil, nil, nameOrID) response, err := conn.DoRequest(ctx, nil, http.MethodGet, "/volumes/%s/exists", nil, nil, nameOrID)
if err != nil { if err != nil {
return false, err return false, err
} }