123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- // Copyright 2015 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- //go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd || solaris
- package net
- import (
- "reflect"
- "strings"
- "testing"
- )
- const ubuntuTrustyAvahi = `# /etc/nsswitch.conf
- #
- # Example configuration of GNU Name Service Switch functionality.
- # If you have the libc-doc-reference' and nfo' packages installed, try:
- # nfo libc "Name Service Switch"' for information about this file.
- passwd: compat
- group: compat
- shadow: compat
- hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
- networks: files
- protocols: db files
- services: db files
- ethers: db files
- rpc: db files
- netgroup: nis
- `
- func TestParseNSSConf(t *testing.T) {
- tests := []struct {
- name string
- in string
- want *nssConf
- }{
- {
- name: "no_newline",
- in: "foo: a b",
- want: &nssConf{
- sources: map[string][]nssSource{
- "foo": {{source: "a"}, {source: "b"}},
- },
- },
- },
- {
- name: "newline",
- in: "foo: a b\n",
- want: &nssConf{
- sources: map[string][]nssSource{
- "foo": {{source: "a"}, {source: "b"}},
- },
- },
- },
- {
- name: "whitespace",
- in: " foo:a b \n",
- want: &nssConf{
- sources: map[string][]nssSource{
- "foo": {{source: "a"}, {source: "b"}},
- },
- },
- },
- {
- name: "comment1",
- in: " foo:a b#c\n",
- want: &nssConf{
- sources: map[string][]nssSource{
- "foo": {{source: "a"}, {source: "b"}},
- },
- },
- },
- {
- name: "comment2",
- in: " foo:a b #c \n",
- want: &nssConf{
- sources: map[string][]nssSource{
- "foo": {{source: "a"}, {source: "b"}},
- },
- },
- },
- {
- name: "crit",
- in: " foo:a b [!a=b X=Y ] c#d \n",
- want: &nssConf{
- sources: map[string][]nssSource{
- "foo": {
- {source: "a"},
- {
- source: "b",
- criteria: []nssCriterion{
- {
- negate: true,
- status: "a",
- action: "b",
- },
- {
- status: "x",
- action: "y",
- },
- },
- },
- {source: "c"},
- },
- },
- },
- },
- // Ubuntu Trusty w/ avahi-daemon, libavahi-* etc installed.
- {
- name: "ubuntu_trusty_avahi",
- in: ubuntuTrustyAvahi,
- want: &nssConf{
- sources: map[string][]nssSource{
- "passwd": {{source: "compat"}},
- "group": {{source: "compat"}},
- "shadow": {{source: "compat"}},
- "hosts": {
- {source: "files"},
- {
- source: "mdns4_minimal",
- criteria: []nssCriterion{
- {
- negate: false,
- status: "notfound",
- action: "return",
- },
- },
- },
- {source: "dns"},
- {source: "mdns4"},
- },
- "networks": {{source: "files"}},
- "protocols": {
- {source: "db"},
- {source: "files"},
- },
- "services": {
- {source: "db"},
- {source: "files"},
- },
- "ethers": {
- {source: "db"},
- {source: "files"},
- },
- "rpc": {
- {source: "db"},
- {source: "files"},
- },
- "netgroup": {
- {source: "nis"},
- },
- },
- },
- },
- }
- for _, tt := range tests {
- gotConf := parseNSSConf(strings.NewReader(tt.in))
- if !reflect.DeepEqual(gotConf, tt.want) {
- t.Errorf("%s: mismatch\n got %#v\nwant %#v", tt.name, gotConf, tt.want)
- }
- }
- }
|