github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/daemon/links/links_test.go (about)

     1  package links // import "github.com/docker/docker/daemon/links"
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/docker/go-connections/nat"
    10  )
    11  
    12  // Just to make life easier
    13  func newPortNoError(proto, port string) nat.Port {
    14  	p, _ := nat.NewPort(proto, port)
    15  	return p
    16  }
    17  
    18  func TestLinkNaming(t *testing.T) {
    19  	ports := make(nat.PortSet)
    20  	ports[newPortNoError("tcp", "6379")] = struct{}{}
    21  
    22  	link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker-1", nil, ports)
    23  
    24  	rawEnv := link.ToEnv()
    25  	env := make(map[string]string, len(rawEnv))
    26  	for _, e := range rawEnv {
    27  		parts := strings.Split(e, "=")
    28  		if len(parts) != 2 {
    29  			t.FailNow()
    30  		}
    31  		env[parts[0]] = parts[1]
    32  	}
    33  
    34  	value, ok := env["DOCKER_1_PORT"]
    35  
    36  	if !ok {
    37  		t.Fatal("DOCKER_1_PORT not found in env")
    38  	}
    39  
    40  	if value != "tcp://172.0.17.2:6379" {
    41  		t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_1_PORT"])
    42  	}
    43  }
    44  
    45  func TestLinkNew(t *testing.T) {
    46  	ports := make(nat.PortSet)
    47  	ports[newPortNoError("tcp", "6379")] = struct{}{}
    48  
    49  	link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", nil, ports)
    50  
    51  	if link.Name != "/db/docker" {
    52  		t.Fail()
    53  	}
    54  	if link.ParentIP != "172.0.17.3" {
    55  		t.Fail()
    56  	}
    57  	if link.ChildIP != "172.0.17.2" {
    58  		t.Fail()
    59  	}
    60  	for _, p := range link.Ports {
    61  		if p != newPortNoError("tcp", "6379") {
    62  			t.Fail()
    63  		}
    64  	}
    65  }
    66  
    67  func TestLinkEnv(t *testing.T) {
    68  	ports := make(nat.PortSet)
    69  	ports[newPortNoError("tcp", "6379")] = struct{}{}
    70  
    71  	link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports)
    72  
    73  	rawEnv := link.ToEnv()
    74  	env := make(map[string]string, len(rawEnv))
    75  	for _, e := range rawEnv {
    76  		parts := strings.Split(e, "=")
    77  		if len(parts) != 2 {
    78  			t.FailNow()
    79  		}
    80  		env[parts[0]] = parts[1]
    81  	}
    82  	if env["DOCKER_PORT"] != "tcp://172.0.17.2:6379" {
    83  		t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_PORT"])
    84  	}
    85  	if env["DOCKER_PORT_6379_TCP"] != "tcp://172.0.17.2:6379" {
    86  		t.Fatalf("Expected tcp://172.0.17.2:6379, got %s", env["DOCKER_PORT_6379_TCP"])
    87  	}
    88  	if env["DOCKER_PORT_6379_TCP_PROTO"] != "tcp" {
    89  		t.Fatalf("Expected tcp, got %s", env["DOCKER_PORT_6379_TCP_PROTO"])
    90  	}
    91  	if env["DOCKER_PORT_6379_TCP_ADDR"] != "172.0.17.2" {
    92  		t.Fatalf("Expected 172.0.17.2, got %s", env["DOCKER_PORT_6379_TCP_ADDR"])
    93  	}
    94  	if env["DOCKER_PORT_6379_TCP_PORT"] != "6379" {
    95  		t.Fatalf("Expected 6379, got %s", env["DOCKER_PORT_6379_TCP_PORT"])
    96  	}
    97  	if env["DOCKER_NAME"] != "/db/docker" {
    98  		t.Fatalf("Expected /db/docker, got %s", env["DOCKER_NAME"])
    99  	}
   100  	if env["DOCKER_ENV_PASSWORD"] != "gordon" {
   101  		t.Fatalf("Expected gordon, got %s", env["DOCKER_ENV_PASSWORD"])
   102  	}
   103  }
   104  
   105  func TestLinkMultipleEnv(t *testing.T) {
   106  	ports := make(nat.PortSet)
   107  	ports[newPortNoError("tcp", "6379")] = struct{}{}
   108  	ports[newPortNoError("tcp", "6380")] = struct{}{}
   109  	ports[newPortNoError("tcp", "6381")] = struct{}{}
   110  
   111  	link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports)
   112  
   113  	rawEnv := link.ToEnv()
   114  	env := make(map[string]string, len(rawEnv))
   115  	for _, e := range rawEnv {
   116  		parts := strings.Split(e, "=")
   117  		if len(parts) != 2 {
   118  			t.FailNow()
   119  		}
   120  		env[parts[0]] = parts[1]
   121  	}
   122  	if env["DOCKER_PORT"] != "tcp://172.0.17.2:6379" {
   123  		t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_PORT"])
   124  	}
   125  	if env["DOCKER_PORT_6379_TCP_START"] != "tcp://172.0.17.2:6379" {
   126  		t.Fatalf("Expected tcp://172.0.17.2:6379, got %s", env["DOCKER_PORT_6379_TCP_START"])
   127  	}
   128  	if env["DOCKER_PORT_6379_TCP_END"] != "tcp://172.0.17.2:6381" {
   129  		t.Fatalf("Expected tcp://172.0.17.2:6381, got %s", env["DOCKER_PORT_6379_TCP_END"])
   130  	}
   131  	if env["DOCKER_PORT_6379_TCP_PROTO"] != "tcp" {
   132  		t.Fatalf("Expected tcp, got %s", env["DOCKER_PORT_6379_TCP_PROTO"])
   133  	}
   134  	if env["DOCKER_PORT_6379_TCP_ADDR"] != "172.0.17.2" {
   135  		t.Fatalf("Expected 172.0.17.2, got %s", env["DOCKER_PORT_6379_TCP_ADDR"])
   136  	}
   137  	if env["DOCKER_PORT_6379_TCP_PORT_START"] != "6379" {
   138  		t.Fatalf("Expected 6379, got %s", env["DOCKER_PORT_6379_TCP_PORT_START"])
   139  	}
   140  	if env["DOCKER_PORT_6379_TCP_PORT_END"] != "6381" {
   141  		t.Fatalf("Expected 6381, got %s", env["DOCKER_PORT_6379_TCP_PORT_END"])
   142  	}
   143  	if env["DOCKER_NAME"] != "/db/docker" {
   144  		t.Fatalf("Expected /db/docker, got %s", env["DOCKER_NAME"])
   145  	}
   146  	if env["DOCKER_ENV_PASSWORD"] != "gordon" {
   147  		t.Fatalf("Expected gordon, got %s", env["DOCKER_ENV_PASSWORD"])
   148  	}
   149  }
   150  
   151  func TestLinkPortRangeEnv(t *testing.T) {
   152  	ports := make(nat.PortSet)
   153  	ports[newPortNoError("tcp", "6379")] = struct{}{}
   154  	ports[newPortNoError("tcp", "6380")] = struct{}{}
   155  	ports[newPortNoError("tcp", "6381")] = struct{}{}
   156  
   157  	link := NewLink("172.0.17.3", "172.0.17.2", "/db/docker", []string{"PASSWORD=gordon"}, ports)
   158  
   159  	rawEnv := link.ToEnv()
   160  	env := make(map[string]string, len(rawEnv))
   161  	for _, e := range rawEnv {
   162  		parts := strings.Split(e, "=")
   163  		if len(parts) != 2 {
   164  			t.FailNow()
   165  		}
   166  		env[parts[0]] = parts[1]
   167  	}
   168  
   169  	if env["DOCKER_PORT"] != "tcp://172.0.17.2:6379" {
   170  		t.Fatalf("Expected 172.0.17.2:6379, got %s", env["DOCKER_PORT"])
   171  	}
   172  	if env["DOCKER_PORT_6379_TCP_START"] != "tcp://172.0.17.2:6379" {
   173  		t.Fatalf("Expected tcp://172.0.17.2:6379, got %s", env["DOCKER_PORT_6379_TCP_START"])
   174  	}
   175  	if env["DOCKER_PORT_6379_TCP_END"] != "tcp://172.0.17.2:6381" {
   176  		t.Fatalf("Expected tcp://172.0.17.2:6381, got %s", env["DOCKER_PORT_6379_TCP_END"])
   177  	}
   178  	if env["DOCKER_PORT_6379_TCP_PROTO"] != "tcp" {
   179  		t.Fatalf("Expected tcp, got %s", env["DOCKER_PORT_6379_TCP_PROTO"])
   180  	}
   181  	if env["DOCKER_PORT_6379_TCP_ADDR"] != "172.0.17.2" {
   182  		t.Fatalf("Expected 172.0.17.2, got %s", env["DOCKER_PORT_6379_TCP_ADDR"])
   183  	}
   184  	if env["DOCKER_PORT_6379_TCP_PORT_START"] != "6379" {
   185  		t.Fatalf("Expected 6379, got %s", env["DOCKER_PORT_6379_TCP_PORT_START"])
   186  	}
   187  	if env["DOCKER_PORT_6379_TCP_PORT_END"] != "6381" {
   188  		t.Fatalf("Expected 6381, got %s", env["DOCKER_PORT_6379_TCP_PORT_END"])
   189  	}
   190  	if env["DOCKER_NAME"] != "/db/docker" {
   191  		t.Fatalf("Expected /db/docker, got %s", env["DOCKER_NAME"])
   192  	}
   193  	if env["DOCKER_ENV_PASSWORD"] != "gordon" {
   194  		t.Fatalf("Expected gordon, got %s", env["DOCKER_ENV_PASSWORD"])
   195  	}
   196  	for _, i := range []int{6379, 6380, 6381} {
   197  		tcpaddr := fmt.Sprintf("DOCKER_PORT_%d_TCP_ADDR", i)
   198  		tcpport := fmt.Sprintf("DOCKER_PORT_%d_TCP_PORT", i)
   199  		tcpproto := fmt.Sprintf("DOCKER_PORT_%d_TCP_PROTO", i)
   200  		tcp := fmt.Sprintf("DOCKER_PORT_%d_TCP", i)
   201  		if env[tcpaddr] != "172.0.17.2" {
   202  			t.Fatalf("Expected env %s  = 172.0.17.2, got %s", tcpaddr, env[tcpaddr])
   203  		}
   204  		if env[tcpport] != strconv.Itoa(i) {
   205  			t.Fatalf("Expected env %s  = %d, got %s", tcpport, i, env[tcpport])
   206  		}
   207  		if env[tcpproto] != "tcp" {
   208  			t.Fatalf("Expected env %s  = tcp, got %s", tcpproto, env[tcpproto])
   209  		}
   210  		if env[tcp] != fmt.Sprintf("tcp://172.0.17.2:%d", i) {
   211  			t.Fatalf("Expected env %s  = tcp://172.0.17.2:%d, got %s", tcp, i, env[tcp])
   212  		}
   213  	}
   214  }