main_test.go 1.8 KB

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