first socket test hit a local server instead of a remote server / this can help with a windows intermittent failure
This commit is contained in:
		@@ -8,6 +8,7 @@
 | 
				
			|||||||
#include <ixwebsocket/IXSocketFactory.h>
 | 
					#include <ixwebsocket/IXSocketFactory.h>
 | 
				
			||||||
#include <ixwebsocket/IXSocket.h>
 | 
					#include <ixwebsocket/IXSocket.h>
 | 
				
			||||||
#include <ixwebsocket/IXCancellationRequest.h>
 | 
					#include <ixwebsocket/IXCancellationRequest.h>
 | 
				
			||||||
 | 
					#include <ixwebsocket/IXWebSocketServer.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "IXTest.h"
 | 
					#include "IXTest.h"
 | 
				
			||||||
#include "catch.hpp"
 | 
					#include "catch.hpp"
 | 
				
			||||||
@@ -49,17 +50,75 @@ namespace ix
 | 
				
			|||||||
        REQUIRE(sscanf(line.c_str(), "HTTP/1.1 %d", &status) == 1);
 | 
					        REQUIRE(sscanf(line.c_str(), "HTTP/1.1 %d", &status) == 1);
 | 
				
			||||||
        REQUIRE(status == expectedStatus);
 | 
					        REQUIRE(status == expectedStatus);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool startServer(ix::WebSocketServer& server)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        server.setOnConnectionCallback(
 | 
				
			||||||
 | 
					            [&server](std::shared_ptr<ix::WebSocket> webSocket,
 | 
				
			||||||
 | 
					                      std::shared_ptr<ConnectionState> connectionState)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                webSocket->setOnMessageCallback(
 | 
				
			||||||
 | 
					                    [webSocket, connectionState, &server](ix::WebSocketMessageType messageType,
 | 
				
			||||||
 | 
					                       const std::string& str,
 | 
				
			||||||
 | 
					                       size_t wireSize,
 | 
				
			||||||
 | 
					                       const ix::WebSocketErrorInfo& error,
 | 
				
			||||||
 | 
					                       const ix::WebSocketOpenInfo& openInfo,
 | 
				
			||||||
 | 
					                       const ix::WebSocketCloseInfo& closeInfo)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        if (messageType == ix::WebSocketMessageType::Open)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            Logger() << "New connection";
 | 
				
			||||||
 | 
					                            Logger() << "Uri: " << openInfo.uri;
 | 
				
			||||||
 | 
					                            Logger() << "Headers:";
 | 
				
			||||||
 | 
					                            for (auto it : openInfo.headers)
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                Logger() << it.first << ": " << it.second;
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else if (messageType == ix::WebSocketMessageType::Close)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            Logger() << "Closed connection";
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                        else if (messageType == ix::WebSocketMessageType::Message)
 | 
				
			||||||
 | 
					                        {
 | 
				
			||||||
 | 
					                            for (auto&& client : server.getClients())
 | 
				
			||||||
 | 
					                            {
 | 
				
			||||||
 | 
					                                if (client != webSocket)
 | 
				
			||||||
 | 
					                                {
 | 
				
			||||||
 | 
					                                    client->send(str);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        auto res = server.listen();
 | 
				
			||||||
 | 
					        if (!res.first)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            Logger() << res.second;
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        server.start();
 | 
				
			||||||
 | 
					        return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_CASE("socket", "[socket]")
 | 
					TEST_CASE("socket", "[socket]")
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SECTION("Connect to google HTTP server. Send GET request without header. Should return 200")
 | 
					    SECTION("Connect to a local websocket server over a free port. Send GET request without header. Should return 400")
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        // Start a server first which we'll hit with our socket code
 | 
				
			||||||
 | 
					        int port = getFreePort();
 | 
				
			||||||
 | 
					        ix::WebSocketServer server(port);
 | 
				
			||||||
 | 
					        REQUIRE(startServer(server));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::string errMsg;
 | 
					        std::string errMsg;
 | 
				
			||||||
        bool tls = false;
 | 
					        bool tls = false;
 | 
				
			||||||
        std::shared_ptr<Socket> socket = createSocket(tls, errMsg);
 | 
					        std::shared_ptr<Socket> socket = createSocket(tls, errMsg);
 | 
				
			||||||
        std::string host("www.google.com");
 | 
					        std::string host("127.0.0.1");
 | 
				
			||||||
        int port = 80;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        std::stringstream ss;
 | 
					        std::stringstream ss;
 | 
				
			||||||
        ss << "GET / HTTP/1.1\r\n";
 | 
					        ss << "GET / HTTP/1.1\r\n";
 | 
				
			||||||
@@ -67,14 +126,14 @@ TEST_CASE("socket", "[socket]")
 | 
				
			|||||||
        ss << "\r\n";
 | 
					        ss << "\r\n";
 | 
				
			||||||
        std::string request(ss.str());
 | 
					        std::string request(ss.str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        int expectedStatus = 200;
 | 
					        int expectedStatus = 400;
 | 
				
			||||||
        int timeoutSecs = 3;
 | 
					        int timeoutSecs = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        testSocket(host, port, request, socket, expectedStatus, timeoutSecs);
 | 
					        testSocket(host, port, request, socket, expectedStatus, timeoutSecs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(__APPLE__) || defined(__linux__)
 | 
					#if defined(__APPLE__) || defined(__linux__)
 | 
				
			||||||
    SECTION("Connect to google HTTPS server. Send GET request without header. Should return 200")
 | 
					    SECTION("Connect to google HTTPS server over port 443. Send GET request without header. Should return 200")
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        std::string errMsg;
 | 
					        std::string errMsg;
 | 
				
			||||||
        bool tls = true;
 | 
					        bool tls = true;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user