Skip to content

Commit c14bed8

Browse files
committed
Extract splitKeyValueSlice and test
1 parent fd74286 commit c14bed8

File tree

4 files changed

+39
-18
lines changed

4 files changed

+39
-18
lines changed

docker-gen.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,16 +98,7 @@ type ConfigFile struct {
9898
type Context []*RuntimeContainer
9999

100100
func (c *Context) Env() map[string]string {
101-
102-
env := make(map[string]string)
103-
for _, entry := range os.Environ() {
104-
parts := strings.SplitN(entry, "=", 2)
105-
if len(parts) != 2 {
106-
parts = append(parts, "")
107-
}
108-
env[parts[0]] = parts[1]
109-
}
110-
return env
101+
return splitKeyValueSlice(os.Environ())
111102
}
112103

113104
func (c *ConfigFile) filterWatches() ConfigFile {

docker_client.go

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,7 @@ func getContainers(client *docker.Client) ([]*RuntimeContainer, error) {
147147
}
148148
}
149149

150-
for _, entry := range container.Config.Env {
151-
parts := strings.SplitN(entry, "=", 2)
152-
if len(parts) != 2 {
153-
parts = append(parts, "")
154-
}
155-
runtimeContainer.Env[parts[0]] = parts[1]
156-
}
157-
150+
runtimeContainer.Env = splitKeyValueSlice(container.Config.Env)
158151
containers = append(containers, runtimeContainer)
159152
}
160153
return containers, nil

utils.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"os"
5+
"strings"
56
)
67

78
func getEndpoint() (string, error) {
@@ -21,3 +22,19 @@ func getEndpoint() (string, error) {
2122

2223
return defaultEndpoint, nil
2324
}
25+
26+
// splitKeyValueSlice takes a string slice where values are of the form
27+
// KEY, KEY=, KEY=VALUE or KEY=NESTED_KEY=VALUE2, and returns a map[string]string where items
28+
// are split at their first `=`.
29+
func splitKeyValueSlice(in []string) map[string]string {
30+
env := make(map[string]string)
31+
for _, entry := range in {
32+
parts := strings.SplitN(entry, "=", 2)
33+
if len(parts) != 2 {
34+
parts = append(parts, "")
35+
}
36+
env[parts[0]] = parts[1]
37+
}
38+
return env
39+
40+
}

utils_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,23 @@ func TestUnixBadFormat(t *testing.T) {
6262
t.Fatal("endpoint should have failed")
6363
}
6464
}
65+
66+
func TestSplitKeyValueSlice(t *testing.T) {
67+
tests := []struct {
68+
input []string
69+
expected string
70+
}{
71+
{[]string{"K"}, ""},
72+
{[]string{"K="}, ""},
73+
{[]string{"K=V3"}, "V3"},
74+
{[]string{"K=V4=V5"}, "V4=V5"},
75+
}
76+
77+
for _, i := range tests {
78+
v := splitKeyValueSlice(i.input)
79+
if v["K"] != i.expected {
80+
t.Fatalf("expected K='%s'. got '%s'", i.expected, v["K"])
81+
}
82+
83+
}
84+
}

0 commit comments

Comments
 (0)