package protocol

import (
	"errors"
	"testing"
)

func TestValidateEnvironment(t *testing.T) {
	for _, test := range []struct {
		name string
		env  map[string]string
		ok   bool
	}{
		{name: "nil", ok: true},
		{name: "empty map", env: map[string]string{}, ok: true},
		{name: "valid", env: map[string]string{"EMPTY": "", "WITH_EQUALS": "a=b"}, ok: true},
		{name: "empty key", env: map[string]string{"": "value"}},
		{name: "equals in key", env: map[string]string{"BAD=KEY": "value"}},
		{name: "NUL in key", env: map[string]string{"BAD\x00KEY": "value"}},
		{name: "NUL in value", env: map[string]string{"KEY": "bad\x00value"}},
	} {
		t.Run(test.name, func(t *testing.T) {
			err := ValidateEnvironment(test.env)
			if test.ok && err != nil {
				t.Fatalf("ValidateEnvironment() error = %v", err)
			}
			if !test.ok && !errors.Is(err, ErrInvalidEnvironment) {
				t.Fatalf("ValidateEnvironment() error = %v, want ErrInvalidEnvironment", err)
			}
		})
	}
}