Source file
src/net/nss_test.go
1
2
3
4
5
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
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 }
170
View as plain text