mirror of
				https://github.com/falk-werner/webfuse
				synced 2025-06-13 12:54:15 +00:00 
			
		
		
		
	added test to connect adapter client via TLS
This commit is contained in:
		
							parent
							
								
									71956c4574
								
							
						
					
					
						commit
						8de8ec0003
					
				| @ -2,7 +2,7 @@ | |||||||
| #include <gmock/gmock.h> | #include <gmock/gmock.h> | ||||||
| 
 | 
 | ||||||
| #include "webfuse/utils/adapter_client.hpp" | #include "webfuse/utils/adapter_client.hpp" | ||||||
| 
 | #include "webfuse/adapter/client_tlsconfig.h" | ||||||
| #include "webfuse/adapter/credentials.h" | #include "webfuse/adapter/credentials.h" | ||||||
| #include "webfuse/core/protocol_names.h" | #include "webfuse/core/protocol_names.h" | ||||||
| #include "webfuse/utils/ws_server2.hpp" | #include "webfuse/utils/ws_server2.hpp" | ||||||
| @ -87,6 +87,44 @@ TEST(AdapterClient, Connect) | |||||||
|     ASSERT_TRUE(watcher.waitUntil([&]() mutable { return disconnected; })); |     ASSERT_TRUE(watcher.waitUntil([&]() mutable { return disconnected; })); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | TEST(AdapterClient, ConnectWithTls) | ||||||
|  | { | ||||||
|  |     TimeoutWatcher watcher(TIMEOUT); | ||||||
|  | 
 | ||||||
|  |     MockInvokationHander handler; | ||||||
|  |     WsServer2 server(handler, WF_PROTOCOL_NAME_PROVIDER_SERVER, 0, true); | ||||||
|  |     EXPECT_CALL(handler, Invoke(_,_)).Times(0); | ||||||
|  | 
 | ||||||
|  |     MockAdapterClientCallback callback; | ||||||
|  |     EXPECT_CALL(callback, Invoke(_, WF_CLIENT_INIT, nullptr)).Times(1); | ||||||
|  |     EXPECT_CALL(callback, Invoke(_, WF_CLIENT_CREATED, nullptr)).Times(1); | ||||||
|  |     EXPECT_CALL(callback, Invoke(_, WF_CLIENT_GET_TLS_CONFIG, _)).Times(1) | ||||||
|  |         .WillOnce(Invoke([](wf_client *, int, void * arg) { | ||||||
|  |             auto * tls = reinterpret_cast<wf_client_tlsconfig*>(arg); | ||||||
|  |             wf_client_tlsconfig_set_keypath (tls, "client-key.pem"); | ||||||
|  |             wf_client_tlsconfig_set_certpath(tls, "client-cert.pem"); | ||||||
|  |             wf_client_tlsconfig_set_cafilepath(tls, "server-cert.pem"); | ||||||
|  |         })); | ||||||
|  |     EXPECT_CALL(callback, Invoke(_, WF_CLIENT_CLEANUP, nullptr)).Times(1); | ||||||
|  | 
 | ||||||
|  |     bool connected = false; | ||||||
|  |     EXPECT_CALL(callback, Invoke(_, WF_CLIENT_CONNECTED, nullptr)).Times(1) | ||||||
|  |         .WillOnce(Invoke([&] (wf_client *, int, void *) mutable { connected = true; })); | ||||||
|  | 
 | ||||||
|  |     bool disconnected = false; | ||||||
|  |     EXPECT_CALL(callback, Invoke(_, WF_CLIENT_DISCONNECTED, nullptr)).Times(1) | ||||||
|  |         .WillOnce(Invoke([&] (wf_client *, int, void *) mutable { disconnected = true; })); | ||||||
|  | 
 | ||||||
|  |     AdapterClient client(callback.GetCallbackFn(), callback.GetUserData(), server.GetUrl()); | ||||||
|  | 
 | ||||||
|  |     client.Connect(); | ||||||
|  |     ASSERT_TRUE(watcher.waitUntil([&]() mutable { return connected; })); | ||||||
|  | 
 | ||||||
|  |     client.Disconnect(); | ||||||
|  |     ASSERT_TRUE(watcher.waitUntil([&]() mutable { return disconnected; })); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| TEST(AdapterClient, Authenticate) | TEST(AdapterClient, Authenticate) | ||||||
| { | { | ||||||
|     TimeoutWatcher watcher(TIMEOUT); |     TimeoutWatcher watcher(TIMEOUT); | ||||||
|  | |||||||
| @ -75,7 +75,7 @@ class WsServer2::Private : IServer | |||||||
|     Private(Private const &) = delete; |     Private(Private const &) = delete; | ||||||
|     Private & operator=(Private const &) = delete; |     Private & operator=(Private const &) = delete; | ||||||
| public: | public: | ||||||
|     Private(IIvokationHandler & handler, std::string const & protocol, int port); |     Private(IIvokationHandler & handler, std::string const & protocol, int port, bool enable_tls); | ||||||
|     ~Private(); |     ~Private(); | ||||||
|     bool IsConnected(); |     bool IsConnected(); | ||||||
|     std::string const & GetUrl() const; |     std::string const & GetUrl() const; | ||||||
| @ -105,8 +105,9 @@ private: | |||||||
| WsServer2::WsServer2( | WsServer2::WsServer2( | ||||||
|     IIvokationHandler& handler, |     IIvokationHandler& handler, | ||||||
|     std::string const & protocol, |     std::string const & protocol, | ||||||
|     int port) |     int port, | ||||||
| : d(new WsServer2::Private(handler, protocol, port)) |     bool enable_tls) | ||||||
|  | : d(new WsServer2::Private(handler, protocol, port, enable_tls)) | ||||||
| { | { | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
| @ -129,7 +130,8 @@ std::string const & WsServer2::GetUrl() const | |||||||
| WsServer2::Private::Private( | WsServer2::Private::Private( | ||||||
|     IIvokationHandler & handler, |     IIvokationHandler & handler, | ||||||
|     std::string const & protocol, |     std::string const & protocol, | ||||||
|     int port) |     int port, | ||||||
|  |     bool enable_tls) | ||||||
| : handler_(handler) | : handler_(handler) | ||||||
| , protocol_(protocol) | , protocol_(protocol) | ||||||
| , is_connected(false) | , is_connected(false) | ||||||
| @ -154,11 +156,19 @@ WsServer2::Private::Private( | |||||||
|     info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; |     info.options = LWS_SERVER_OPTION_HTTP_HEADERS_SECURITY_BEST_PRACTICES_ENFORCE; | ||||||
|     info.options |= LWS_SERVER_OPTION_EXPLICIT_VHOSTS; |     info.options |= LWS_SERVER_OPTION_EXPLICIT_VHOSTS; | ||||||
| 
 | 
 | ||||||
|  |     if (enable_tls) | ||||||
|  |     { | ||||||
|  | 		info.options |= LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT; | ||||||
|  | 		info.ssl_cert_filepath = "server-cert.pem"; | ||||||
|  | 		info.ssl_private_key_filepath = "server-key.pem"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     ws_context = lws_create_context(&info); |     ws_context = lws_create_context(&info); | ||||||
| 
 | 
 | ||||||
|     std::ostringstream stream; |     std::ostringstream stream; | ||||||
|     struct lws_vhost * vhost = lws_create_vhost(ws_context, &info); |     struct lws_vhost * vhost = lws_create_vhost(ws_context, &info); | ||||||
|     stream << "ws://localhost:" << lws_get_vhost_port(vhost) << "/"; |     stream <<  (enable_tls ? "wss://" : "ws://") | ||||||
|  |         << "localhost:" << lws_get_vhost_port(vhost) << "/"; | ||||||
|     url = stream.str(); |     url = stream.str(); | ||||||
| 
 | 
 | ||||||
|     context = std::thread(&Run, this); |     context = std::thread(&Run, this); | ||||||
|  | |||||||
| @ -22,7 +22,8 @@ public: | |||||||
|     WsServer2( |     WsServer2( | ||||||
|         IIvokationHandler& handler, |         IIvokationHandler& handler, | ||||||
|         std::string const & protocol, |         std::string const & protocol, | ||||||
|         int port = 0); |         int port = 0, | ||||||
|  |         bool enable_tls = false); | ||||||
|     virtual ~WsServer2(); |     virtual ~WsServer2(); | ||||||
|     bool IsConnected(); |     bool IsConnected(); | ||||||
|     std::string const & GetUrl() const; |     std::string const & GetUrl() const; | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user