forked from Deuxfleurs/bagage
85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
|
package filexfer
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"regexp"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// This string data is copied verbatim from https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13
|
||
|
var fxpStandardsText = `
|
||
|
SSH_FXP_INIT 1
|
||
|
SSH_FXP_VERSION 2
|
||
|
SSH_FXP_OPEN 3
|
||
|
SSH_FXP_CLOSE 4
|
||
|
SSH_FXP_READ 5
|
||
|
SSH_FXP_WRITE 6
|
||
|
SSH_FXP_LSTAT 7
|
||
|
SSH_FXP_FSTAT 8
|
||
|
SSH_FXP_SETSTAT 9
|
||
|
SSH_FXP_FSETSTAT 10
|
||
|
SSH_FXP_OPENDIR 11
|
||
|
SSH_FXP_READDIR 12
|
||
|
SSH_FXP_REMOVE 13
|
||
|
SSH_FXP_MKDIR 14
|
||
|
SSH_FXP_RMDIR 15
|
||
|
SSH_FXP_REALPATH 16
|
||
|
SSH_FXP_STAT 17
|
||
|
SSH_FXP_RENAME 18
|
||
|
SSH_FXP_READLINK 19
|
||
|
SSH_FXP_SYMLINK 20 // Deprecated in filexfer-13 added from filexfer-02
|
||
|
SSH_FXP_LINK 21
|
||
|
SSH_FXP_BLOCK 22
|
||
|
SSH_FXP_UNBLOCK 23
|
||
|
|
||
|
SSH_FXP_STATUS 101
|
||
|
SSH_FXP_HANDLE 102
|
||
|
SSH_FXP_DATA 103
|
||
|
SSH_FXP_NAME 104
|
||
|
SSH_FXP_ATTRS 105
|
||
|
|
||
|
SSH_FXP_EXTENDED 200
|
||
|
SSH_FXP_EXTENDED_REPLY 201
|
||
|
`
|
||
|
|
||
|
func TestFxpNames(t *testing.T) {
|
||
|
whitespace := regexp.MustCompile(`[[:space:]]+`)
|
||
|
|
||
|
scan := bufio.NewScanner(strings.NewReader(fxpStandardsText))
|
||
|
|
||
|
for scan.Scan() {
|
||
|
line := scan.Text()
|
||
|
if i := strings.Index(line, "//"); i >= 0 {
|
||
|
line = line[:i]
|
||
|
}
|
||
|
|
||
|
line = strings.TrimSpace(line)
|
||
|
if line == "" {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
fields := whitespace.Split(line, 2)
|
||
|
if len(fields) < 2 {
|
||
|
t.Fatalf("unexpected standards text line: %q", line)
|
||
|
}
|
||
|
|
||
|
name, value := fields[0], fields[1]
|
||
|
n, err := strconv.Atoi(value)
|
||
|
if err != nil {
|
||
|
t.Fatal("unexpected error:", err)
|
||
|
}
|
||
|
|
||
|
fxp := PacketType(n)
|
||
|
|
||
|
if got := fxp.String(); got != name {
|
||
|
t.Errorf("fxp name mismatch for %d: got %q, but want %q", n, got, name)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if err := scan.Err(); err != nil {
|
||
|
t.Fatal("unexpected error:", err)
|
||
|
}
|
||
|
}
|