From b3789740edfa261301aad360a0284d1da9101c52 Mon Sep 17 00:00:00 2001
From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>
Date: Sat, 30 May 2020 19:17:47 +0900
Subject: [PATCH] Add test for ngtcp2_conn_set_remote_transport_params

---
 tests/main.c             |   2 +
 tests/ngtcp2_conn_test.c | 100 +++++++++++++++++++++++++++++++++++++++
 tests/ngtcp2_conn_test.h |   1 +
 3 files changed, 103 insertions(+)

diff --git a/tests/main.c b/tests/main.c
index 3cf5bfbc..ed326969 100644
--- a/tests/main.c
+++ b/tests/main.c
@@ -248,6 +248,8 @@ int main() {
                    test_ngtcp2_conn_recv_version_negotiation) ||
       !CU_add_test(pSuite, "conn_send_initial_token",
                    test_ngtcp2_conn_send_initial_token) ||
+      !CU_add_test(pSuite, "conn_set_remote_transport_params",
+                   test_ngtcp2_conn_set_remote_transport_params) ||
       !CU_add_test(pSuite, "pkt_write_connection_close",
                    test_ngtcp2_pkt_write_connection_close) ||
       !CU_add_test(pSuite, "map", test_ngtcp2_map) ||
diff --git a/tests/ngtcp2_conn_test.c b/tests/ngtcp2_conn_test.c
index 8b64f385..39e39c1c 100644
--- a/tests/ngtcp2_conn_test.c
+++ b/tests/ngtcp2_conn_test.c
@@ -5128,6 +5128,106 @@ void test_ngtcp2_conn_send_initial_token(void) {
   ngtcp2_conn_del(conn);
 }
 
+void test_ngtcp2_conn_set_remote_transport_params(void) {
+  ngtcp2_conn *conn;
+  ngtcp2_transport_params params;
+  int rv;
+  ngtcp2_cid dcid;
+
+  dcid_init(&dcid);
+
+  /* client: Successful case */
+  setup_handshake_client(&conn);
+
+  memset(&params, 0, sizeof(params));
+  params.active_connection_id_limit = NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT;
+  params.initial_scid = conn->dcid.current.cid;
+  params.original_dcid = conn->rcid;
+
+  rv = ngtcp2_conn_set_remote_transport_params(conn, &params);
+
+  CU_ASSERT(0 == rv);
+
+  ngtcp2_conn_del(conn);
+
+  /* client: Wrong original_dcid */
+  setup_handshake_client(&conn);
+
+  memset(&params, 0, sizeof(params));
+  params.active_connection_id_limit = NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT;
+  params.initial_scid = conn->dcid.current.cid;
+
+  rv = ngtcp2_conn_set_remote_transport_params(conn, &params);
+
+  CU_ASSERT(NGTCP2_ERR_PROTO == rv);
+
+  ngtcp2_conn_del(conn);
+
+  /* client: Wrong initial_scid */
+  setup_handshake_client(&conn);
+
+  memset(&params, 0, sizeof(params));
+  params.active_connection_id_limit = NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT;
+  params.original_dcid = conn->rcid;
+
+  rv = ngtcp2_conn_set_remote_transport_params(conn, &params);
+
+  CU_ASSERT(NGTCP2_ERR_PROTO == rv);
+
+  ngtcp2_conn_del(conn);
+
+  /* client: Receiving retry_scid when retry is not attempted */
+  setup_handshake_client(&conn);
+
+  memset(&params, 0, sizeof(params));
+  params.active_connection_id_limit = NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT;
+  params.initial_scid = conn->dcid.current.cid;
+  params.original_dcid = conn->rcid;
+  params.retry_scid_present = 1;
+
+  rv = ngtcp2_conn_set_remote_transport_params(conn, &params);
+
+  CU_ASSERT(NGTCP2_ERR_PROTO == rv);
+
+  ngtcp2_conn_del(conn);
+
+  /* client: Receiving retry_scid */
+  setup_handshake_client(&conn);
+
+  conn->flags |= NGTCP2_CONN_FLAG_RECV_RETRY;
+  conn->retry_scid = dcid;
+
+  memset(&params, 0, sizeof(params));
+  params.active_connection_id_limit = NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT;
+  params.initial_scid = conn->dcid.current.cid;
+  params.original_dcid = conn->rcid;
+  params.retry_scid_present = 1;
+  params.retry_scid = dcid;
+
+  rv = ngtcp2_conn_set_remote_transport_params(conn, &params);
+
+  CU_ASSERT(0 == rv);
+
+  ngtcp2_conn_del(conn);
+
+  /* client: Not receiving retry_scid when retry is attempted */
+  setup_handshake_client(&conn);
+
+  conn->flags |= NGTCP2_CONN_FLAG_RECV_RETRY;
+  conn->retry_scid = dcid;
+
+  memset(&params, 0, sizeof(params));
+  params.active_connection_id_limit = NGTCP2_DEFAULT_ACTIVE_CONNECTION_ID_LIMIT;
+  params.initial_scid = conn->dcid.current.cid;
+  params.original_dcid = conn->rcid;
+
+  rv = ngtcp2_conn_set_remote_transport_params(conn, &params);
+
+  CU_ASSERT(NGTCP2_ERR_PROTO == rv);
+
+  ngtcp2_conn_del(conn);
+}
+
 void test_ngtcp2_pkt_write_connection_close(void) {
   ngtcp2_ssize spktlen;
   uint8_t buf[1200];
diff --git a/tests/ngtcp2_conn_test.h b/tests/ngtcp2_conn_test.h
index cc992245..cb0d134a 100644
--- a/tests/ngtcp2_conn_test.h
+++ b/tests/ngtcp2_conn_test.h
@@ -71,6 +71,7 @@ void test_ngtcp2_conn_recv_client_initial_token(void);
 void test_ngtcp2_conn_get_active_dcid(void);
 void test_ngtcp2_conn_recv_version_negotiation(void);
 void test_ngtcp2_conn_send_initial_token(void);
+void test_ngtcp2_conn_set_remote_transport_params(void);
 void test_ngtcp2_pkt_write_connection_close(void);
 
 #endif /* NGTCP2_CONN_TEST_H */
-- 
GitLab