You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/03/27 23:57:33 UTC

qpid-proton git commit: PROTON-1445: c proactor SSL support

Repository: qpid-proton
Updated Branches:
  refs/heads/master 6e63fd787 -> 2d9c08699


PROTON-1445: c proactor SSL support

Fix regression introduced by PROTON-1445 that caused the AMQP protocol header
to be sent too early, breaking SSL communication. Added proactor.c test
for SSL connections.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/2d9c0869
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/2d9c0869
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/2d9c0869

Branch: refs/heads/master
Commit: 2d9c086997038698267fa66d9fbccb9b6e6306e4
Parents: 6e63fd7
Author: Alan Conway <ac...@redhat.com>
Authored: Mon Mar 27 19:41:11 2017 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Mon Mar 27 19:57:24 2017 -0400

----------------------------------------------------------------------
 proton-c/include/proton/ssl.h                   |   2 +-
 proton-c/src/proactor/libuv.c                   |   7 +-
 proton-c/src/ssl/openssl.c                      |   1 -
 proton-c/src/tests/CMakeLists.txt               |   3 +
 proton-c/src/tests/proactor.c                   |  69 ++++++++++++++++++-
 proton-c/src/tests/ssl_certs/README.txt         |  24 +++++++
 .../src/tests/ssl_certs/tclient-certificate.p12 | Bin 0 -> 1032 bytes
 .../src/tests/ssl_certs/tclient-certificate.pem |  19 +++++
 proton-c/src/tests/ssl_certs/tclient-full.p12   | Bin 0 -> 2476 bytes
 .../src/tests/ssl_certs/tclient-private-key.pem |  30 ++++++++
 .../src/tests/ssl_certs/tserver-certificate.p12 | Bin 0 -> 1032 bytes
 .../src/tests/ssl_certs/tserver-certificate.pem |  19 +++++
 proton-c/src/tests/ssl_certs/tserver-full.p12   | Bin 0 -> 2476 bytes
 .../src/tests/ssl_certs/tserver-private-key.pem |  30 ++++++++
 proton-c/src/tests/test_config.h.in             |  26 +++++++
 15 files changed, 224 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/include/proton/ssl.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/ssl.h b/proton-c/include/proton/ssl.h
index 4e5a0ca..4e5ae77 100644
--- a/proton-c/include/proton/ssl.h
+++ b/proton-c/include/proton/ssl.h
@@ -153,7 +153,7 @@ PN_EXTERN void pn_ssl_domain_free(pn_ssl_domain_t *domain);
  * protected.
  * @return 0 on success
  */
-PN_EXTERN int pn_ssl_domain_set_credentials(pn_ssl_domain_t *domain,
+PN_EXTERN int  pn_ssl_domain_set_credentials(pn_ssl_domain_t *domain,
                                             const char *credential_1,
                                             const char *credential_2,
                                             const char *password);

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/proactor/libuv.c
----------------------------------------------------------------------
diff --git a/proton-c/src/proactor/libuv.c b/proton-c/src/proactor/libuv.c
index 18d9101..aa10f83 100644
--- a/proton-c/src/proactor/libuv.c
+++ b/proton-c/src/proactor/libuv.c
@@ -504,7 +504,6 @@ static void on_connect(uv_connect_t *connect, int err) {
   pconnection_t *pc = (pconnection_t*)connect->data;
   if (!err) {
     pc->connected = 1;
-    pn_connection_open(pc->driver.connection);
     work_notify(&pc->work);
     uv_freeaddrinfo(pc->addr.getaddrinfo.addrinfo); /* Done with address info */
     pc->addr.getaddrinfo.addrinfo = NULL;
@@ -840,6 +839,10 @@ static bool leader_process_pconnection(pconnection_t *pc) {
     /* We can't do anything while a write request is pending */
     return false;
   }
+  /* Must process INIT and BOUND events before we do any IO-related stuff  */
+  if (pn_connection_driver_has_event(&pc->driver)) {
+    return true;
+  }
   if (pn_connection_driver_finished(&pc->driver)) {
     uv_mutex_lock(&pc->lock);
     pc->wake = W_CLOSED;        /* wake() is a no-op from now on */
@@ -851,7 +854,6 @@ static bool leader_process_pconnection(pconnection_t *pc) {
     pn_millis_t next_tick = leader_tick(pc);
     pn_rwbytes_t rbuf = pn_connection_driver_read_buffer(&pc->driver);
     pn_bytes_t wbuf = pn_connection_driver_write_buffer(&pc->driver);
-
     /* If we still have no events, make async UV requests */
     if (!pn_connection_driver_has_event(&pc->driver)) {
       int err = 0;
@@ -1040,6 +1042,7 @@ void pn_proactor_cancel_timeout(pn_proactor_t *p) {
 int pn_proactor_connect(pn_proactor_t *p, pn_connection_t *c, const char *addr) {
   pconnection_t *pc = pconnection(p, c, false);
   if (pc) {
+    pn_connection_open(pc->driver.connection); /* Auto-open */
     parse_addr(&pc->addr, addr);
     work_start(&pc->work);
   } else {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/ssl/openssl.c
----------------------------------------------------------------------
diff --git a/proton-c/src/ssl/openssl.c b/proton-c/src/ssl/openssl.c
index 0d7c40b..351b0aa 100644
--- a/proton-c/src/ssl/openssl.c
+++ b/proton-c/src/ssl/openssl.c
@@ -762,7 +762,6 @@ bool pn_ssl_get_protocol_name(pn_ssl_t *ssl0, char *buffer, size_t size )
   const SSL_CIPHER *c;
 
   pni_ssl_t *ssl = get_ssl_internal(ssl0);
-  *buffer = '\0';
   if (ssl->ssl && (c = SSL_get_current_cipher( ssl->ssl ))) {
     const char *v = SSL_CIPHER_get_version(c);
     if (v) {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/CMakeLists.txt b/proton-c/src/tests/CMakeLists.txt
index 3ad114a..52983bc 100644
--- a/proton-c/src/tests/CMakeLists.txt
+++ b/proton-c/src/tests/CMakeLists.txt
@@ -19,6 +19,9 @@
 
 add_definitions(${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS})
 
+configure_file(test_config.h.in test_config.h)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
 if (ENABLE_VALGRIND AND VALGRIND_EXE)
   set(memcheck-cmd ${VALGRIND_EXE} --error-exitcode=42 --quiet
                    --leak-check=full --trace-children=yes)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/proactor.c
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/proactor.c b/proton-c/src/tests/proactor.c
index b8c4088..80eeb9a 100644
--- a/proton-c/src/tests/proactor.c
+++ b/proton-c/src/tests/proactor.c
@@ -18,11 +18,13 @@
  */
 
 #include "test_tools.h"
+#include "test_config.h"
 #include <proton/condition.h>
 #include <proton/connection.h>
 #include <proton/event.h>
 #include <proton/listener.h>
 #include <proton/proactor.h>
+#include <proton/ssl.h>
 #include <proton/transport.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -65,7 +67,7 @@ static void proactor_test_free(proactor_test_t *pts, size_t n) {
 #define PROACTOR_TEST_FREE(A) proactor_test_free(A, sizeof(A)/sizeof(*A))
 
 static void save_condition(pn_event_t *e) {
-  /* FIXME aconway 2017-03-23: extend pn_event_condition to include listener */
+  /* TODO aconway 2017-03-23: extend pn_event_condition to include listener */
   last_condition[0] = '\0';
   pn_condition_t *cond = NULL;
   if (pn_event_listener(e)) {
@@ -283,7 +285,7 @@ static void test_connection_wake(test_t *t) {
   pn_connection_wake(c);
   TEST_ETYPE_EQUAL(t, PN_CONNECTION_WAKE, PROACTOR_TEST_RUN(pts));
   TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts));
-    /* The pn_connection_t is still valid so wake is legal but a no-op */
+  /* The pn_connection_t is still valid so wake is legal but a no-op */
   pn_connection_wake(c);
 
   PROACTOR_TEST_FREE(pts);
@@ -465,6 +467,68 @@ static void test_free_cleanup(test_t *t) {
   pn_connection_free(pn_connection());
 }
 
+/* TODO aconway 2017-03-27: need windows version with .p12 certs */
+#define CERTFILE(NAME) CMAKE_CURRENT_SOURCE_DIR "/ssl_certs/" NAME ".pem"
+
+static pn_event_type_t ssl_handler(test_t *t, pn_event_t *e) {
+  pn_connection_t *c = pn_event_connection(e);
+  switch (pn_event_type(e)) {
+
+   case PN_CONNECTION_BOUND: {
+     bool incoming = (pn_connection_state(c) & PN_LOCAL_UNINIT);
+     pn_ssl_domain_t *ssld = pn_ssl_domain(incoming ? PN_SSL_MODE_SERVER : PN_SSL_MODE_CLIENT);
+     TEST_CHECK(t, 0 == pn_ssl_domain_set_credentials(
+                  ssld, CERTFILE("tserver-certificate"), CERTFILE("tserver-private-key"), "tserverpw"));
+     TEST_CHECK(t, 0 == pn_ssl_init(pn_ssl(pn_event_transport(e)), ssld, NULL));
+     pn_ssl_domain_free(ssld);
+     return PN_EVENT_NONE;
+   }
+
+   case PN_CONNECTION_REMOTE_OPEN: {
+     if (pn_connection_state(c) | PN_LOCAL_ACTIVE) {
+       /* Outgoing connection is complete, close it */
+       pn_connection_close(c);
+     } else {
+       /* Incoming connection, check for SSL */
+       pn_ssl_t *ssl = pn_ssl(pn_event_transport(e));
+       TEST_CHECK(t, ssl);
+       TEST_CHECK(t, pn_ssl_get_protocol_name(ssl, NULL, 0));
+       pn_connection_open(c);      /* Return the open (no-op if already open) */
+     }
+    return PN_CONNECTION_REMOTE_OPEN;
+   }
+
+   default:
+    return common_handler(t, e);
+  }
+}
+
+/* Establish an SSL connection between proactors*/
+static void test_ssl(test_t *t) {
+  if (!pn_ssl_present()) {
+    TEST_LOGF(t, "Skip SSL test, no support");
+    return;
+  }
+
+  proactor_test_t pts[] ={ { ssl_handler }, { ssl_handler } };
+  PROACTOR_TEST_INIT(pts, t);
+  pn_proactor_t *client = pts[0].proactor, *server = pts[1].proactor;
+  test_port_t port = test_port(localhost);
+  pn_proactor_listen(server, pn_listener(), port.host_port, 4);
+  TEST_ETYPE_EQUAL(t, PN_LISTENER_OPEN, PROACTOR_TEST_RUN(pts));
+  sock_close(port.sock);
+  pn_connection_t *c = pn_connection();
+  pn_proactor_connect(client, c, port.host_port);
+  /* Open ok at both ends */
+  TEST_ETYPE_EQUAL(t, PN_CONNECTION_REMOTE_OPEN, PROACTOR_TEST_RUN(pts));
+  TEST_STR_EQUAL(t,"", last_condition);
+  TEST_ETYPE_EQUAL(t, PN_CONNECTION_REMOTE_OPEN, PROACTOR_TEST_RUN(pts));
+  TEST_STR_EQUAL(t, "", last_condition);
+  TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts));
+  TEST_ETYPE_EQUAL(t, PN_TRANSPORT_CLOSED, PROACTOR_TEST_RUN(pts));
+
+  PROACTOR_TEST_FREE(pts);
+}
 
 int main(int argc, char **argv) {
   int failed = 0;
@@ -475,5 +539,6 @@ int main(int argc, char **argv) {
   RUN_ARGV_TEST(failed, t, test_connection_wake(&t));
   RUN_ARGV_TEST(failed, t, test_ipv4_ipv6(&t));
   RUN_ARGV_TEST(failed, t, test_free_cleanup(&t));
+  RUN_ARGV_TEST(failed, t, test_ssl(&t));
   return failed;
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/README.txt
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/README.txt b/proton-c/src/tests/ssl_certs/README.txt
new file mode 100644
index 0000000..9a8a4f9
--- /dev/null
+++ b/proton-c/src/tests/ssl_certs/README.txt
@@ -0,0 +1,24 @@
+This directory contains basic self signed test certificates for use by
+proton examples.
+
+The ".pem" files are in the format expected by proton implementations
+using OpenSSL.  The ".p12" file are for Windows implementations using
+SChannel.
+
+The commands used to generate the certificates follow.
+
+
+make_pn_cert()
+{
+  name=$1
+  subject=$2
+  passwd=$3
+  # create the pem files
+  openssl req -newkey rsa:2048 -keyout $name-private-key.pem -out $name-certificate.pem -subj $subject -passout pass:$passwd -x509 -days 3650
+  # create the p12 files
+  openssl pkcs12 -export -out $name-full.p12 -passin pass:$passwd -passout pass:$passwd -inkey $name-private-key.pem -in $name-certificate.pem -name $name
+  openssl pkcs12 -export -out $name-certificate.p12 -in $name-certificate.pem -name $name -nokeys -passout pass:
+}
+
+make_pn_cert tserver /CN=test_server/OU=proton_test tserverpw
+make_pn_cert tclient /CN=test_client/OU=proton_test tclientpw

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tclient-certificate.p12
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tclient-certificate.p12 b/proton-c/src/tests/ssl_certs/tclient-certificate.p12
new file mode 100644
index 0000000..4d0e000
Binary files /dev/null and b/proton-c/src/tests/ssl_certs/tclient-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tclient-certificate.pem
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tclient-certificate.pem b/proton-c/src/tests/ssl_certs/tclient-certificate.pem
new file mode 100644
index 0000000..8088e2e
--- /dev/null
+++ b/proton-c/src/tests/ssl_certs/tclient-certificate.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDKzCCAhOgAwIBAgIJAIV7frIjftgcMA0GCSqGSIb3DQEBCwUAMCwxFDASBgNV
+BAMMC3Rlc3RfY2xpZW50MRQwEgYDVQQLDAtwcm90b25fdGVzdDAeFw0xNTExMjcx
+ODEwMzlaFw0yNTExMjQxODEwMzlaMCwxFDASBgNVBAMMC3Rlc3RfY2xpZW50MRQw
+EgYDVQQLDAtwcm90b25fdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAPCIS4qUdOtQplUxZ6WW0LXcvosqFP6qOiCARLSEWpR3B8bq213rzefwwfcM
+4TtMr88bP+huLKmlyMfwpl8yB88eXkscPgaAce2zk24urWkFXKSQ6GPitWBLGqBa
+V+W0wJ4mfW7MwefVslWfGXI381QEUlBHjkFG30AtzMMTRj2GK2JqUlRXZPljGyB7
+WcXwxcoS+HkKV7FtHWSkLAzyXwQ9vsCUEYdWTUaGXfCUNRSRV7h1LIANbu03NxV0
+XdEl7WXcr7tuTw3axeUGhRFVhLegrxKLuZTTno4aAJnEr8uaDzjxvXnv3Ne2igvy
+gRfZgOMx+XrZEob9OpAoRghQt4cCAwEAAaNQME4wHQYDVR0OBBYEFE4vbyiM0RjG
+TLMLLGGhMZE/5x1GMB8GA1UdIwQYMBaAFE4vbyiM0RjGTLMLLGGhMZE/5x1GMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAErr/rvLS9Ig0UCMwh1J1lA9
+/gvXf93iIK/SjrFIAqYRmfZxg4husfoes8t2hFUeuqoH05TuSOoXG8p8DpgTSGmF
+jAFe+T90vJZTm0oqZkkkI/hdzjGQoHURRp9/O2Z/lm39KSKGVAN5pUWCUDi/G5iS
+P9LZPJN6a5syXMrR6x62IPxAXowlpXkRghKClF3zPOaOBTzT1V27EkI8IEgC+p45
+246EooLnw8ibB+ucNc3KHNzpgKGVd/622+I+Q5eg9AT9PLFttP+R2ECsrVDDPYuA
+p0qaSnwgeozj/d6K3FOgKKEKbzBmpWgkv0jdcVk18aPMHypI/RDtZ/+3ET2Ksi8=
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tclient-full.p12
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tclient-full.p12 b/proton-c/src/tests/ssl_certs/tclient-full.p12
new file mode 100644
index 0000000..ad2d7d3
Binary files /dev/null and b/proton-c/src/tests/ssl_certs/tclient-full.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tclient-private-key.pem
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tclient-private-key.pem b/proton-c/src/tests/ssl_certs/tclient-private-key.pem
new file mode 100644
index 0000000..e5c114d
--- /dev/null
+++ b/proton-c/src/tests/ssl_certs/tclient-private-key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQICy6ghWp45z4CAggA
+MBQGCCqGSIb3DQMHBAiVdDoo4NIghQSCBMixGm1bm/omMxsaKnIPO7zm5dyLexJ+
+yTFpmh2KV7kQqmpzCyIOdoG6K8YqFnie2XdFWm3S8faRHoMq54bDmyEWIxfQPq5f
+I1iYFbIZkbnhUvK53RActsEUMf0locS4xylU7VQK3XTAwp0TVip3Lp3ehEMEdcXL
+iUWibGsoTPKcY9MIWGXZAJXsEXoeHt6k2hHo1G4E0/Bi6mLW1LY/cxZCjHTGD6qI
+Kt54SCCDvinqVa+rixw6yX9F14EA6bhALami8e+Ccd3lqHOyYlXcBaSS1ezCg6ig
+oNK97mC+gEGy1KlkZDKWXclFoOCBXRBe4DByre6Rlq3yeI9L42bvAuSBSmf5QT5g
+73Yl8vjEAKR65awBT09dPuKu7t+Fb6vkwF8/t+uyj9IuL+42UuXhMLK3ohf+6DbU
+8/zB4y3GXI80QmWM0+Wx4n6khFhPFLHt2q0Sn6V9PG1vtHyiq50oSCoyrPQLaecp
+hefnMCFBYTcT3JUwmoVGGy0boIAwL7T4aGsMt7QhwOx5tU35tKFxyY7m4fX14AKo
+2EIy+TPQwCGkGf3Puy/Pc9VA8IAxB5+WwSrjk+NeCv88eIX7gy43k4rCr+OmD9FF
+wknr3xoP3KYhNXjdZ4Ep/1UHSK+JAtzzbNLQjDcqN+gQPg/yUX6ih0j5K3Wvh9bK
+E/DvzbpJroUZPgzR+8z5O68CfsD+OIdpHBFTKqAFmzvUuqpADpr998LdCjD+lW+V
+xZZgZa8KEblwgiH3fdGbYl46Ho1zrZisf439DbqyybAuBIQB4NSZcL/MAgVGO17k
+QDpVElWZWYrFm4CFTcvS2HvIzRmbefF5m5oJedsN7Q6WQCp+3gnwYx1xIOknd7pW
+N4AHNnqjscSj9yACj/EiBVKAKNnC5H7ZGZTsaAjMETZyjLXfI2AZ3Fviz4zFR+oz
+NkAfFB6WUpRpl7H02FzrzYT7XkkLcXd6H6g+mv2iDa9uKWk/PS2QlqnJt8/dHEHD
+JKTG331yDK5GHlKAVGF3nP5BwFGgTQMuSoeiOervMXPUwDpQ8OaYkuaRej0cZLgT
+kAF9sUjqdsoYNcXDFHALp6y5g8qYkfrxrlIbKs82zIsmB5I+dtZbUaD3a0zAUrmW
+5Xm3Pc9dVP0EXKwfHz6zqPReEw2yYLisB5IoHd4M2wa3GzHBdra1ij4QTmvd3o7e
+buGFoX8KJQAcig0zpbYkoDP2gPhIh9rY4unVPQNX1Q8/wRsiJAZZsYvZY+A+SmuZ
+bwSwk+8ZJRsFzdYYYhQeRytD5cDAIQiClcI5Yj4T9dWQV/gf0N/wIBDNTMp0jJAy
+1l7PuXTfGZodNJWZH0oqsrNoWbn/k67NildvvofIKX+h09Nxszr670Pvj0qoHd5/
+CWq30lnxoJBUgbikFOz6ZuuHi/ZiCXL+haH+v8hJKN5ptRKnyYJQHchRB/IOGRoT
+5lmWxo8a7K+yXhp0VBDHJfw3685ms0xQX8Xj4X3MEuN64zd0fB1JmhtP12ydK85J
+ABawNKlRQPw5weckwtCviXQX+vX25S/xu3xA6IuqlHyqL/1t3DICzuxeOyT2mZxD
+tKQxEgNihPvu32vn9m74qA3adEaxuWPRkPZuTeITHOkMTZolvqYX/5olBsSgYwka
+7/g=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tserver-certificate.p12
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tserver-certificate.p12 b/proton-c/src/tests/ssl_certs/tserver-certificate.p12
new file mode 100644
index 0000000..f38b67d
Binary files /dev/null and b/proton-c/src/tests/ssl_certs/tserver-certificate.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tserver-certificate.pem
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tserver-certificate.pem b/proton-c/src/tests/ssl_certs/tserver-certificate.pem
new file mode 100644
index 0000000..86231f3
--- /dev/null
+++ b/proton-c/src/tests/ssl_certs/tserver-certificate.pem
@@ -0,0 +1,19 @@
+-----BEGIN CERTIFICATE-----
+MIIDKzCCAhOgAwIBAgIJAPnYOOQCJ3kDMA0GCSqGSIb3DQEBCwUAMCwxFDASBgNV
+BAMMC3Rlc3Rfc2VydmVyMRQwEgYDVQQLDAtwcm90b25fdGVzdDAeFw0xNTExMjcx
+ODEwMzlaFw0yNTExMjQxODEwMzlaMCwxFDASBgNVBAMMC3Rlc3Rfc2VydmVyMRQw
+EgYDVQQLDAtwcm90b25fdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
+ggEBAKJNB78lgw4KtXDAvXocTLud6mbn6zgfB6ETIF+kcrukOH9DnPxjLBBM4Lig
+sp1+kmeudFK5/X8riDrvIW52b/rlEBLgLB+oDtI74m6OTbBs9L+FUFYOuxApetQF
+qoJy2vf9pWfy4uku24vCpeo7eVLi6ypu4lXE3LR+Km3FruHI1NKonHBMhwXSOWqF
+pYM6/4IZJ4fbV0+eU0Jrx+05s6XHg5vone2BVJKxeSIBje+zWnNnh8+qG0Z70Jgp
+aMetME5KGnLNgD1okpH0vb3lwjvuqkkx4WswGVZGbLLkSqqBpXPyM9fCFVy5aKSL
+DBq7IABQtO67O2nBzK3OyigHrUUCAwEAAaNQME4wHQYDVR0OBBYEFGV1PY0FCFbJ
+gpcDVKI6JGiRTt3kMB8GA1UdIwQYMBaAFGV1PY0FCFbJgpcDVKI6JGiRTt3kMAwG
+A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIx1TOTGWnnbpan4bse7wuvH
+GYSNDJhoTVS+X1TC63xukJD1JBAsCNTqg/ZV6lN3XEl7vvOXfGoCiyXM6a9XOKUo
+gSDtMrIr+wTh6Ss1yRO8QcCJmxH5JDXNu1ojtwsjFW/vneI4IL9kwpDsSlMQEX/E
+EkkQwtAx/Cvfe7pecZL4qSeykJOUMTts9H8fCAZqEiRZBA3ugJxqF8jwLP3DoFVQ
+6QZzKDY6CSPqfMnVb5i0MAIYVDpau+e3N9dgQpZD22F/zbua0OVbfAPdiRMnYxML
+FT4sxLnh+5YVqwpVWbEKp4onHe2Fq6YIvAxUYAJ3SBA2C8O2RAVKWxf1jko3jYI=
+-----END CERTIFICATE-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tserver-full.p12
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tserver-full.p12 b/proton-c/src/tests/ssl_certs/tserver-full.p12
new file mode 100644
index 0000000..d4a0e40
Binary files /dev/null and b/proton-c/src/tests/ssl_certs/tserver-full.p12 differ

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/ssl_certs/tserver-private-key.pem
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/ssl_certs/tserver-private-key.pem b/proton-c/src/tests/ssl_certs/tserver-private-key.pem
new file mode 100644
index 0000000..91dcf0e
--- /dev/null
+++ b/proton-c/src/tests/ssl_certs/tserver-private-key.pem
@@ -0,0 +1,30 @@
+-----BEGIN ENCRYPTED PRIVATE KEY-----
+MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI1cT0c2J3GcQCAggA
+MBQGCCqGSIb3DQMHBAi1hxSX2LJ+EgSCBMheHJ0iXr5A36Natjk/LcAEeKUMT9s+
+sMzoQceCWe8qMlQluWksr9iDdZ4JRIE8cpK8dbmx4dLY/SShUzdlhJHCSa4zZBHq
+8cZ/jGUF/RF1rqdgjK589eUq+uOl3/gXKzG/SxBqayy6PSn12kX3qnvmlkXCmtwU
+lg+iBm5wRcJ0MyVHaJkyA8sW8gr186C/VAau6Yu0crQXN7NRo9snrd4ewuYMIEhZ
+hgaG9XsYQWB1bPhAaKj80CZGxsQbJyTwcbKKkB3IY4WXx8mmhuiNl+vKT3HBJ9Ju
+YB6tgIjs8CJ4X2P4aU3yNJwG1QldgHSqmFGQ19bcZAw3s3kzwjdzRf4H2V16XOBd
+zQ5AEs/ffVMzMIAfkb1gYwgunZ2CVwwDJ2mi1RcgkX+Og2aFQc+fxXcVOnDcGLxV
+6fuCuZ2lsXfoiIyRh9kj3L75N12GtVUvgBdnMuOc1wPw6XnGQtDwt0acJpdexLMG
+k0j57r/gcgzTcmF3qNM+y9L/HLssgrJkvVJw2Np5gmtIyfDocsDUWUbClS4dTpYf
+oTngUTU+vWtHBuaUnb+f5/WJaRS/S7mmR8usbVG3i9WnEr/vlPJpbJFSjW2S6u/H
+7cFxKUmmBZsSuEv/EKt9a+Sh62kprOChm4myqfCI1/gvNKfUZC6m0Vp8zf+2LgAq
+2RgbMuqysMjWUtV4kDRZT7oCYckUDwsCHdbLES3nmVrtBk2ShMKHBpDp8/GoRuiV
+jdV7/EjKM/M1kXtFYYe3z7Mxv++lKYIJ7bNwVrQ8nrhce/VwHw6D5emWXNCJXhKZ
+FW7EM2ZOZ9eaKOlCsIi8sbjV6Yie9IY6HJKKmi3CpO0Tv5kLBdHkru8vGCSFm3O1
+n7wz7Ys5FBSlZ19X0NwQSCQX1Q4w+tido6i1SCRX0qJEdTNGuGwVXMHCf4/1zyHV
+hj8vnxh8fzo79LFrwlTTgwLg1Mr8sEUFFDJ/raJ1AhFXi8n24trtNR8EHxRW8wtD
+CLCKaqkEqfBiFXK/Yq3RrefCayPHiD+DaNsI8BwefMGpED3vD8YYCjAzXNPh/CSF
+sc1i1jWMzbJhzOoFSPNXhlfusbUFMFQ/6olatmH47SY6HBBOL3DDP5uQ0jw8P454
+QBjlMOpEZmZxO6TcEtJwu0vzgog4rQ5g3NWy6SIpjWehNwTynLt7yM3R5WTI6cZs
+0GTv/rqo2/SUoNsFmnGIUwj/DrBe4XOAq1nS2ZlEctxKhBsKH0hMFp6D1rXOzrgl
+bwcq+oistoB0TLcThShyNgSqzW1znQ1n5SVUk9b5rRhSttJxn3yOMewH0i3v8bPo
+HOhP5kaGjblPsCYyhlL/SNVF0OXEGTwLNey7FQdWFOwVwTRRXe7k+uGZ2d5hg+Jn
+It/trDZ1RDYbVmB7/Qy73c16J4mvhOUJ2de5ZciFBjkidbiiUKLj9xnjK9k9Sauo
+MKhNnDMAEU5VDQM3xNe5BRdX8dFLwfF5H64sU3nROF83aUnDgvfFEowYPnCuPYfm
+m4aQHfoBSg4j3v1OeOwktcl+Q2TjxPHfWhbWeRBfxOTqQ/suYhnQChuFSK/qyo9K
+ccgotqghhunRsWMoZT25H7AZM6yKb1sMz/0oyMRIKeGqoYh+ULM5XLY0xNYd4/xU
+WtQ=
+-----END ENCRYPTED PRIVATE KEY-----

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/2d9c0869/proton-c/src/tests/test_config.h.in
----------------------------------------------------------------------
diff --git a/proton-c/src/tests/test_config.h.in b/proton-c/src/tests/test_config.h.in
new file mode 100644
index 0000000..d1d3a18
--- /dev/null
+++ b/proton-c/src/tests/test_config.h.in
@@ -0,0 +1,26 @@
+#ifndef TESTS_TEST_CONFIG_H
+#define TESTS_TEST_CONFIG_H
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* Make source tree locations available to tests */
+#define CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@"
+
+#endif // TESTS_TEST_CONFIG_H


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org