Browse code

Remove check.C field from daemon and Use errors package

Signed-off-by: Vincent Demeester <vincent@sbr.pm>

Vincent Demeester authored on 2016/12/09 18:18:02
Showing 2 changed files
... ...
@@ -4,7 +4,6 @@ import (
4 4
 	"bytes"
5 5
 	"crypto/tls"
6 6
 	"encoding/json"
7
-	"errors"
8 7
 	"fmt"
9 8
 	"io"
10 9
 	"io/ioutil"
... ...
@@ -29,6 +28,7 @@ import (
29 29
 	"github.com/docker/go-connections/sockets"
30 30
 	"github.com/docker/go-connections/tlsconfig"
31 31
 	"github.com/go-check/check"
32
+	"github.com/pkg/errors"
32 33
 )
33 34
 
34 35
 // SockRoot holds the path of the default docker integration daemon socket
... ...
@@ -43,9 +43,6 @@ type Daemon struct {
43 43
 	UseDefaultHost    bool
44 44
 	UseDefaultTLSHost bool
45 45
 
46
-	// FIXME(vdemeester) either should be used everywhere (do not return error) or nowhere,
47
-	// so I think we should remove it or use it for everything
48
-	c              *check.C
49 46
 	id             string
50 47
 	logFile        *os.File
51 48
 	stdin          io.WriteCloser
... ...
@@ -97,7 +94,6 @@ func New(c *check.C, dockerBinary string, dockerdBinary string, config Config) *
97 97
 
98 98
 	return &Daemon{
99 99
 		id:            id,
100
-		c:             c,
101 100
 		Folder:        daemonFolder,
102 101
 		Root:          daemonRoot,
103 102
 		storageDriver: os.Getenv("DOCKER_GRAPHDRIVER"),
... ...
@@ -164,7 +160,9 @@ func (d *Daemon) getClientConfig() (*clientConfig, error) {
164 164
 		transport = &http.Transport{}
165 165
 	}
166 166
 
167
-	d.c.Assert(sockets.ConfigureTransport(transport, proto, addr), check.IsNil)
167
+	if err := sockets.ConfigureTransport(transport, proto, addr); err != nil {
168
+		return nil, err
169
+	}
168 170
 
169 171
 	return &clientConfig{
170 172
 		transport: transport,
... ...
@@ -177,7 +175,9 @@ func (d *Daemon) getClientConfig() (*clientConfig, error) {
177 177
 // You can specify additional daemon flags.
178 178
 func (d *Daemon) Start(args ...string) error {
179 179
 	logFile, err := os.OpenFile(filepath.Join(d.Folder, "docker.log"), os.O_RDWR|os.O_CREATE|os.O_APPEND, 0600)
180
-	d.c.Assert(err, check.IsNil, check.Commentf("[%s] Could not create %s/docker.log", d.id, d.Folder))
180
+	if err != nil {
181
+		return errors.Wrapf(err, "[%s] Could not create %s/docker.log", d.id, d.Folder)
182
+	}
181 183
 
182 184
 	return d.StartWithLogFile(logFile, args...)
183 185
 }
... ...
@@ -185,7 +185,9 @@ func (d *Daemon) Start(args ...string) error {
185 185
 // StartWithLogFile will start the daemon and attach its streams to a given file.
186 186
 func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
187 187
 	dockerdBinary, err := exec.LookPath(d.dockerdBinary)
188
-	d.c.Assert(err, check.IsNil, check.Commentf("[%s] could not find docker binary in $PATH", d.id))
188
+	if err != nil {
189
+		return errors.Wrapf(err, "[%s] could not find docker binary in $PATH", d.id)
190
+	}
189 191
 
190 192
 	args := append(d.GlobalFlags,
191 193
 		"--containerd", "/var/run/docker/libcontainerd/docker-containerd.sock",
... ...
@@ -231,14 +233,14 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
231 231
 	d.logFile = out
232 232
 
233 233
 	if err := d.cmd.Start(); err != nil {
234
-		return fmt.Errorf("[%s] could not start daemon container: %v", d.id, err)
234
+		return errors.Errorf("[%s] could not start daemon container: %v", d.id, err)
235 235
 	}
236 236
 
237 237
 	wait := make(chan error)
238 238
 
239 239
 	go func() {
240 240
 		wait <- d.cmd.Wait()
241
-		d.c.Logf("[%s] exiting daemon", d.id)
241
+		fmt.Printf("[%s] exiting daemon\n", d.id)
242 242
 		close(wait)
243 243
 	}()
244 244
 
... ...
@@ -248,14 +250,14 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
248 248
 	// make sure daemon is ready to receive requests
249 249
 	startTime := time.Now().Unix()
250 250
 	for {
251
-		d.c.Logf("[%s] waiting for daemon to start", d.id)
251
+		fmt.Printf("[%s] waiting for daemon to start\n", d.id)
252 252
 		if time.Now().Unix()-startTime > 5 {
253 253
 			// After 5 seconds, give up
254
-			return fmt.Errorf("[%s] Daemon exited and never started", d.id)
254
+			return errors.Errorf("[%s] Daemon exited and never started", d.id)
255 255
 		}
256 256
 		select {
257 257
 		case <-time.After(2 * time.Second):
258
-			return fmt.Errorf("[%s] timeout: daemon does not respond", d.id)
258
+			return errors.Errorf("[%s] timeout: daemon does not respond", d.id)
259 259
 		case <-tick:
260 260
 			clientConfig, err := d.getClientConfig()
261 261
 			if err != nil {
... ...
@@ -267,7 +269,9 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
267 267
 			}
268 268
 
269 269
 			req, err := http.NewRequest("GET", "/_ping", nil)
270
-			d.c.Assert(err, check.IsNil, check.Commentf("[%s] could not create new request", d.id))
270
+			if err != nil {
271
+				return errors.Wrapf(err, "[%s] could not create new request", d.id)
272
+			}
271 273
 			req.URL.Host = clientConfig.addr
272 274
 			req.URL.Scheme = clientConfig.scheme
273 275
 			resp, err := client.Do(req)
... ...
@@ -275,16 +279,16 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error {
275 275
 				continue
276 276
 			}
277 277
 			if resp.StatusCode != http.StatusOK {
278
-				d.c.Logf("[%s] received status != 200 OK: %s", d.id, resp.Status)
278
+				fmt.Printf("[%s] received status != 200 OK: %s\n", d.id, resp.Status)
279 279
 			}
280
-			d.c.Logf("[%s] daemon started", d.id)
280
+			fmt.Printf("[%s] daemon started\n", d.id)
281 281
 			d.Root, err = d.queryRootDir()
282 282
 			if err != nil {
283
-				return fmt.Errorf("[%s] error querying daemon for root directory: %v", d.id, err)
283
+				return errors.Errorf("[%s] error querying daemon for root directory: %v", d.id, err)
284 284
 			}
285 285
 			return nil
286 286
 		case <-d.Wait:
287
-			return fmt.Errorf("[%s] Daemon exited during startup", d.id)
287
+			return errors.Errorf("[%s] Daemon exited during startup", d.id)
288 288
 		}
289 289
 	}
290 290
 }
... ...
@@ -310,7 +314,6 @@ func (d *Daemon) Kill() error {
310 310
 	}()
311 311
 
312 312
 	if err := d.cmd.Process.Kill(); err != nil {
313
-		d.c.Logf("Could not kill daemon: %v", err)
314 313
 		return err
315 314
 	}
316 315
 
... ...
@@ -367,7 +370,7 @@ func (d *Daemon) Stop() error {
367 367
 	tick := time.Tick(time.Second)
368 368
 
369 369
 	if err := d.cmd.Process.Signal(os.Interrupt); err != nil {
370
-		return fmt.Errorf("could not send signal: %v", err)
370
+		return errors.Errorf("could not send signal: %v", err)
371 371
 	}
372 372
 out1:
373 373
 	for {
... ...
@@ -376,7 +379,7 @@ out1:
376 376
 			return err
377 377
 		case <-time.After(20 * time.Second):
378 378
 			// time for stopping jobs and run onShutdown hooks
379
-			d.c.Logf("timeout: %v", d.id)
379
+			fmt.Printf("timeout: %v\n", d.id)
380 380
 			break out1
381 381
 		}
382 382
 	}
... ...
@@ -389,18 +392,18 @@ out2:
389 389
 		case <-tick:
390 390
 			i++
391 391
 			if i > 5 {
392
-				d.c.Logf("tried to interrupt daemon for %d times, now try to kill it", i)
392
+				fmt.Printf("tried to interrupt daemon for %d times, now try to kill it\n", i)
393 393
 				break out2
394 394
 			}
395
-			d.c.Logf("Attempt #%d: daemon is still running with pid %d", i, d.cmd.Process.Pid)
395
+			fmt.Printf("Attempt #%d: daemon is still running with pid %d\n", i, d.cmd.Process.Pid)
396 396
 			if err := d.cmd.Process.Signal(os.Interrupt); err != nil {
397
-				return fmt.Errorf("could not send signal: %v", err)
397
+				return errors.Errorf("could not send signal: %v", err)
398 398
 			}
399 399
 		}
400 400
 	}
401 401
 
402 402
 	if err := d.cmd.Process.Kill(); err != nil {
403
-		d.c.Logf("Could not kill daemon: %v", err)
403
+		fmt.Printf("Could not kill daemon: %v\n", err)
404 404
 		return err
405 405
 	}
406 406
 
... ...
@@ -430,20 +433,20 @@ func (d *Daemon) LoadBusybox() error {
430 430
 	bb := filepath.Join(d.Folder, "busybox.tar")
431 431
 	if _, err := os.Stat(bb); err != nil {
432 432
 		if !os.IsNotExist(err) {
433
-			return fmt.Errorf("unexpected error on busybox.tar stat: %v", err)
433
+			return errors.Errorf("unexpected error on busybox.tar stat: %v", err)
434 434
 		}
435 435
 		// saving busybox image from main daemon
436 436
 		if out, err := exec.Command(d.dockerBinary, "save", "--output", bb, "busybox:latest").CombinedOutput(); err != nil {
437 437
 			imagesOut, _ := exec.Command(d.dockerBinary, "images", "--format", "{{ .Repository }}:{{ .Tag }}").CombinedOutput()
438
-			return fmt.Errorf("could not save busybox image: %s\n%s", string(out), strings.TrimSpace(string(imagesOut)))
438
+			return errors.Errorf("could not save busybox image: %s\n%s", string(out), strings.TrimSpace(string(imagesOut)))
439 439
 		}
440 440
 	}
441 441
 	// loading busybox image to this daemon
442 442
 	if out, err := d.Cmd("load", "--input", bb); err != nil {
443
-		return fmt.Errorf("could not load busybox image: %s", out)
443
+		return errors.Errorf("could not load busybox image: %s", out)
444 444
 	}
445 445
 	if err := os.Remove(bb); err != nil {
446
-		d.c.Logf("could not remove %s: %v", bb, err)
446
+		return err
447 447
 	}
448 448
 	return nil
449 449
 }
... ...
@@ -596,7 +599,7 @@ func (d *Daemon) inspectFilter(name, filter string) (string, error) {
596 596
 	format := fmt.Sprintf("{{%s}}", filter)
597 597
 	out, err := d.Cmd("inspect", "-f", format, name)
598 598
 	if err != nil {
599
-		return "", fmt.Errorf("failed to inspect %s: %s", name, out)
599
+		return "", errors.Errorf("failed to inspect %s: %s", name, out)
600 600
 	}
601 601
 	return strings.TrimSpace(out), nil
602 602
 }
... ...
@@ -606,13 +609,12 @@ func (d *Daemon) inspectFieldWithError(name, field string) (string, error) {
606 606
 }
607 607
 
608 608
 // FindContainerIP returns the ip of the specified container
609
-// FIXME(vdemeester) should probably erroring out
610
-func (d *Daemon) FindContainerIP(id string) string {
611
-	out, err := d.Cmd("inspect", fmt.Sprintf("--format='{{ .NetworkSettings.Networks.bridge.IPAddress }}'"), id)
609
+func (d *Daemon) FindContainerIP(id string) (string, error) {
610
+	out, err := d.Cmd("inspect", "--format='{{ .NetworkSettings.Networks.bridge.IPAddress }}'", id)
612 611
 	if err != nil {
613
-		d.c.Log(err)
612
+		return "", err
614 613
 	}
615
-	return strings.Trim(out, " \r\n'")
614
+	return strings.Trim(out, " \r\n'"), nil
616 615
 }
617 616
 
618 617
 // BuildImageWithOut builds an image with the specified dockerfile and options and returns the output
... ...
@@ -642,7 +644,7 @@ func (d *Daemon) CheckActiveContainerCount(c *check.C) (interface{}, check.Comme
642 642
 // ReloadConfig asks the daemon to reload its configuration
643 643
 func (d *Daemon) ReloadConfig() error {
644 644
 	if d.cmd == nil || d.cmd.Process == nil {
645
-		return fmt.Errorf("daemon is not running")
645
+		return errors.New("daemon is not running")
646 646
 	}
647 647
 
648 648
 	errCh := make(chan error)
... ...
@@ -674,15 +676,15 @@ func (d *Daemon) ReloadConfig() error {
674 674
 
675 675
 	<-started
676 676
 	if err := signalDaemonReload(d.cmd.Process.Pid); err != nil {
677
-		return fmt.Errorf("error signaling daemon reload: %v", err)
677
+		return errors.Errorf("error signaling daemon reload: %v", err)
678 678
 	}
679 679
 	select {
680 680
 	case err := <-errCh:
681 681
 		if err != nil {
682
-			return fmt.Errorf("error waiting for daemon reload event: %v", err)
682
+			return errors.Errorf("error waiting for daemon reload event: %v", err)
683 683
 		}
684 684
 	case <-time.After(30 * time.Second):
685
-		return fmt.Errorf("timeout waiting for daemon reload event")
685
+		return errors.New("timeout waiting for daemon reload event")
686 686
 	}
687 687
 	return nil
688 688
 }
... ...
@@ -697,7 +699,7 @@ func WaitInspectWithArgs(dockerBinary, name, expr, expected string, timeout time
697 697
 		result := icmd.RunCommand(dockerBinary, args...)
698 698
 		if result.Error != nil {
699 699
 			if !strings.Contains(result.Stderr(), "No such") {
700
-				return fmt.Errorf("error executing docker inspect: %v\n%s",
700
+				return errors.Errorf("error executing docker inspect: %v\n%s",
701 701
 					result.Stderr(), result.Stdout())
702 702
 			}
703 703
 			select {
... ...
@@ -716,7 +718,7 @@ func WaitInspectWithArgs(dockerBinary, name, expr, expected string, timeout time
716 716
 
717 717
 		select {
718 718
 		case <-after:
719
-			return fmt.Errorf("condition \"%q == %q\" not true in time", out, expected)
719
+			return errors.Errorf("condition \"%q == %q\" not true in time (%v)", out, expected, timeout)
720 720
 		default:
721 721
 		}
722 722
 
... ...
@@ -750,7 +752,7 @@ func getTLSConfig() (*tls.Config, error) {
750 750
 	dockerCertPath := os.Getenv("DOCKER_CERT_PATH")
751 751
 
752 752
 	if dockerCertPath == "" {
753
-		return nil, fmt.Errorf("DOCKER_TLS_VERIFY specified, but no DOCKER_CERT_PATH environment variable")
753
+		return nil, errors.New("DOCKER_TLS_VERIFY specified, but no DOCKER_CERT_PATH environment variable")
754 754
 	}
755 755
 
756 756
 	option := &tlsconfig.Options{
... ...
@@ -770,7 +772,7 @@ func getTLSConfig() (*tls.Config, error) {
770 770
 func SockConn(timeout time.Duration, daemon string) (net.Conn, error) {
771 771
 	daemonURL, err := url.Parse(daemon)
772 772
 	if err != nil {
773
-		return nil, fmt.Errorf("could not parse url %q: %v", daemon, err)
773
+		return nil, errors.Wrapf(err, "could not parse url %q", daemon)
774 774
 	}
775 775
 
776 776
 	var c net.Conn
... ...
@@ -791,14 +793,14 @@ func SockConn(timeout time.Duration, daemon string) (net.Conn, error) {
791 791
 		}
792 792
 		return net.DialTimeout(daemonURL.Scheme, daemonURL.Host, timeout)
793 793
 	default:
794
-		return c, fmt.Errorf("unknown scheme %v (%s)", daemonURL.Scheme, daemon)
794
+		return c, errors.Errorf("unknown scheme %v (%s)", daemonURL.Scheme, daemon)
795 795
 	}
796 796
 }
797 797
 
798 798
 func newRequestClient(method, endpoint string, data io.Reader, ct, daemon string) (*http.Request, *httputil.ClientConn, error) {
799 799
 	c, err := SockConn(time.Duration(10*time.Second), daemon)
800 800
 	if err != nil {
801
-		return nil, nil, fmt.Errorf("could not dial docker daemon: %v", err)
801
+		return nil, nil, errors.Errorf("could not dial docker daemon: %v", err)
802 802
 	}
803 803
 
804 804
 	client := httputil.NewClientConn(c, nil)
... ...
@@ -806,7 +808,7 @@ func newRequestClient(method, endpoint string, data io.Reader, ct, daemon string
806 806
 	req, err := http.NewRequest(method, endpoint, data)
807 807
 	if err != nil {
808 808
 		client.Close()
809
-		return nil, nil, fmt.Errorf("could not create new request: %v", err)
809
+		return nil, nil, errors.Errorf("could not create new request: %v", err)
810 810
 	}
811 811
 
812 812
 	if ct != "" {
... ...
@@ -642,7 +642,8 @@ func (s *DockerDaemonSuite) TestDaemonBridgeExternal(c *check.C) {
642 642
 	_, err = d.Cmd("run", "-d", "--name", "ExtContainer", "busybox", "top")
643 643
 	c.Assert(err, check.IsNil)
644 644
 
645
-	containerIP := d.FindContainerIP("ExtContainer")
645
+	containerIP, err := d.FindContainerIP("ExtContainer")
646
+	c.Assert(err, checker.IsNil)
646 647
 	ip := net.ParseIP(containerIP)
647 648
 	c.Assert(bridgeIPNet.Contains(ip), check.Equals, true,
648 649
 		check.Commentf("Container IP-Address must be in the same subnet range : %s",
... ...
@@ -737,7 +738,8 @@ func (s *DockerDaemonSuite) TestDaemonBridgeIP(c *check.C) {
737 737
 	out, err = d.Cmd("run", "-d", "--name", "test", "busybox", "top")
738 738
 	c.Assert(err, check.IsNil)
739 739
 
740
-	containerIP := d.FindContainerIP("test")
740
+	containerIP, err := d.FindContainerIP("test")
741
+	c.Assert(err, checker.IsNil)
741 742
 	ip = net.ParseIP(containerIP)
742 743
 	c.Assert(bridgeIPNet.Contains(ip), check.Equals, true,
743 744
 		check.Commentf("Container IP-Address must be in the same subnet range : %s",
... ...
@@ -1047,8 +1049,10 @@ func (s *DockerDaemonSuite) TestDaemonLinksIpTablesRulesWhenLinkAndUnlink(c *che
1047 1047
 	_, err = s.d.Cmd("run", "-d", "--name", "parent", "--link", "child:http", "busybox", "top")
1048 1048
 	c.Assert(err, check.IsNil)
1049 1049
 
1050
-	childIP := s.d.FindContainerIP("child")
1051
-	parentIP := s.d.FindContainerIP("parent")
1050
+	childIP, err := s.d.FindContainerIP("child")
1051
+	c.Assert(err, checker.IsNil)
1052
+	parentIP, err := s.d.FindContainerIP("parent")
1053
+	c.Assert(err, checker.IsNil)
1052 1054
 
1053 1055
 	sourceRule := []string{"-i", bridgeName, "-o", bridgeName, "-p", "tcp", "-s", childIP, "--sport", "80", "-d", parentIP, "-j", "ACCEPT"}
1054 1056
 	destinationRule := []string{"-i", bridgeName, "-o", bridgeName, "-p", "tcp", "-s", parentIP, "--dport", "80", "-d", childIP, "-j", "ACCEPT"}
... ...
@@ -1530,8 +1534,7 @@ func pingContainers(c *check.C, d *daemon.Daemon, expectFailure bool) {
1530 1530
 func (s *DockerDaemonSuite) TestDaemonRestartWithSocketAsVolume(c *check.C) {
1531 1531
 	c.Assert(s.d.StartWithBusybox(), check.IsNil)
1532 1532
 
1533
-	// socket := filepath.Join(s.d.folder, "docker.sock")
1534
-	socket := s.d.Sock()
1533
+	socket := filepath.Join(s.d.Folder, "docker.sock")
1535 1534
 
1536 1535
 	out, err := s.d.Cmd("run", "--restart=always", "-v", socket+":/sock", "busybox")
1537 1536
 	c.Assert(err, check.IsNil, check.Commentf("Output: %s", out))