main_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package main
  2. import (
  3. "bytes"
  4. "errors"
  5. "fmt"
  6. "io"
  7. "os"
  8. "testing"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. //TODO: all flag parsing continueOnError will print to stderr on its own currently
  12. func Test_help(t *testing.T) {
  13. expected := "Usage of " + os.Args[0] + " <global flags> <mode>:\n" +
  14. " Global flags:\n" +
  15. " -version: Prints the version\n" +
  16. " -h, -help: Prints this help message\n\n" +
  17. " Modes:\n" +
  18. " " + caSummary() + "\n" +
  19. " " + keygenSummary() + "\n" +
  20. " " + signSummary() + "\n" +
  21. " " + printSummary() + "\n" +
  22. " " + verifySummary() + "\n" +
  23. "\n" +
  24. " To see usage for a given mode, use " + os.Args[0] + " <mode> -h\n"
  25. ob := &bytes.Buffer{}
  26. // No error test
  27. help("", ob)
  28. assert.Equal(
  29. t,
  30. expected,
  31. ob.String(),
  32. )
  33. // Error test
  34. ob.Reset()
  35. help("test error", ob)
  36. assert.Equal(
  37. t,
  38. "Error: test error\n\n"+expected,
  39. ob.String(),
  40. )
  41. }
  42. func Test_handleError(t *testing.T) {
  43. ob := &bytes.Buffer{}
  44. // normal error
  45. handleError("", errors.New("test error"), ob)
  46. assert.Equal(t, "Error: test error\n", ob.String())
  47. // unknown mode help error
  48. ob.Reset()
  49. handleError("", newHelpErrorf("test %s", "error"), ob)
  50. assert.Equal(t, "Error: test error\n", ob.String())
  51. // test all modes with help error
  52. modes := map[string]func(io.Writer){"ca": caHelp, "print": printHelp, "sign": signHelp, "verify": verifyHelp}
  53. eb := &bytes.Buffer{}
  54. for mode, fn := range modes {
  55. ob.Reset()
  56. eb.Reset()
  57. fn(eb)
  58. handleError(mode, newHelpErrorf("test %s", "error"), ob)
  59. assert.Equal(t, "Error: test error\n"+eb.String(), ob.String())
  60. }
  61. }
  62. func assertHelpError(t *testing.T, err error, msg string) {
  63. switch err.(type) {
  64. case *helpError:
  65. // good
  66. default:
  67. t.Fatal(fmt.Sprintf("err was not a helpError: %q, expected %q", err, msg))
  68. }
  69. assert.EqualError(t, err, msg)
  70. }
  71. func optionalPkcs11String(msg string) string {
  72. if p11Supported() {
  73. return msg
  74. } else {
  75. return ""
  76. }
  77. }