// 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.

// +build darwin dragonfly freebsd 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)
		}
	}
}
