mirror of https://github.com/pkg/sftp.git
				
				
				
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
| package sftp
 | |
| 
 | |
| import (
 | |
| 	"io"
 | |
| 	"testing"
 | |
| )
 | |
| 
 | |
| func clientServerPair(t *testing.T) (*Client, *Server) {
 | |
| 	cr, sw := io.Pipe()
 | |
| 	sr, cw := io.Pipe()
 | |
| 	server, err := NewServer(struct {
 | |
| 		io.Reader
 | |
| 		io.WriteCloser
 | |
| 	}{sr, sw})
 | |
| 	if err != nil {
 | |
| 		t.Fatal(err)
 | |
| 	}
 | |
| 	go server.Serve()
 | |
| 	client, err := NewClientPipe(cr, cw)
 | |
| 	if err != nil {
 | |
| 		t.Fatalf("%+v\n", err)
 | |
| 	}
 | |
| 	return client, server
 | |
| }
 | |
| 
 | |
| type sshFxpTestBadExtendedPacket struct {
 | |
| 	ID        uint32
 | |
| 	Extension string
 | |
| 	Data      string
 | |
| }
 | |
| 
 | |
| func (p sshFxpTestBadExtendedPacket) id() uint32 { return p.ID }
 | |
| 
 | |
| func (p sshFxpTestBadExtendedPacket) MarshalBinary() ([]byte, error) {
 | |
| 	l := 1 + 4 + 4 + // type(byte) + uint32 + uint32
 | |
| 		len(p.Extension) +
 | |
| 		len(p.Data)
 | |
| 
 | |
| 	b := make([]byte, 0, l)
 | |
| 	b = append(b, ssh_FXP_EXTENDED)
 | |
| 	b = marshalUint32(b, p.ID)
 | |
| 	b = marshalString(b, p.Extension)
 | |
| 	b = marshalString(b, p.Data)
 | |
| 	return b, nil
 | |
| }
 | |
| 
 | |
| // test that errors are sent back when we request an invalid extended packet operation
 | |
| func TestInvalidExtendedPacket(t *testing.T) {
 | |
| 	client, _ := clientServerPair(t)
 | |
| 	defer client.Close()
 | |
| 	badPacket := sshFxpTestBadExtendedPacket{client.nextID(), "thisDoesn'tExist", "foobar"}
 | |
| 	_, _, err := client.clientConn.sendPacket(badPacket)
 | |
| 	if err == nil {
 | |
| 		t.Fatal("expected error from bad packet")
 | |
| 	}
 | |
| 
 | |
| 	// try to stat a file; the client should have shut down.
 | |
| 	filePath := "/etc/passwd"
 | |
| 	_, err = client.Stat(filePath)
 | |
| 	if err == nil {
 | |
| 		t.Fatal("expected error from closed connection")
 | |
| 	}
 | |
| 
 | |
| }
 |