github.com/mckael/restic@v0.8.3/internal/backend/sftp/split_test.go (about) 1 package sftp 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func TestShellSplitter(t *testing.T) { 9 var tests = []struct { 10 data string 11 cmd string 12 args []string 13 }{ 14 { 15 `foo`, 16 "foo", []string{}, 17 }, 18 { 19 `'foo'`, 20 "foo", []string{}, 21 }, 22 { 23 `foo bar baz`, 24 "foo", []string{"bar", "baz"}, 25 }, 26 { 27 `foo 'bar' baz`, 28 "foo", []string{"bar", "baz"}, 29 }, 30 { 31 `'bar box' baz`, 32 "bar box", []string{"baz"}, 33 }, 34 { 35 `"bar 'box'" baz`, 36 "bar 'box'", []string{"baz"}, 37 }, 38 { 39 `'bar "box"' baz`, 40 `bar "box"`, []string{"baz"}, 41 }, 42 { 43 `\"bar box baz`, 44 `"bar`, []string{"box", "baz"}, 45 }, 46 { 47 `"bar/foo/x" "box baz"`, 48 "bar/foo/x", []string{"box baz"}, 49 }, 50 } 51 52 for _, test := range tests { 53 t.Run("", func(t *testing.T) { 54 cmd, args, err := SplitShellArgs(test.data) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 if cmd != test.cmd { 60 t.Fatalf("wrong cmd returned, want:\n %#v\ngot:\n %#v", 61 test.cmd, cmd) 62 } 63 64 if !reflect.DeepEqual(args, test.args) { 65 t.Fatalf("wrong args returned, want:\n %#v\ngot:\n %#v", 66 test.args, args) 67 } 68 }) 69 } 70 } 71 72 func TestShellSplitterInvalid(t *testing.T) { 73 var tests = []struct { 74 data string 75 err string 76 }{ 77 { 78 "foo'", 79 "single-quoted string not terminated", 80 }, 81 { 82 `foo"`, 83 "double-quoted string not terminated", 84 }, 85 { 86 "foo 'bar", 87 "single-quoted string not terminated", 88 }, 89 { 90 `foo "bar`, 91 "double-quoted string not terminated", 92 }, 93 } 94 95 for _, test := range tests { 96 t.Run("", func(t *testing.T) { 97 cmd, args, err := SplitShellArgs(test.data) 98 if err == nil { 99 t.Fatalf("expected error not found: %v", test.err) 100 } 101 102 if err.Error() != test.err { 103 t.Fatalf("expected error not found, want:\n %q\ngot:\n %q", test.err, err.Error()) 104 } 105 106 if cmd != "" { 107 t.Fatalf("splitter returned cmd from invalid data: %v", cmd) 108 } 109 110 if len(args) > 0 { 111 t.Fatalf("splitter returned fields from invalid data: %v", args) 112 } 113 }) 114 } 115 }