genkey_test.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package genkey
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "io"
  6. "os"
  7. "testing"
  8. "github.com/cloudflare/cfssl/cli"
  9. )
  10. type stdoutRedirect struct {
  11. r *os.File
  12. w *os.File
  13. saved *os.File
  14. }
  15. func newStdoutRedirect() (*stdoutRedirect, error) {
  16. r, w, err := os.Pipe()
  17. if err != nil {
  18. return nil, err
  19. }
  20. pipe := &stdoutRedirect{r, w, os.Stdout}
  21. os.Stdout = pipe.w
  22. return pipe, nil
  23. }
  24. func (pipe *stdoutRedirect) readAll() ([]byte, error) {
  25. pipe.w.Close()
  26. os.Stdout = pipe.saved
  27. return io.ReadAll(pipe.r)
  28. }
  29. func checkResponse(out []byte) error {
  30. var response map[string]interface{}
  31. if err := json.Unmarshal(out, &response); err != nil {
  32. return err
  33. }
  34. if response["key"] == nil {
  35. return errors.New("no key is outputted")
  36. }
  37. if response["csr"] == nil {
  38. return errors.New("no csr is outputted")
  39. }
  40. return nil
  41. }
  42. func TestGenkey(t *testing.T) {
  43. var pipe *stdoutRedirect
  44. var out []byte
  45. var err error
  46. if pipe, err = newStdoutRedirect(); err != nil {
  47. t.Fatal(err)
  48. }
  49. if err := genkeyMain([]string{"testdata/csr.json"}, cli.Config{}); err != nil {
  50. t.Fatal(err)
  51. }
  52. if out, err = pipe.readAll(); err != nil {
  53. t.Fatal(err)
  54. }
  55. if err := checkResponse(out); err != nil {
  56. t.Fatal(err)
  57. }
  58. if pipe, err = newStdoutRedirect(); err != nil {
  59. t.Fatal(err)
  60. }
  61. if err := genkeyMain([]string{"testdata/csr.json"}, cli.Config{IsCA: true}); err != nil {
  62. t.Fatal(err)
  63. }
  64. if out, err = pipe.readAll(); err != nil {
  65. t.Fatal(err)
  66. }
  67. if err := checkResponse(out); err != nil {
  68. t.Fatal(err)
  69. }
  70. }