test_controller.c 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* Copyright (c) 2015, The Tor Project, Inc. */
  2. /* See LICENSE for licensing information */
  3. #define CONTROL_PRIVATE
  4. #include "or.h"
  5. #include "control.h"
  6. #include "rendservice.h"
  7. #include "test.h"
  8. static void
  9. test_add_onion_helper_keyarg(void *arg)
  10. {
  11. crypto_pk_t *pk = NULL;
  12. crypto_pk_t *pk2 = NULL;
  13. const char *key_new_alg = NULL;
  14. char *key_new_blob = NULL;
  15. char *err_msg = NULL;
  16. char *encoded = NULL;
  17. char *arg_str = NULL;
  18. (void) arg;
  19. /* Test explicit RSA1024 key generation. */
  20. pk = add_onion_helper_keyarg("NEW:RSA1024", 0, &key_new_alg, &key_new_blob,
  21. &err_msg);
  22. tt_assert(pk);
  23. tt_str_op(key_new_alg, OP_EQ, "RSA1024");
  24. tt_assert(key_new_blob);
  25. tt_assert(!err_msg);
  26. /* Test "BEST" key generation (Assumes BEST = RSA1024). */
  27. crypto_pk_free(pk);
  28. tor_free(key_new_blob);
  29. pk = add_onion_helper_keyarg("NEW:BEST", 0, &key_new_alg, &key_new_blob,
  30. &err_msg);
  31. tt_assert(pk);
  32. tt_str_op(key_new_alg, OP_EQ, "RSA1024");
  33. tt_assert(key_new_blob);
  34. tt_assert(!err_msg);
  35. /* Test discarding the private key. */
  36. crypto_pk_free(pk);
  37. tor_free(key_new_blob);
  38. pk = add_onion_helper_keyarg("NEW:BEST", 1, &key_new_alg, &key_new_blob,
  39. &err_msg);
  40. tt_assert(pk);
  41. tt_assert(!key_new_alg);
  42. tt_assert(!key_new_blob);
  43. tt_assert(!err_msg);
  44. /* Test generating a invalid key type. */
  45. crypto_pk_free(pk);
  46. pk = add_onion_helper_keyarg("NEW:RSA512", 0, &key_new_alg, &key_new_blob,
  47. &err_msg);
  48. tt_assert(!pk);
  49. tt_assert(!key_new_alg);
  50. tt_assert(!key_new_blob);
  51. tt_assert(err_msg);
  52. /* Test loading a RSA1024 key. */
  53. tor_free(err_msg);
  54. pk = pk_generate(0);
  55. tt_int_op(0, OP_EQ, crypto_pk_base64_encode(pk, &encoded));
  56. tor_asprintf(&arg_str, "RSA1024:%s", encoded);
  57. pk2 = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
  58. &err_msg);
  59. tt_assert(pk2);
  60. tt_assert(!key_new_alg);
  61. tt_assert(!key_new_blob);
  62. tt_assert(!err_msg);
  63. tt_assert(crypto_pk_cmp_keys(pk, pk2) == 0);
  64. /* Test loading a invalid key type. */
  65. tor_free(arg_str);
  66. tor_asprintf(&arg_str, "RSA512:%s", encoded);
  67. pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
  68. &err_msg);
  69. tt_assert(!pk);
  70. tt_assert(!key_new_alg);
  71. tt_assert(!key_new_blob);
  72. tt_assert(err_msg);
  73. /* Test loading a invalid key. */
  74. tor_free(arg_str);
  75. tor_free(err_msg);
  76. encoded[strlen(encoded)/2] = '\0';
  77. tor_asprintf(&arg_str, "RSA1024:%s", encoded);
  78. pk = add_onion_helper_keyarg(arg_str, 0, &key_new_alg, &key_new_blob,
  79. &err_msg);
  80. tt_assert(!pk);
  81. tt_assert(!key_new_alg);
  82. tt_assert(!key_new_blob);
  83. tt_assert(err_msg);
  84. done:
  85. crypto_pk_free(pk);
  86. crypto_pk_free(pk2);
  87. tor_free(key_new_blob);
  88. tor_free(err_msg);
  89. tor_free(encoded);
  90. tor_free(arg_str);
  91. }
  92. static void
  93. test_rend_service_parse_port_config(void *arg)
  94. {
  95. const char *sep = ",";
  96. rend_service_port_config_t *cfg = NULL;
  97. char *err_msg = NULL;
  98. (void)arg;
  99. /* Test "VIRTPORT" only. */
  100. cfg = rend_service_parse_port_config("80", sep, &err_msg);
  101. tt_assert(cfg);
  102. tt_assert(!err_msg);
  103. /* Test "VIRTPORT,TARGET" (Target is port). */
  104. rend_service_port_config_free(cfg);
  105. cfg = rend_service_parse_port_config("80,8080", sep, &err_msg);
  106. tt_assert(cfg);
  107. tt_assert(!err_msg);
  108. /* Test "VIRTPORT,TARGET" (Target is IPv4:port). */
  109. rend_service_port_config_free(cfg);
  110. cfg = rend_service_parse_port_config("80,192.0.2.1:8080", sep, &err_msg);
  111. tt_assert(cfg);
  112. tt_assert(!err_msg);
  113. /* Test "VIRTPORT,TARGET" (Target is IPv6:port). */
  114. rend_service_port_config_free(cfg);
  115. cfg = rend_service_parse_port_config("80,[2001:db8::1]:8080", sep, &err_msg);
  116. tt_assert(cfg);
  117. tt_assert(!err_msg);
  118. /* XXX: Someone should add tests for AF_UNIX targets if supported. */
  119. /* Test empty config. */
  120. rend_service_port_config_free(cfg);
  121. cfg = rend_service_parse_port_config("", sep, &err_msg);
  122. tt_assert(!cfg);
  123. tt_assert(err_msg);
  124. /* Test invalid port. */
  125. tor_free(err_msg);
  126. cfg = rend_service_parse_port_config("90001", sep, &err_msg);
  127. tt_assert(!cfg);
  128. tt_assert(err_msg);
  129. done:
  130. rend_service_port_config_free(cfg);
  131. tor_free(err_msg);
  132. }
  133. struct testcase_t controller_tests[] = {
  134. { "add_onion_helper_keyarg", test_add_onion_helper_keyarg, 0, NULL, NULL },
  135. { "rend_service_parse_port_config", test_rend_service_parse_port_config, 0,
  136. NULL, NULL },
  137. END_OF_TESTCASES
  138. };