main: add testcases for convertToDoubleDash & parseCliOpts
This commit is contained in:
parent
463f6e8962
commit
0c16616117
10
cli_args.go
10
cli_args.go
|
@ -114,9 +114,15 @@ func prefixOArgs(osArgs []string) ([]string, error) {
|
||||||
func convertToDoubleDash(osArgs []string) (out []string) {
|
func convertToDoubleDash(osArgs []string) (out []string) {
|
||||||
out = append(out, osArgs...)
|
out = append(out, osArgs...)
|
||||||
for i, v := range out {
|
for i, v := range out {
|
||||||
|
// Leave "-h" alone so the help text keeps working
|
||||||
if v == "-h" {
|
if v == "-h" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
// Don't touch anything after "--"
|
||||||
|
if v == "--" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
// Convert "-foo" to "--foo"
|
||||||
if len(v) >= 2 && v[0] == '-' && v[1] != '-' {
|
if len(v) >= 2 && v[0] == '-' && v[1] != '-' {
|
||||||
out[i] = "-" + out[i]
|
out[i] = "-" + out[i]
|
||||||
}
|
}
|
||||||
|
@ -125,11 +131,11 @@ func convertToDoubleDash(osArgs []string) (out []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseCliOpts - parse command line options (i.e. arguments that start with "-")
|
// parseCliOpts - parse command line options (i.e. arguments that start with "-")
|
||||||
func parseCliOpts() (args argContainer) {
|
func parseCliOpts(osArgs []string) (args argContainer) {
|
||||||
var err error
|
var err error
|
||||||
var opensslAuto string
|
var opensslAuto string
|
||||||
|
|
||||||
osArgsPreprocessed, err := prefixOArgs(os.Args)
|
osArgsPreprocessed, err := prefixOArgs(osArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
tlog.Fatal.Println(err)
|
tlog.Fatal.Println(err)
|
||||||
os.Exit(exitcodes.Usage)
|
os.Exit(exitcodes.Usage)
|
||||||
|
|
104
cli_args_test.go
104
cli_args_test.go
|
@ -3,6 +3,8 @@ package main
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/rfjakob/gocryptfs/internal/stupidgcm"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TestPrefixOArgs checks that the "-o x,y,z" parsing works correctly.
|
// TestPrefixOArgs checks that the "-o x,y,z" parsing works correctly.
|
||||||
|
@ -75,3 +77,105 @@ func TestPrefixOArgs(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConvertToDoubleDash(t *testing.T) {
|
||||||
|
testcases := []struct {
|
||||||
|
// i is the input
|
||||||
|
i []string
|
||||||
|
// o is the expected output
|
||||||
|
o []string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
i: nil,
|
||||||
|
o: nil,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
i: []string{"gocryptfs"},
|
||||||
|
o: []string{"gocryptfs"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
i: []string{"gocryptfs", "foo"},
|
||||||
|
o: []string{"gocryptfs", "foo"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
i: []string{"gocryptfs", "-v", "-quiet"},
|
||||||
|
o: []string{"gocryptfs", "--v", "--quiet"},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
i: []string{"gocryptfs", "--", "-foo"},
|
||||||
|
o: []string{"gocryptfs", "--", "-foo"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range testcases {
|
||||||
|
o := convertToDoubleDash(tc.i)
|
||||||
|
if !reflect.DeepEqual(o, tc.o) {
|
||||||
|
t.Errorf("in=%q\nwant=%q\nhave=%q", tc.i, tc.o, o)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseCliOpts(t *testing.T) {
|
||||||
|
defaultArgs := argContainer{
|
||||||
|
longnames: true,
|
||||||
|
raw64: true,
|
||||||
|
hkdf: true,
|
||||||
|
openssl: stupidgcm.PreferOpenSSL(), // depends on CPU and build flags
|
||||||
|
scryptn: 16,
|
||||||
|
}
|
||||||
|
|
||||||
|
type testcaseContainer struct {
|
||||||
|
// i is the input
|
||||||
|
i []string
|
||||||
|
// o is the expected output
|
||||||
|
o argContainer
|
||||||
|
}
|
||||||
|
|
||||||
|
var testcases []testcaseContainer
|
||||||
|
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs"},
|
||||||
|
o: defaultArgs,
|
||||||
|
})
|
||||||
|
|
||||||
|
o := defaultArgs
|
||||||
|
o.quiet = true
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "-q"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "--q"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "-quiet"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "--quiet"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
|
||||||
|
o = defaultArgs
|
||||||
|
o.exclude = []string{"foo", "bar"}
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "-e", "foo", "-e", "bar"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "--exclude", "foo", "--exclude", "bar"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
/* TODO BROKEN
|
||||||
|
testcases = append(testcases, testcaseContainer{
|
||||||
|
i: []string{"gocryptfs", "--exclude", "foo", "-e", "bar"},
|
||||||
|
o: o,
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
for _, tc := range testcases {
|
||||||
|
o := parseCliOpts(tc.i)
|
||||||
|
if !reflect.DeepEqual(o, tc.o) {
|
||||||
|
t.Errorf("in=%v\nwant=%v\nhave=%v", tc.i, tc.o, o)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
2
main.go
2
main.go
|
@ -166,7 +166,7 @@ func main() {
|
||||||
var err error
|
var err error
|
||||||
// Parse all command-line options (i.e. arguments starting with "-")
|
// Parse all command-line options (i.e. arguments starting with "-")
|
||||||
// into "args". Path arguments are parsed below.
|
// into "args". Path arguments are parsed below.
|
||||||
args := parseCliOpts()
|
args := parseCliOpts(os.Args)
|
||||||
// Fork a child into the background if "-fg" is not set AND we are mounting
|
// Fork a child into the background if "-fg" is not set AND we are mounting
|
||||||
// a filesystem. The child will do all the work.
|
// a filesystem. The child will do all the work.
|
||||||
if !args.fg && flagSet.NArg() == 2 {
|
if !args.fg && flagSet.NArg() == 2 {
|
||||||
|
|
Loading…
Reference in New Issue