111
|
1 // Copyright 2015 The Go Authors. All rights reserved.
|
|
2 // Use of this source code is governed by a BSD-style
|
|
3 // license that can be found in the LICENSE file.
|
|
4
|
145
|
5 // +build darwin dragonfly freebsd hurd linux netbsd openbsd solaris
|
111
|
6
|
|
7 package net
|
|
8
|
|
9 import (
|
|
10 "reflect"
|
|
11 "strings"
|
|
12 "testing"
|
|
13 )
|
|
14
|
|
15 const ubuntuTrustyAvahi = `# /etc/nsswitch.conf
|
|
16 #
|
|
17 # Example configuration of GNU Name Service Switch functionality.
|
|
18 # If you have the libc-doc-reference' and nfo' packages installed, try:
|
|
19 # nfo libc "Name Service Switch"' for information about this file.
|
|
20
|
|
21 passwd: compat
|
|
22 group: compat
|
|
23 shadow: compat
|
|
24
|
|
25 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
|
|
26 networks: files
|
|
27
|
|
28 protocols: db files
|
|
29 services: db files
|
|
30 ethers: db files
|
|
31 rpc: db files
|
|
32
|
|
33 netgroup: nis
|
|
34 `
|
|
35
|
|
36 func TestParseNSSConf(t *testing.T) {
|
|
37 tests := []struct {
|
|
38 name string
|
|
39 in string
|
|
40 want *nssConf
|
|
41 }{
|
|
42 {
|
|
43 name: "no_newline",
|
|
44 in: "foo: a b",
|
|
45 want: &nssConf{
|
|
46 sources: map[string][]nssSource{
|
|
47 "foo": {{source: "a"}, {source: "b"}},
|
|
48 },
|
|
49 },
|
|
50 },
|
|
51 {
|
|
52 name: "newline",
|
|
53 in: "foo: a b\n",
|
|
54 want: &nssConf{
|
|
55 sources: map[string][]nssSource{
|
|
56 "foo": {{source: "a"}, {source: "b"}},
|
|
57 },
|
|
58 },
|
|
59 },
|
|
60 {
|
|
61 name: "whitespace",
|
|
62 in: " foo:a b \n",
|
|
63 want: &nssConf{
|
|
64 sources: map[string][]nssSource{
|
|
65 "foo": {{source: "a"}, {source: "b"}},
|
|
66 },
|
|
67 },
|
|
68 },
|
|
69 {
|
|
70 name: "comment1",
|
|
71 in: " foo:a b#c\n",
|
|
72 want: &nssConf{
|
|
73 sources: map[string][]nssSource{
|
|
74 "foo": {{source: "a"}, {source: "b"}},
|
|
75 },
|
|
76 },
|
|
77 },
|
|
78 {
|
|
79 name: "comment2",
|
|
80 in: " foo:a b #c \n",
|
|
81 want: &nssConf{
|
|
82 sources: map[string][]nssSource{
|
|
83 "foo": {{source: "a"}, {source: "b"}},
|
|
84 },
|
|
85 },
|
|
86 },
|
|
87 {
|
|
88 name: "crit",
|
|
89 in: " foo:a b [!a=b X=Y ] c#d \n",
|
|
90 want: &nssConf{
|
|
91 sources: map[string][]nssSource{
|
|
92 "foo": {
|
|
93 {source: "a"},
|
|
94 {
|
|
95 source: "b",
|
|
96 criteria: []nssCriterion{
|
|
97 {
|
|
98 negate: true,
|
|
99 status: "a",
|
|
100 action: "b",
|
|
101 },
|
|
102 {
|
|
103 status: "x",
|
|
104 action: "y",
|
|
105 },
|
|
106 },
|
|
107 },
|
|
108 {source: "c"},
|
|
109 },
|
|
110 },
|
|
111 },
|
|
112 },
|
|
113
|
|
114 // Ubuntu Trusty w/ avahi-daemon, libavahi-* etc installed.
|
|
115 {
|
|
116 name: "ubuntu_trusty_avahi",
|
|
117 in: ubuntuTrustyAvahi,
|
|
118 want: &nssConf{
|
|
119 sources: map[string][]nssSource{
|
|
120 "passwd": {{source: "compat"}},
|
|
121 "group": {{source: "compat"}},
|
|
122 "shadow": {{source: "compat"}},
|
|
123 "hosts": {
|
|
124 {source: "files"},
|
|
125 {
|
|
126 source: "mdns4_minimal",
|
|
127 criteria: []nssCriterion{
|
|
128 {
|
|
129 negate: false,
|
|
130 status: "notfound",
|
|
131 action: "return",
|
|
132 },
|
|
133 },
|
|
134 },
|
|
135 {source: "dns"},
|
|
136 {source: "mdns4"},
|
|
137 },
|
|
138 "networks": {{source: "files"}},
|
|
139 "protocols": {
|
|
140 {source: "db"},
|
|
141 {source: "files"},
|
|
142 },
|
|
143 "services": {
|
|
144 {source: "db"},
|
|
145 {source: "files"},
|
|
146 },
|
|
147 "ethers": {
|
|
148 {source: "db"},
|
|
149 {source: "files"},
|
|
150 },
|
|
151 "rpc": {
|
|
152 {source: "db"},
|
|
153 {source: "files"},
|
|
154 },
|
|
155 "netgroup": {
|
|
156 {source: "nis"},
|
|
157 },
|
|
158 },
|
|
159 },
|
|
160 },
|
|
161 }
|
|
162
|
|
163 for _, tt := range tests {
|
|
164 gotConf := parseNSSConf(strings.NewReader(tt.in))
|
|
165 if !reflect.DeepEqual(gotConf, tt.want) {
|
|
166 t.Errorf("%s: mismatch\n got %#v\nwant %#v", tt.name, gotConf, tt.want)
|
|
167 }
|
|
168 }
|
|
169 }
|