mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	* Rename middleware to plugin first pass; mostly used 'sed', few spots where I manually changed text. This still builds a coredns binary. * fmt error * Rename AddMiddleware to AddPlugin * Readd AddMiddleware to remain backwards compat
		
			
				
	
	
		
			95 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package out
 | |
| 
 | |
| import (
 | |
| 	"net"
 | |
| 	"testing"
 | |
| 
 | |
| 	fs "github.com/farsightsec/golang-framestream"
 | |
| )
 | |
| 
 | |
| func acceptOne(t *testing.T, l net.Listener) {
 | |
| 	server, err := l.Accept()
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("server accept: %s", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	dec, err := fs.NewDecoder(server, &fs.DecoderOptions{
 | |
| 		ContentType:   []byte("protobuf:dnstap.Dnstap"),
 | |
| 		Bidirectional: true,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("server decoder: %s", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if _, err := dec.Decode(); err != nil {
 | |
| 		t.Errorf("server decode: %s", err)
 | |
| 	}
 | |
| 
 | |
| 	if err := server.Close(); err != nil {
 | |
| 		t.Error(err)
 | |
| 	}
 | |
| }
 | |
| func sendOne(socket *Socket) error {
 | |
| 	if _, err := socket.Write([]byte("frame")); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	if err := socket.enc.Flush(); err != nil {
 | |
| 		// Would happen during Write in real life.
 | |
| 		socket.conn.Close()
 | |
| 		socket.err = err
 | |
| 		return err
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| func TestSocket(t *testing.T) {
 | |
| 	socket, err := NewSocket("dnstap.sock")
 | |
| 	if err == nil {
 | |
| 		t.Fatal("new socket: not listening but no error")
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if err := sendOne(socket); err == nil {
 | |
| 		t.Fatal("not listening but no error")
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	l, err := net.Listen("unix", "dnstap.sock")
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	wait := make(chan bool)
 | |
| 	go func() {
 | |
| 		acceptOne(t, l)
 | |
| 		wait <- true
 | |
| 	}()
 | |
| 
 | |
| 	if err := sendOne(socket); err != nil {
 | |
| 		t.Fatalf("send one: %s", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	<-wait
 | |
| 	if err := sendOne(socket); err == nil {
 | |
| 		panic("must fail")
 | |
| 	}
 | |
| 
 | |
| 	go func() {
 | |
| 		acceptOne(t, l)
 | |
| 		wait <- true
 | |
| 	}()
 | |
| 
 | |
| 	if err := sendOne(socket); err != nil {
 | |
| 		t.Fatalf("send one: %s", err)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	<-wait
 | |
| 	if err := l.Close(); err != nil {
 | |
| 		t.Error(err)
 | |
| 	}
 | |
| }
 |