diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-01-22 14:05:10 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-01-22 17:11:58 -0800 |
| commit | 3d075fad7496ec126c5087d1c36ab7a4af73ce16 (patch) | |
| tree | c5b5d6fe44eaa2996310683b5080de87160b9b41 /tests | |
| parent | 5b1a3af7be4ae712868ae84b9a7d5a974d272b16 (diff) | |
| download | nng-3d075fad7496ec126c5087d1c36ab7a4af73ce16.tar.gz nng-3d075fad7496ec126c5087d1c36ab7a4af73ce16.tar.bz2 nng-3d075fad7496ec126c5087d1c36ab7a4af73ce16.zip | |
fixes #219 transports should take URL structure instead of string address
This eliminates a bunch of redundant URL parsing, using the common
URL logic we already have in place.
While here I fixed a problem with the TLS and WSS test suites that
was failing on older Ubuntu -- apparently older versions of mbedTLS
were unhappy if selecting OPTIONAL verification without a validate
certificate chain.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/httpclient.c | 5 | ||||
| -rw-r--r-- | tests/httpserver.c | 32 | ||||
| -rw-r--r-- | tests/tls.c | 61 | ||||
| -rw-r--r-- | tests/trantest.h | 5 | ||||
| -rw-r--r-- | tests/wssfile.c | 11 |
5 files changed, 60 insertions, 54 deletions
diff --git a/tests/httpclient.c b/tests/httpclient.c index 76a3566b..b58dc81f 100644 --- a/tests/httpclient.c +++ b/tests/httpclient.c @@ -34,11 +34,13 @@ TestMain("HTTP Client", { nni_aio * iaio; nni_http_client *cli; nni_http * http; + nni_url * url; So(nng_aio_alloc(&aio, NULL, NULL) == 0); iaio = (nni_aio *) aio; - So(nni_http_client_init(&cli, "http://httpbin.org") == 0); + So(nni_url_parse(&url, "http://httpbin.org") == 0); + So(nni_http_client_init(&cli, url) == 0); nni_http_client_connect(cli, iaio); nng_aio_wait(aio); So(nng_aio_result(aio) == 0); @@ -47,6 +49,7 @@ TestMain("HTTP Client", { nni_http_client_fini(cli); nni_http_fini(http); nng_aio_free(aio); + nni_url_free(url); }); Convey("We can initiate a message", { diff --git a/tests/httpserver.c b/tests/httpserver.c index 0d3f3710..f7ab377c 100644 --- a/tests/httpserver.c +++ b/tests/httpserver.c @@ -49,7 +49,7 @@ httpget(const char *addr, void **datap, size_t *sizep, uint16_t *statp, ((rv = nni_aio_init(&aio, NULL, NULL)) != 0) || ((rv = nni_http_req_init(&req)) != 0) || ((rv = nni_http_res_init(&res)) != 0) || - ((rv = nni_http_client_init(&cli, addr)) != 0)) { + ((rv = nni_http_client_init(&cli, url)) != 0)) { goto fail; } nni_http_client_connect(cli, aio); @@ -143,12 +143,15 @@ TestMain("HTTP Client", { Convey("We can start an HTTP server", { nni_aio *aio; char portbuf[16]; - char url[32]; + char urlstr[32]; + nni_url *url; trantest_next_address(portbuf, "%u"); - snprintf(url, sizeof(url), "http://127.0.0.1:%s", portbuf); + snprintf( + urlstr, sizeof(urlstr), "http://127.0.0.1:%s", portbuf); + So(nni_url_parse(&url, urlstr) == 0); So(nni_aio_init(&aio, NULL, NULL) == 0); So(nni_http_server_init(&s, url) == 0); @@ -156,6 +159,7 @@ TestMain("HTTP Client", { Reset({ nni_aio_fini(aio); nni_http_server_fini(s); + nni_url_free(url); }); So(nni_http_handler_init_static(&h, "/home.html", doc1, @@ -247,7 +251,8 @@ TestMain("HTTP Client", { Convey("Directory serving works", { nni_aio *aio; char portbuf[16]; - char url[32]; + char urlstr[32]; + nni_url *url; char * tmpdir; char * workdir; char * file1; @@ -256,10 +261,8 @@ TestMain("HTTP Client", { char * subdir1; char * subdir2; - trantest_next_address(portbuf, "%u"); - - snprintf(url, sizeof(url), "http://127.0.0.1:%s", portbuf); - + trantest_next_address(urlstr, "http://127.0.0.1:%u"); + So(nni_url_parse(&url, urlstr) == 0); So(nni_aio_init(&aio, NULL, NULL) == 0); So(nni_http_server_init(&s, url) == 0); So((tmpdir = nni_plat_temp_dir()) != NULL); @@ -290,6 +293,7 @@ TestMain("HTTP Client", { nni_strfree(file3); nni_strfree(subdir1); nni_strfree(subdir2); + nni_url_free(url); }); So(nni_http_handler_init_directory(&h, "/docs", workdir) == 0); @@ -305,7 +309,7 @@ TestMain("HTTP Client", { char * ctype; snprintf(fullurl, sizeof(fullurl), - "%s/docs/subdir1/index.html", url); + "%s/docs/subdir1/index.html", urlstr); So(httpget(fullurl, &data, &size, &stat, &ctype) == 0); So(stat == NNI_HTTP_STATUS_OK); So(size == strlen(doc1)); @@ -322,8 +326,8 @@ TestMain("HTTP Client", { uint16_t stat; char * ctype; - snprintf( - fullurl, sizeof(fullurl), "%s/docs/subdir2", url); + snprintf(fullurl, sizeof(fullurl), "%s/docs/subdir2", + urlstr); So(httpget(fullurl, &data, &size, &stat, &ctype) == 0); So(stat == NNI_HTTP_STATUS_OK); So(size == strlen(doc3)); @@ -340,8 +344,8 @@ TestMain("HTTP Client", { uint16_t stat; char * ctype; - snprintf( - fullurl, sizeof(fullurl), "%s/docs/file.txt", url); + snprintf(fullurl, sizeof(fullurl), "%s/docs/file.txt", + urlstr); So(httpget(fullurl, &data, &size, &stat, &ctype) == 0); So(stat == NNI_HTTP_STATUS_OK); So(size == strlen(doc2)); @@ -358,7 +362,7 @@ TestMain("HTTP Client", { uint16_t stat; char * ctype; - snprintf(fullurl, sizeof(fullurl), "%s/docs/", url); + snprintf(fullurl, sizeof(fullurl), "%s/docs/", urlstr); So(httpget(fullurl, &data, &size, &stat, &ctype) == 0); So(stat == NNI_HTTP_STATUS_NOT_FOUND); So(size == 0); diff --git a/tests/tls.c b/tests/tls.c index 1196aab3..c977d57f 100644 --- a/tests/tls.c +++ b/tests/tls.c @@ -29,47 +29,27 @@ // // Generated using openssl: // -// % openssl ecparam -name secp521r1 -noout -genkey -out key.key -// % openssl req -new -key key.key -out cert.csr -// % openssl x509 -req -in cert.csr -days 36500 -out cert.crt -signkey key.key +// % openssl rsa -genkey -out key.key +// % openssl req -new -key key.key -out cert.csr -sha256 +// % openssl x509 -req -in cert.csr -days 36500 -out cert.crt +// -signkey key.key -sha256 // // Relevant metadata: // // Certificate: -// Data: +// Data: // Version: 1 (0x0) -// Serial Number: 9808857926806240008 (0x882010509b8f7b08) -// Signature Algorithm: ecdsa-with-SHA1 -// Issuer: C=US, ST=CA, L=San Diego, O=nanomsg, CN=127.0.0.1 +// Serial Number: 17127835813110005400 (0xedb24becc3a2be98) +// Signature Algorithm: sha256WithRSAEncryption +// Issuer: C=US, ST=CA, L=San Diego, O=nanomsg.org, CN=localhost // Validity -// Not Before: Nov 17 20:08:06 2017 GMT -// Not After : Oct 24 20:08:06 2117 GMT -// Subject: C=US, ST=CA, L=San Diego, O=nanomsg, CN=127.0.0.1 +// Not Before: Jan 11 22:34:35 2018 GMT +// Not After : Dec 18 22:34:35 2117 GMT +// Subject: C=US, ST=CA, L=San Diego, O=nanomsg.org, CN=localhost +// Subject Public Key Info: +// Public Key Algorithm: rsaEncryption +// Public-Key: (2048 bit) // -static const char eccert[] = - "-----BEGIN CERTIFICATE-----\n" - "MIICIjCCAYMCCQDaC9ARg31kIjAKBggqhkjOPQQDAjBUMQswCQYDVQQGEwJVUzEL\n" - "MAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNhbiBEaWVnbzEQMA4GA1UECgwHbmFub21z\n" - "ZzESMBAGA1UEAwwJMTI3LjAuMC4xMCAXDTE3MTExNzIwMjczMloYDzIxMTcxMDI0\n" - "MjAyNzMyWjBUMQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExEjAQBgNVBAcMCVNh\n" - "biBEaWVnbzEQMA4GA1UECgwHbmFub21zZzESMBAGA1UEAwwJMTI3LjAuMC4xMIGb\n" - "MBAGByqGSM49AgEGBSuBBAAjA4GGAAQAN7vDK6GEiSguMsOuhfOvGyiVc37Sog0b\n" - "UkpaiS6+SagTmXFSN1Rgh9isxKFYJvcCtAko3v0I8rAVQucdhf5B3hEBMQlbBIuM\n" - "rMKT6ZQJ+eiwyb4O3Scgd7DoL3tc/kOqijwB/5hJ4sZdquDKP5DDFe5fAf4MNtzY\n" - "4C+iApWlKq/LoXkwCgYIKoZIzj0EAwIDgYwAMIGIAkIBOuJAWmNSdd6Ovmr6Ebg3\n" - "UF9ZrsNwARd9BfYbBk5OQhUOjCLB6d8aLi49WOm1WoRvOS5PaVvmvSfNhaw8b5nV\n" - "hnYCQgC+EmJ6C3bEcZrndhfbqvCaOGkc7/SrKhC6fS7mJW4wL90QUV9WjQ2Ll6X5\n" - "PxkSj7s0SvD6T8j7rju5LDgkdZc35A==\n" - "-----END CERTIFICATE-----\n"; - -static const char eckey[] = - "-----BEGIN EC PRIVATE KEY-----\n" - "MIHcAgEBBEIB20OHMntU2UJW2yuQn2f+bLsuhTT5KRGorcocnqxatWLvxuF1cfUA\n" - "TjQxRRS6BIUvFt1fMIklp9qedJF00JHy4qWgBwYFK4EEACOhgYkDgYYABAA3u8Mr\n" - "oYSJKC4yw66F868bKJVzftKiDRtSSlqJLr5JqBOZcVI3VGCH2KzEoVgm9wK0CSje\n" - "/QjysBVC5x2F/kHeEQExCVsEi4yswpPplAn56LDJvg7dJyB3sOgve1z+Q6qKPAH/\n" - "mEnixl2q4Mo/kMMV7l8B/gw23NjgL6IClaUqr8uheQ==\n" - "-----END EC PRIVATE KEY-----\n"; static const char cert[] = "-----BEGIN CERTIFICATE-----\n" @@ -92,6 +72,7 @@ static const char cert[] = "dFMXOO1rleU0lWAJcXWOWHH3er0fivu2ISL8fRjjikYvhRGxtkwC0kPDa2Ntzgd3\n" "Hsg=\n" "-----END CERTIFICATE-----\n"; + static const char key[] = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIEpQIBAAKCAQEAzL6B3RJ3zoZhtz04+mAuas+jeYYJnMH+BGZKK+PkdUOYQziq\n" @@ -377,6 +358,7 @@ TestMain("TLS Transport", { nng_msg * msg; nng_pipe p; int v; + nng_dialer d; So(nng_pair_open(&s1) == 0); So(nng_pair_open(&s2) == 0); @@ -392,11 +374,14 @@ TestMain("TLS Transport", { // reset port back one trantest_prev_address(addr, "tls+tcp://127.0.0.1:%u"); - So(nng_setopt_int(s2, NNG_OPT_TLS_AUTH_MODE, - NNG_TLS_AUTH_MODE_OPTIONAL) == 0); So(nng_setopt_ms(s2, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_dial(s2, addr, NULL, 0) == 0); - nng_msleep(100); + So(nng_dialer_create(&d, s2, addr) == 0); + So(init_dialer_tls_file(NULL, d) == 0); + So(nng_dialer_setopt_int(d, NNG_OPT_TLS_AUTH_MODE, + NNG_TLS_AUTH_MODE_OPTIONAL) == 0); + So(nng_dialer_setopt_string( + d, NNG_OPT_TLS_SERVER_NAME, "example.com") == 0); + So(nng_dialer_start(d, 0) == 0); So(nng_send(s1, "hello", 6, 0) == 0); So(nng_recvmsg(s2, &msg, 0) == 0); diff --git a/tests/trantest.h b/tests/trantest.h index c85b3429..80f59ff9 100644 --- a/tests/trantest.h +++ b/tests/trantest.h @@ -137,7 +137,10 @@ trantest_init(trantest *tt, const char *addr) So(nng_req_open(&tt->reqsock) == 0); So(nng_rep_open(&tt->repsock) == 0); - tt->tran = nni_tran_find(addr); + nni_url *url; + So(nni_url_parse(&url, tt->addr) == 0); + tt->tran = nni_tran_find(url); + nni_url_free(url); So(tt->tran != NULL); #else ConveySkip("Missing REQ or REP protocols"); diff --git a/tests/wssfile.c b/tests/wssfile.c index 28cdf6b6..73bc1cdb 100644 --- a/tests/wssfile.c +++ b/tests/wssfile.c @@ -295,6 +295,7 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", { nng_socket s1; nng_socket s2; nng_listener l; + nng_dialer d; char addr[NNG_MAXADDRLEN]; nng_msg * msg; nng_pipe p; @@ -314,10 +315,20 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", { // reset port back one trantest_prev_address(addr, "wss://127.0.0.1:%u/test"); + So(nng_setopt_ms(s2, NNG_OPT_RECVTIMEO, 200) == 0); + So(nng_dialer_create(&d, s2, addr) == 0); + So(init_dialer_wss_file(NULL, d) == 0); + So(nng_dialer_setopt_int(d, NNG_OPT_TLS_AUTH_MODE, + NNG_TLS_AUTH_MODE_OPTIONAL) == 0); + So(nng_dialer_setopt_string( + d, NNG_OPT_TLS_SERVER_NAME, "example.com") == 0); + So(nng_dialer_start(d, 0) == 0); +#if 0 So(nng_setopt_int(s2, NNG_OPT_TLS_AUTH_MODE, NNG_TLS_AUTH_MODE_OPTIONAL) == 0); So(nng_setopt_ms(s2, NNG_OPT_RECVTIMEO, 200) == 0); So(nng_dial(s2, addr, NULL, 0) == 0); +#endif nng_msleep(100); So(nng_send(s1, "hello", 6, 0) == 0); |
