Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)
| ... | ... |
@@ -18,6 +18,7 @@ import ( |
| 18 | 18 |
"github.com/docker/docker/builtins" |
| 19 | 19 |
"github.com/docker/docker/daemon" |
| 20 | 20 |
"github.com/docker/docker/engine" |
| 21 |
+ "github.com/docker/docker/pkg/log" |
|
| 21 | 22 |
"github.com/docker/docker/runconfig" |
| 22 | 23 |
"github.com/docker/docker/utils" |
| 23 | 24 |
) |
| ... | ... |
@@ -28,7 +29,7 @@ import ( |
| 28 | 28 |
|
| 29 | 29 |
// Create a temporary daemon suitable for unit testing. |
| 30 | 30 |
// Call t.Fatal() at the first error. |
| 31 |
-func mkDaemon(f utils.Fataler) *daemon.Daemon {
|
|
| 31 |
+func mkDaemon(f log.Fataler) *daemon.Daemon {
|
|
| 32 | 32 |
eng := newTestEngine(f, false, "") |
| 33 | 33 |
return mkDaemonFromEngine(eng, f) |
| 34 | 34 |
// FIXME: |
| ... | ... |
@@ -37,7 +38,7 @@ func mkDaemon(f utils.Fataler) *daemon.Daemon {
|
| 37 | 37 |
// [...] |
| 38 | 38 |
} |
| 39 | 39 |
|
| 40 |
-func createNamedTestContainer(eng *engine.Engine, config *runconfig.Config, f utils.Fataler, name string) (shortId string) {
|
|
| 40 |
+func createNamedTestContainer(eng *engine.Engine, config *runconfig.Config, f log.Fataler, name string) (shortId string) {
|
|
| 41 | 41 |
job := eng.Job("create", name)
|
| 42 | 42 |
if err := job.ImportEnv(config); err != nil {
|
| 43 | 43 |
f.Fatal(err) |
| ... | ... |
@@ -50,23 +51,23 @@ func createNamedTestContainer(eng *engine.Engine, config *runconfig.Config, f ut |
| 50 | 50 |
return engine.Tail(outputBuffer, 1) |
| 51 | 51 |
} |
| 52 | 52 |
|
| 53 |
-func createTestContainer(eng *engine.Engine, config *runconfig.Config, f utils.Fataler) (shortId string) {
|
|
| 53 |
+func createTestContainer(eng *engine.Engine, config *runconfig.Config, f log.Fataler) (shortId string) {
|
|
| 54 | 54 |
return createNamedTestContainer(eng, config, f, "") |
| 55 | 55 |
} |
| 56 | 56 |
|
| 57 |
-func startContainer(eng *engine.Engine, id string, t utils.Fataler) {
|
|
| 57 |
+func startContainer(eng *engine.Engine, id string, t log.Fataler) {
|
|
| 58 | 58 |
job := eng.Job("start", id)
|
| 59 | 59 |
if err := job.Run(); err != nil {
|
| 60 | 60 |
t.Fatal(err) |
| 61 | 61 |
} |
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 |
-func containerRun(eng *engine.Engine, id string, t utils.Fataler) {
|
|
| 64 |
+func containerRun(eng *engine.Engine, id string, t log.Fataler) {
|
|
| 65 | 65 |
startContainer(eng, id, t) |
| 66 | 66 |
containerWait(eng, id, t) |
| 67 | 67 |
} |
| 68 | 68 |
|
| 69 |
-func containerFileExists(eng *engine.Engine, id, dir string, t utils.Fataler) bool {
|
|
| 69 |
+func containerFileExists(eng *engine.Engine, id, dir string, t log.Fataler) bool {
|
|
| 70 | 70 |
c := getContainer(eng, id, t) |
| 71 | 71 |
if err := c.Mount(); err != nil {
|
| 72 | 72 |
t.Fatal(err) |
| ... | ... |
@@ -81,7 +82,7 @@ func containerFileExists(eng *engine.Engine, id, dir string, t utils.Fataler) bo |
| 81 | 81 |
return true |
| 82 | 82 |
} |
| 83 | 83 |
|
| 84 |
-func containerAttach(eng *engine.Engine, id string, t utils.Fataler) (io.WriteCloser, io.ReadCloser) {
|
|
| 84 |
+func containerAttach(eng *engine.Engine, id string, t log.Fataler) (io.WriteCloser, io.ReadCloser) {
|
|
| 85 | 85 |
c := getContainer(eng, id, t) |
| 86 | 86 |
i, err := c.StdinPipe() |
| 87 | 87 |
if err != nil {
|
| ... | ... |
@@ -94,31 +95,31 @@ func containerAttach(eng *engine.Engine, id string, t utils.Fataler) (io.WriteCl |
| 94 | 94 |
return i, o |
| 95 | 95 |
} |
| 96 | 96 |
|
| 97 |
-func containerWait(eng *engine.Engine, id string, t utils.Fataler) int {
|
|
| 97 |
+func containerWait(eng *engine.Engine, id string, t log.Fataler) int {
|
|
| 98 | 98 |
ex, _ := getContainer(eng, id, t).State.WaitStop(-1 * time.Second) |
| 99 | 99 |
return ex |
| 100 | 100 |
} |
| 101 | 101 |
|
| 102 |
-func containerWaitTimeout(eng *engine.Engine, id string, t utils.Fataler) error {
|
|
| 102 |
+func containerWaitTimeout(eng *engine.Engine, id string, t log.Fataler) error {
|
|
| 103 | 103 |
_, err := getContainer(eng, id, t).State.WaitStop(500 * time.Millisecond) |
| 104 | 104 |
return err |
| 105 | 105 |
} |
| 106 | 106 |
|
| 107 |
-func containerKill(eng *engine.Engine, id string, t utils.Fataler) {
|
|
| 107 |
+func containerKill(eng *engine.Engine, id string, t log.Fataler) {
|
|
| 108 | 108 |
if err := eng.Job("kill", id).Run(); err != nil {
|
| 109 | 109 |
t.Fatal(err) |
| 110 | 110 |
} |
| 111 | 111 |
} |
| 112 | 112 |
|
| 113 |
-func containerRunning(eng *engine.Engine, id string, t utils.Fataler) bool {
|
|
| 113 |
+func containerRunning(eng *engine.Engine, id string, t log.Fataler) bool {
|
|
| 114 | 114 |
return getContainer(eng, id, t).State.IsRunning() |
| 115 | 115 |
} |
| 116 | 116 |
|
| 117 |
-func containerAssertExists(eng *engine.Engine, id string, t utils.Fataler) {
|
|
| 117 |
+func containerAssertExists(eng *engine.Engine, id string, t log.Fataler) {
|
|
| 118 | 118 |
getContainer(eng, id, t) |
| 119 | 119 |
} |
| 120 | 120 |
|
| 121 |
-func containerAssertNotExists(eng *engine.Engine, id string, t utils.Fataler) {
|
|
| 121 |
+func containerAssertNotExists(eng *engine.Engine, id string, t log.Fataler) {
|
|
| 122 | 122 |
daemon := mkDaemonFromEngine(eng, t) |
| 123 | 123 |
if c := daemon.Get(id); c != nil {
|
| 124 | 124 |
t.Fatal(fmt.Errorf("Container %s should not exist", id))
|
| ... | ... |
@@ -127,7 +128,7 @@ func containerAssertNotExists(eng *engine.Engine, id string, t utils.Fataler) {
|
| 127 | 127 |
|
| 128 | 128 |
// assertHttpNotError expect the given response to not have an error. |
| 129 | 129 |
// Otherwise the it causes the test to fail. |
| 130 |
-func assertHttpNotError(r *httptest.ResponseRecorder, t utils.Fataler) {
|
|
| 130 |
+func assertHttpNotError(r *httptest.ResponseRecorder, t log.Fataler) {
|
|
| 131 | 131 |
// Non-error http status are [200, 400) |
| 132 | 132 |
if r.Code < http.StatusOK || r.Code >= http.StatusBadRequest {
|
| 133 | 133 |
t.Fatal(fmt.Errorf("Unexpected http error: %v", r.Code))
|
| ... | ... |
@@ -136,14 +137,14 @@ func assertHttpNotError(r *httptest.ResponseRecorder, t utils.Fataler) {
|
| 136 | 136 |
|
| 137 | 137 |
// assertHttpError expect the given response to have an error. |
| 138 | 138 |
// Otherwise the it causes the test to fail. |
| 139 |
-func assertHttpError(r *httptest.ResponseRecorder, t utils.Fataler) {
|
|
| 139 |
+func assertHttpError(r *httptest.ResponseRecorder, t log.Fataler) {
|
|
| 140 | 140 |
// Non-error http status are [200, 400) |
| 141 | 141 |
if !(r.Code < http.StatusOK || r.Code >= http.StatusBadRequest) {
|
| 142 | 142 |
t.Fatal(fmt.Errorf("Unexpected http success code: %v", r.Code))
|
| 143 | 143 |
} |
| 144 | 144 |
} |
| 145 | 145 |
|
| 146 |
-func getContainer(eng *engine.Engine, id string, t utils.Fataler) *daemon.Container {
|
|
| 146 |
+func getContainer(eng *engine.Engine, id string, t log.Fataler) *daemon.Container {
|
|
| 147 | 147 |
daemon := mkDaemonFromEngine(eng, t) |
| 148 | 148 |
c := daemon.Get(id) |
| 149 | 149 |
if c == nil {
|
| ... | ... |
@@ -152,7 +153,7 @@ func getContainer(eng *engine.Engine, id string, t utils.Fataler) *daemon.Contai |
| 152 | 152 |
return c |
| 153 | 153 |
} |
| 154 | 154 |
|
| 155 |
-func mkDaemonFromEngine(eng *engine.Engine, t utils.Fataler) *daemon.Daemon {
|
|
| 155 |
+func mkDaemonFromEngine(eng *engine.Engine, t log.Fataler) *daemon.Daemon {
|
|
| 156 | 156 |
iDaemon := eng.Hack_GetGlobalVar("httpapi.daemon")
|
| 157 | 157 |
if iDaemon == nil {
|
| 158 | 158 |
panic("Legacy daemon field not set in engine")
|
| ... | ... |
@@ -164,7 +165,7 @@ func mkDaemonFromEngine(eng *engine.Engine, t utils.Fataler) *daemon.Daemon {
|
| 164 | 164 |
return daemon |
| 165 | 165 |
} |
| 166 | 166 |
|
| 167 |
-func newTestEngine(t utils.Fataler, autorestart bool, root string) *engine.Engine {
|
|
| 167 |
+func newTestEngine(t log.Fataler, autorestart bool, root string) *engine.Engine {
|
|
| 168 | 168 |
if root == "" {
|
| 169 | 169 |
if dir, err := newTestDirectory(unitTestStoreBase); err != nil {
|
| 170 | 170 |
t.Fatal(err) |
| ... | ... |
@@ -196,7 +197,7 @@ func newTestEngine(t utils.Fataler, autorestart bool, root string) *engine.Engin |
| 196 | 196 |
return eng |
| 197 | 197 |
} |
| 198 | 198 |
|
| 199 |
-func NewTestEngine(t utils.Fataler) *engine.Engine {
|
|
| 199 |
+func NewTestEngine(t log.Fataler) *engine.Engine {
|
|
| 200 | 200 |
return newTestEngine(t, false, "") |
| 201 | 201 |
} |
| 202 | 202 |
|
| ... | ... |
@@ -20,6 +20,12 @@ const ( |
| 20 | 20 |
debug |
| 21 | 21 |
) |
| 22 | 22 |
|
| 23 |
+// A common interface to access the Fatal method of |
|
| 24 |
+// both testing.B and testing.T. |
|
| 25 |
+type Fataler interface {
|
|
| 26 |
+ Fatal(args ...interface{})
|
|
| 27 |
+} |
|
| 28 |
+ |
|
| 23 | 29 |
func (p priority) String() string {
|
| 24 | 30 |
switch p {
|
| 25 | 31 |
case fatal: |
| ... | ... |
@@ -17,6 +17,7 @@ import ( |
| 17 | 17 |
"time" |
| 18 | 18 |
|
| 19 | 19 |
"github.com/docker/docker/pkg/httputils" |
| 20 |
+ "github.com/docker/docker/pkg/log" |
|
| 20 | 21 |
"github.com/docker/docker/pkg/tarsum" |
| 21 | 22 |
"github.com/docker/docker/utils" |
| 22 | 23 |
) |
| ... | ... |
@@ -52,7 +53,7 @@ func NewSession(authConfig *AuthConfig, factory *utils.HTTPRequestFactory, index |
| 52 | 52 |
return nil, err |
| 53 | 53 |
} |
| 54 | 54 |
if info.Standalone {
|
| 55 |
- utils.Debugf("Endpoint %s is eligible for private registry registry. Enabling decorator.", indexEndpoint)
|
|
| 55 |
+ log.Debugf("Endpoint %s is eligible for private registry registry. Enabling decorator.", indexEndpoint)
|
|
| 56 | 56 |
dec := utils.NewHTTPAuthDecorator(authConfig.Username, authConfig.Password) |
| 57 | 57 |
factory.AddDecorator(dec) |
| 58 | 58 |
} |
| ... | ... |
@@ -91,7 +92,7 @@ func (r *Session) GetRemoteHistory(imgID, registry string, token []string) ([]st |
| 91 | 91 |
return nil, fmt.Errorf("Error while reading the http response: %s", err)
|
| 92 | 92 |
} |
| 93 | 93 |
|
| 94 |
- utils.Debugf("Ancestry: %s", jsonString)
|
|
| 94 |
+ log.Debugf("Ancestry: %s", jsonString)
|
|
| 95 | 95 |
history := new([]string) |
| 96 | 96 |
if err := json.Unmarshal(jsonString, history); err != nil {
|
| 97 | 97 |
return nil, err |
| ... | ... |
@@ -105,13 +106,13 @@ func (r *Session) LookupRemoteImage(imgID, registry string, token []string) bool |
| 105 | 105 |
|
| 106 | 106 |
req, err := r.reqFactory.NewRequest("GET", registry+"images/"+imgID+"/json", nil)
|
| 107 | 107 |
if err != nil {
|
| 108 |
- utils.Errorf("Error in LookupRemoteImage %s", err)
|
|
| 108 |
+ log.Errorf("Error in LookupRemoteImage %s", err)
|
|
| 109 | 109 |
return false |
| 110 | 110 |
} |
| 111 | 111 |
setTokenAuth(req, token) |
| 112 | 112 |
res, _, err := r.doRequest(req) |
| 113 | 113 |
if err != nil {
|
| 114 |
- utils.Errorf("Error in LookupRemoteImage %s", err)
|
|
| 114 |
+ log.Errorf("Error in LookupRemoteImage %s", err)
|
|
| 115 | 115 |
return false |
| 116 | 116 |
} |
| 117 | 117 |
res.Body.Close() |
| ... | ... |
@@ -184,10 +185,10 @@ func (r *Session) GetRemoteImageLayer(imgID, registry string, token []string, im |
| 184 | 184 |
} |
| 185 | 185 |
|
| 186 | 186 |
if res.Header.Get("Accept-Ranges") == "bytes" && imgSize > 0 {
|
| 187 |
- utils.Debugf("server supports resume")
|
|
| 187 |
+ log.Debugf("server supports resume")
|
|
| 188 | 188 |
return httputils.ResumableRequestReaderWithInitialResponse(client, req, 5, imgSize, res), nil |
| 189 | 189 |
} |
| 190 |
- utils.Debugf("server doesn't support resume")
|
|
| 190 |
+ log.Debugf("server doesn't support resume")
|
|
| 191 | 191 |
return res.Body, nil |
| 192 | 192 |
} |
| 193 | 193 |
|
| ... | ... |
@@ -210,7 +211,7 @@ func (r *Session) GetRemoteTags(registries []string, repository string, token [] |
| 210 | 210 |
return nil, err |
| 211 | 211 |
} |
| 212 | 212 |
|
| 213 |
- utils.Debugf("Got status code %d from %s", res.StatusCode, endpoint)
|
|
| 213 |
+ log.Debugf("Got status code %d from %s", res.StatusCode, endpoint)
|
|
| 214 | 214 |
defer res.Body.Close() |
| 215 | 215 |
|
| 216 | 216 |
if res.StatusCode != 200 && res.StatusCode != 404 {
|
| ... | ... |
@@ -255,7 +256,7 @@ func (r *Session) GetRepositoryData(remote string) (*RepositoryData, error) {
|
| 255 | 255 |
indexEp := r.indexEndpoint |
| 256 | 256 |
repositoryTarget := fmt.Sprintf("%srepositories/%s/images", indexEp, remote)
|
| 257 | 257 |
|
| 258 |
- utils.Debugf("[registry] Calling GET %s", repositoryTarget)
|
|
| 258 |
+ log.Debugf("[registry] Calling GET %s", repositoryTarget)
|
|
| 259 | 259 |
|
| 260 | 260 |
req, err := r.reqFactory.NewRequest("GET", repositoryTarget, nil)
|
| 261 | 261 |
if err != nil {
|
| ... | ... |
@@ -324,7 +325,7 @@ func (r *Session) GetRepositoryData(remote string) (*RepositoryData, error) {
|
| 324 | 324 |
|
| 325 | 325 |
func (r *Session) PushImageChecksumRegistry(imgData *ImgData, registry string, token []string) error {
|
| 326 | 326 |
|
| 327 |
- utils.Debugf("[registry] Calling PUT %s", registry+"images/"+imgData.ID+"/checksum")
|
|
| 327 |
+ log.Debugf("[registry] Calling PUT %s", registry+"images/"+imgData.ID+"/checksum")
|
|
| 328 | 328 |
|
| 329 | 329 |
req, err := r.reqFactory.NewRequest("PUT", registry+"images/"+imgData.ID+"/checksum", nil)
|
| 330 | 330 |
if err != nil {
|
| ... | ... |
@@ -361,7 +362,7 @@ func (r *Session) PushImageChecksumRegistry(imgData *ImgData, registry string, t |
| 361 | 361 |
// Push a local image to the registry |
| 362 | 362 |
func (r *Session) PushImageJSONRegistry(imgData *ImgData, jsonRaw []byte, registry string, token []string) error {
|
| 363 | 363 |
|
| 364 |
- utils.Debugf("[registry] Calling PUT %s", registry+"images/"+imgData.ID+"/json")
|
|
| 364 |
+ log.Debugf("[registry] Calling PUT %s", registry+"images/"+imgData.ID+"/json")
|
|
| 365 | 365 |
|
| 366 | 366 |
req, err := r.reqFactory.NewRequest("PUT", registry+"images/"+imgData.ID+"/json", bytes.NewReader(jsonRaw))
|
| 367 | 367 |
if err != nil {
|
| ... | ... |
@@ -396,7 +397,7 @@ func (r *Session) PushImageJSONRegistry(imgData *ImgData, jsonRaw []byte, regist |
| 396 | 396 |
|
| 397 | 397 |
func (r *Session) PushImageLayerRegistry(imgID string, layer io.Reader, registry string, token []string, jsonRaw []byte) (checksum string, checksumPayload string, err error) {
|
| 398 | 398 |
|
| 399 |
- utils.Debugf("[registry] Calling PUT %s", registry+"images/"+imgID+"/layer")
|
|
| 399 |
+ log.Debugf("[registry] Calling PUT %s", registry+"images/"+imgID+"/layer")
|
|
| 400 | 400 |
|
| 401 | 401 |
tarsumLayer := &tarsum.TarSum{Reader: layer}
|
| 402 | 402 |
h := sha256.New() |
| ... | ... |
@@ -483,8 +484,8 @@ func (r *Session) PushImageJSONIndex(remote string, imgList []*ImgData, validate |
| 483 | 483 |
suffix = "images" |
| 484 | 484 |
} |
| 485 | 485 |
u := fmt.Sprintf("%srepositories/%s/%s", indexEp, remote, suffix)
|
| 486 |
- utils.Debugf("[registry] PUT %s", u)
|
|
| 487 |
- utils.Debugf("Image list pushed to index:\n%s", imgListJSON)
|
|
| 486 |
+ log.Debugf("[registry] PUT %s", u)
|
|
| 487 |
+ log.Debugf("Image list pushed to index:\n%s", imgListJSON)
|
|
| 488 | 488 |
req, err := r.reqFactory.NewRequest("PUT", u, bytes.NewReader(imgListJSON))
|
| 489 | 489 |
if err != nil {
|
| 490 | 490 |
return nil, err |
| ... | ... |
@@ -505,7 +506,7 @@ func (r *Session) PushImageJSONIndex(remote string, imgList []*ImgData, validate |
| 505 | 505 |
|
| 506 | 506 |
// Redirect if necessary |
| 507 | 507 |
for res.StatusCode >= 300 && res.StatusCode < 400 {
|
| 508 |
- utils.Debugf("Redirected to %s", res.Header.Get("Location"))
|
|
| 508 |
+ log.Debugf("Redirected to %s", res.Header.Get("Location"))
|
|
| 509 | 509 |
req, err = r.reqFactory.NewRequest("PUT", res.Header.Get("Location"), bytes.NewReader(imgListJSON))
|
| 510 | 510 |
if err != nil {
|
| 511 | 511 |
return nil, err |
| ... | ... |
@@ -534,7 +535,7 @@ func (r *Session) PushImageJSONIndex(remote string, imgList []*ImgData, validate |
| 534 | 534 |
} |
| 535 | 535 |
if res.Header.Get("X-Docker-Token") != "" {
|
| 536 | 536 |
tokens = res.Header["X-Docker-Token"] |
| 537 |
- utils.Debugf("Auth token: %v", tokens)
|
|
| 537 |
+ log.Debugf("Auth token: %v", tokens)
|
|
| 538 | 538 |
} else {
|
| 539 | 539 |
return nil, fmt.Errorf("Index response didn't contain an access token")
|
| 540 | 540 |
} |
| ... | ... |
@@ -565,7 +566,7 @@ func (r *Session) PushImageJSONIndex(remote string, imgList []*ImgData, validate |
| 565 | 565 |
} |
| 566 | 566 |
|
| 567 | 567 |
func (r *Session) SearchRepositories(term string) (*SearchResults, error) {
|
| 568 |
- utils.Debugf("Index server: %s", r.indexEndpoint)
|
|
| 568 |
+ log.Debugf("Index server: %s", r.indexEndpoint)
|
|
| 569 | 569 |
u := r.indexEndpoint + "search?q=" + url.QueryEscape(term) |
| 570 | 570 |
req, err := r.reqFactory.NewRequest("GET", u, nil)
|
| 571 | 571 |
if err != nil {
|
| ... | ... |
@@ -28,12 +28,6 @@ type KeyValuePair struct {
|
| 28 | 28 |
Value string |
| 29 | 29 |
} |
| 30 | 30 |
|
| 31 |
-// A common interface to access the Fatal method of |
|
| 32 |
-// both testing.B and testing.T. |
|
| 33 |
-type Fataler interface {
|
|
| 34 |
- Fatal(args ...interface{})
|
|
| 35 |
-} |
|
| 36 |
- |
|
| 37 | 31 |
// Go is a basic promise implementation: it wraps calls a function in a goroutine, |
| 38 | 32 |
// and returns a channel which will later return the function's return value. |
| 39 | 33 |
func Go(f func() error) chan error {
|