5849898283
Unit tests functional and coverage back to 100% Add more routes to dictionary, add more credentials, add default port 5554, rename cameradar logs ENV variable, improve unit test readability, remove tmp file
135 lines
3.3 KiB
Go
135 lines
3.3 KiB
Go
package pflag
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func setUpBytesHex(bytesHex *[]byte) *FlagSet {
|
|
f := NewFlagSet("test", ContinueOnError)
|
|
f.BytesHexVar(bytesHex, "bytes", []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, "Some bytes in HEX")
|
|
f.BytesHexVarP(bytesHex, "bytes2", "B", []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, "Some bytes in HEX")
|
|
return f
|
|
}
|
|
|
|
func TestBytesHex(t *testing.T) {
|
|
testCases := []struct {
|
|
input string
|
|
success bool
|
|
expected string
|
|
}{
|
|
/// Positive cases
|
|
{"", true, ""}, // Is empty string OK ?
|
|
{"01", true, "01"},
|
|
{"0101", true, "0101"},
|
|
{"1234567890abcdef", true, "1234567890ABCDEF"},
|
|
{"1234567890ABCDEF", true, "1234567890ABCDEF"},
|
|
|
|
// Negative cases
|
|
{"0", false, ""}, // Short string
|
|
{"000", false, ""}, /// Odd-length string
|
|
{"qq", false, ""}, /// non-hex character
|
|
}
|
|
|
|
devnull, _ := os.Open(os.DevNull)
|
|
os.Stderr = devnull
|
|
|
|
for i := range testCases {
|
|
var bytesHex []byte
|
|
f := setUpBytesHex(&bytesHex)
|
|
|
|
tc := &testCases[i]
|
|
|
|
// --bytes
|
|
args := []string{
|
|
fmt.Sprintf("--bytes=%s", tc.input),
|
|
fmt.Sprintf("-B %s", tc.input),
|
|
fmt.Sprintf("--bytes2=%s", tc.input),
|
|
}
|
|
|
|
for _, arg := range args {
|
|
err := f.Parse([]string{arg})
|
|
|
|
if err != nil && tc.success == true {
|
|
t.Errorf("expected success, got %q", err)
|
|
continue
|
|
} else if err == nil && tc.success == false {
|
|
// bytesHex, err := f.GetBytesHex("bytes")
|
|
t.Errorf("expected failure while processing %q", tc.input)
|
|
continue
|
|
} else if tc.success {
|
|
bytesHex, err := f.GetBytesHex("bytes")
|
|
if err != nil {
|
|
t.Errorf("Got error trying to fetch the 'bytes' flag: %v", err)
|
|
}
|
|
if fmt.Sprintf("%X", bytesHex) != tc.expected {
|
|
t.Errorf("expected %q, got '%X'", tc.expected, bytesHex)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func setUpBytesBase64(bytesBase64 *[]byte) *FlagSet {
|
|
f := NewFlagSet("test", ContinueOnError)
|
|
f.BytesBase64Var(bytesBase64, "bytes", []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, "Some bytes in Base64")
|
|
f.BytesBase64VarP(bytesBase64, "bytes2", "B", []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, "Some bytes in Base64")
|
|
return f
|
|
}
|
|
|
|
func TestBytesBase64(t *testing.T) {
|
|
testCases := []struct {
|
|
input string
|
|
success bool
|
|
expected string
|
|
}{
|
|
/// Positive cases
|
|
{"", true, ""}, // Is empty string OK ?
|
|
{"AQ==", true, "AQ=="},
|
|
|
|
// Negative cases
|
|
{"AQ", false, ""}, // Padding removed
|
|
{"ï", false, ""}, // non-base64 characters
|
|
}
|
|
|
|
devnull, _ := os.Open(os.DevNull)
|
|
os.Stderr = devnull
|
|
|
|
for i := range testCases {
|
|
var bytesBase64 []byte
|
|
f := setUpBytesBase64(&bytesBase64)
|
|
|
|
tc := &testCases[i]
|
|
|
|
// --bytes
|
|
args := []string{
|
|
fmt.Sprintf("--bytes=%s", tc.input),
|
|
fmt.Sprintf("-B %s", tc.input),
|
|
fmt.Sprintf("--bytes2=%s", tc.input),
|
|
}
|
|
|
|
for _, arg := range args {
|
|
err := f.Parse([]string{arg})
|
|
|
|
if err != nil && tc.success == true {
|
|
t.Errorf("expected success, got %q", err)
|
|
continue
|
|
} else if err == nil && tc.success == false {
|
|
// bytesBase64, err := f.GetBytesBase64("bytes")
|
|
t.Errorf("expected failure while processing %q", tc.input)
|
|
continue
|
|
} else if tc.success {
|
|
bytesBase64, err := f.GetBytesBase64("bytes")
|
|
if err != nil {
|
|
t.Errorf("Got error trying to fetch the 'bytes' flag: %v", err)
|
|
}
|
|
if base64.StdEncoding.EncodeToString(bytesBase64) != tc.expected {
|
|
t.Errorf("expected %q, got '%X'", tc.expected, bytesBase64)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|