test_hs_circ.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* Copyright (c) 2017-2019, The Tor Project, Inc. */
  2. /* See LICENSE for licensing information */
  3. /**
  4. * \file test_hs_circ.c
  5. * \brief Test hidden service circuit functionality.
  6. */
  7. #define CIRCUITLIST_PRIVATE
  8. #include "test/test.h"
  9. #include "test/test_helpers.h"
  10. #include "test/log_test_helpers.h"
  11. #include "core/or/circuitbuild.h"
  12. #include "core/or/circuitlist.h"
  13. #include "core/or/circuituse.h"
  14. #include "core/or/origin_circuit_st.h"
  15. #include "feature/hs/hs_circuit.h"
  16. #include "feature/hs/hs_circuitmap.h"
  17. static void
  18. test_circuit_repurpose(void *arg)
  19. {
  20. origin_circuit_t *intro_circ = NULL;
  21. const origin_circuit_t *search;
  22. ed25519_keypair_t kp;
  23. (void) arg;
  24. hs_init();
  25. intro_circ = origin_circuit_init(CIRCUIT_PURPOSE_S_ESTABLISH_INTRO, 0);
  26. tt_assert(intro_circ);
  27. ed25519_keypair_generate(&kp, 0);
  28. /* Register circuit in global map and make sure it is actually there. */
  29. hs_circuitmap_register_intro_circ_v3_service_side(intro_circ,
  30. &kp.pubkey);
  31. tt_assert(TO_CIRCUIT(intro_circ)->hs_token);
  32. search = hs_circuitmap_get_intro_circ_v3_service_side(&kp.pubkey);
  33. tt_mem_op(search, OP_EQ, intro_circ, sizeof(origin_circuit_t));
  34. /* Setup circuit HS ident. We don't care about the service pubkey. */
  35. intro_circ->hs_ident = hs_ident_circuit_new(&kp.pubkey,
  36. HS_IDENT_CIRCUIT_INTRO);
  37. tt_assert(intro_circ->hs_ident);
  38. /* Trigger a repurpose. State should be cleaned up. */
  39. hs_circ_repurpose(TO_CIRCUIT(intro_circ));
  40. /* Removed from map. */
  41. search = hs_circuitmap_get_intro_circ_v3_service_side(&kp.pubkey);
  42. tt_assert(!search);
  43. /* HS identifier has been removed. */
  44. tt_assert(!intro_circ->hs_ident);
  45. done:
  46. circuit_free_(TO_CIRCUIT(intro_circ));
  47. hs_free_all();
  48. }
  49. struct testcase_t hs_circ_tests[] = {
  50. { "repurpose", test_circuit_repurpose, TT_FORK,
  51. NULL, NULL },
  52. END_OF_TESTCASES
  53. };