keygen_test.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package main
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "os"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/slackhq/nebula/cert"
  9. )
  10. //TODO: test file permissions
  11. func Test_keygenSummary(t *testing.T) {
  12. assert.Equal(t, "keygen <flags>: create a public/private key pair. the public key can be passed to `nebula-cert sign`", keygenSummary())
  13. }
  14. func Test_keygenHelp(t *testing.T) {
  15. ob := &bytes.Buffer{}
  16. keygenHelp(ob)
  17. assert.Equal(
  18. t,
  19. "Usage of "+os.Args[0]+" keygen <flags>: create a public/private key pair. the public key can be passed to `nebula-cert sign`\n"+
  20. " -out-key string\n"+
  21. " \tRequired: path to write the private key to\n"+
  22. " -out-pub string\n"+
  23. " \tRequired: path to write the public key to\n",
  24. ob.String(),
  25. )
  26. }
  27. func Test_keygen(t *testing.T) {
  28. ob := &bytes.Buffer{}
  29. eb := &bytes.Buffer{}
  30. // required args
  31. assertHelpError(t, keygen([]string{"-out-pub", "nope"}, ob, eb), "-out-key is required")
  32. assert.Equal(t, "", ob.String())
  33. assert.Equal(t, "", eb.String())
  34. assertHelpError(t, keygen([]string{"-out-key", "nope"}, ob, eb), "-out-pub is required")
  35. assert.Equal(t, "", ob.String())
  36. assert.Equal(t, "", eb.String())
  37. // failed key write
  38. ob.Reset()
  39. eb.Reset()
  40. args := []string{"-out-pub", "/do/not/write/pleasepub", "-out-key", "/do/not/write/pleasekey"}
  41. assert.EqualError(t, keygen(args, ob, eb), "error while writing out-key: open /do/not/write/pleasekey: "+NoSuchDirError)
  42. assert.Equal(t, "", ob.String())
  43. assert.Equal(t, "", eb.String())
  44. // create temp key file
  45. keyF, err := ioutil.TempFile("", "test.key")
  46. assert.Nil(t, err)
  47. defer os.Remove(keyF.Name())
  48. // failed pub write
  49. ob.Reset()
  50. eb.Reset()
  51. args = []string{"-out-pub", "/do/not/write/pleasepub", "-out-key", keyF.Name()}
  52. assert.EqualError(t, keygen(args, ob, eb), "error while writing out-pub: open /do/not/write/pleasepub: "+NoSuchDirError)
  53. assert.Equal(t, "", ob.String())
  54. assert.Equal(t, "", eb.String())
  55. // create temp pub file
  56. pubF, err := ioutil.TempFile("", "test.pub")
  57. assert.Nil(t, err)
  58. defer os.Remove(pubF.Name())
  59. // test proper keygen
  60. ob.Reset()
  61. eb.Reset()
  62. args = []string{"-out-pub", pubF.Name(), "-out-key", keyF.Name()}
  63. assert.Nil(t, keygen(args, ob, eb))
  64. assert.Equal(t, "", ob.String())
  65. assert.Equal(t, "", eb.String())
  66. // read cert and key files
  67. rb, _ := ioutil.ReadFile(keyF.Name())
  68. lKey, b, err := cert.UnmarshalX25519PrivateKey(rb)
  69. assert.Len(t, b, 0)
  70. assert.Nil(t, err)
  71. assert.Len(t, lKey, 32)
  72. rb, _ = ioutil.ReadFile(pubF.Name())
  73. lPub, b, err := cert.UnmarshalX25519PublicKey(rb)
  74. assert.Len(t, b, 0)
  75. assert.Nil(t, err)
  76. assert.Len(t, lPub, 32)
  77. }