50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package testutils
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"github.com/docker/docker/api/types"
|
|
"github.com/docker/docker/client"
|
|
"github.com/docker/docker/pkg/jsonmessage"
|
|
"github.com/docker/docker/pkg/term"
|
|
)
|
|
|
|
// RegistryHelper implements methods to manipulate docker registry from test cases
|
|
type RegistryHelper struct {
|
|
dcli *client.Client
|
|
auth string
|
|
addr string
|
|
}
|
|
|
|
// NewRegistryHelper returns RegistryHelper
|
|
func NewRegistryHelper(dcli *client.Client, username, password, addr string) (*RegistryHelper, error) {
|
|
auth, err := constructRegistryAuth(username, password)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &RegistryHelper{dcli: dcli, auth: auth, addr: addr}, nil
|
|
}
|
|
|
|
// RefillRegistry adds images to a registry.
|
|
func (r *RegistryHelper) RefillRegistry(image string) error {
|
|
if err := pullDockerImage(r.dcli, image); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := r.dcli.ImageTag(context.Background(), image, r.addr+"/"+image); err != nil {
|
|
return err
|
|
}
|
|
|
|
resp, err := r.dcli.ImagePush(context.Background(), r.addr+"/"+image, types.ImagePushOptions{
|
|
RegistryAuth: r.auth,
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer resp.Close()
|
|
|
|
fd, isTerm := term.GetFdInfo(os.Stdout)
|
|
|
|
return jsonmessage.DisplayJSONMessagesStream(resp, os.Stdout, fd, isTerm, nil)
|
|
}
|