// +build ignore,OMIT

package main

import (
	"fmt"
	"io"
	"log"
	"net"
	"strings"
)

func CheckPassword(c net.Conn) error {
	// read a password from the connection
	buf := make([]byte, 256)
	n, err := c.Read(buf)
	if err != nil {
		return fmt.Errorf("read: %v", err)
	}

	// check it's correct
	got := string(buf[:n])
	if got != "password" {
		return fmt.Errorf("wrong password")
	}
	return nil
}

type fakeConn struct {
	net.Conn
	r io.Reader
}

func (c fakeConn) Read(b []byte) (int, error) {
	return c.r.Read(b)
}

// end_fake OMIT

func main() {
	c := fakeConn{
		r: strings.NewReader("foo"),
	}
	err := CheckPassword(c)
	if err == nil {
		log.Println("expected error using wrong password")
	} else {
		log.Println("OK")
	}
}
