diff --git a/build/repo.props b/build/repo.props
index d6ed427f9f..12aec16bcb 100644
--- a/build/repo.props
+++ b/build/repo.props
@@ -54,7 +54,10 @@
+ Include="$(RepositoryRoot)src\**\*.vcxproj" Exclude="@(ProjectToExclude)">
Platform=x64
Platform=Win32
diff --git a/eng/targets/Cpp.Common.targets b/eng/targets/Cpp.Common.targets
index b833c62ea2..76aeb1982e 100644
--- a/eng/targets/Cpp.Common.targets
+++ b/eng/targets/Cpp.Common.targets
@@ -12,4 +12,7 @@
+
+
+
diff --git a/global.json b/global.json
index ad876808c1..c69ded73a1 100644
--- a/global.json
+++ b/global.json
@@ -3,6 +3,6 @@
"version": "3.0.100-preview-009750"
},
"msbuild-sdks": {
- "Internal.AspNetCore.Sdk": "3.0.0-build-20190130.1"
+ "Internal.AspNetCore.Sdk": "3.0.0-build-20190205.1"
}
}
diff --git a/korebuild-lock.txt b/korebuild-lock.txt
index c5201be5e4..8ff4b72c9e 100644
--- a/korebuild-lock.txt
+++ b/korebuild-lock.txt
@@ -1,2 +1,2 @@
-version:3.0.0-build-20190130.1
-commithash:3b24877488f6bbff779aa3bd66fcffb4a6c04daf
+version:3.0.0-build-20190205.1
+commithash:d311c7e5300aed235a1f902a53dd9be02e5ac861
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj
index b4fbd7ce27..b4ee236c23 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/AspNetCore/AspNetCore.vcxproj
@@ -25,7 +25,7 @@
AspNetCore
aspnetcorev2
false
- 10.0.15063.0
+ 10.0.17134.0
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj
index 77ad69a397..ae001a5f7c 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/CommonLib/CommonLib.vcxproj
@@ -23,7 +23,7 @@
{55494E58-E061-4C4C-A0A8-837008E72F85}
Win32Proj
NewCommon
- 10.0.15063.0
+ 10.0.17134.0
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
index 5152c2ab11..4eb7606727 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/CommonLibTests.vcxproj
@@ -20,7 +20,7 @@
{1eac8125-1765-4e2d-8cbe-56dc98a1c8c1}
Win32Proj
- 10.0.15063.0
+ 10.0.17134.0
Application
v141
Unicode
@@ -193,5 +193,7 @@
-
+
+ true
+
\ No newline at end of file
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/NativeTests.targets b/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/NativeTests.targets
deleted file mode 100644
index f3d2caf930..0000000000
--- a/src/Servers/IIS/AspNetCoreModuleV2/CommonLibTests/NativeTests.targets
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- $(VCIDEInstallDir)..\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
-
-
-
-
-
\ No newline at end of file
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj
index 15d4ef1317..c3969aedc3 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/IISLib/IISLib.vcxproj
@@ -23,7 +23,7 @@
Win32Proj
IISLib
IISLib
- 10.0.15063.0
+ 10.0.17134.0
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj
index 9785deeab5..799ee2176b 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/InProcessRequestHandler/InProcessRequestHandler.vcxproj
@@ -24,7 +24,7 @@
{D57EA297-6DC2-4BC0-8C91-334863327863}
Win32Proj
InProcessRequestHandler
- 10.0.15063.0
+ 10.0.17134.0
InProcessRequestHandler
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj
index e3d11e040d..e84f9d4c88 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj
@@ -24,7 +24,7 @@
{7F87406C-A3C8-4139-A68D-E4C344294A67}
Win32Proj
OutOfProcessRequestHandler
- 10.0.15063.0
+ 10.0.17134.0
OutOfProcessRequestHandler
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj
index 2519c101b1..1e5c7920c0 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/RequestHandlerLib/RequestHandlerLib.vcxproj
@@ -23,7 +23,7 @@
{1533E271-F61B-441B-8B74-59FB61DF0552}
Win32Proj
NewCommon
- 10.0.15063.0
+ 10.0.17134.0
diff --git a/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj b/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj
index 62bc988761..7167a654c5 100644
--- a/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj
+++ b/src/Servers/IIS/AspNetCoreModuleV2/gtest/gtest.vcxproj
@@ -27,7 +27,7 @@
{CAC1267B-8778-4257-AAC6-CAF481723B01}
Win32Proj
gtest
- 10.0.15063.0
+ 10.0.17134.0
diff --git a/src/SignalR/clients/cpp/.nuget/NuGet.Config b/src/SignalR/clients/cpp/.nuget/NuGet.Config
deleted file mode 100644
index 67f8ea046e..0000000000
--- a/src/SignalR/clients/cpp/.nuget/NuGet.Config
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/SignalR/clients/cpp/.nuget/NuGet.exe b/src/SignalR/clients/cpp/.nuget/NuGet.exe
deleted file mode 100644
index 6d83a0b44e..0000000000
Binary files a/src/SignalR/clients/cpp/.nuget/NuGet.exe and /dev/null differ
diff --git a/src/SignalR/clients/cpp/.nuget/NuGet.targets b/src/SignalR/clients/cpp/.nuget/NuGet.targets
deleted file mode 100644
index e867fa7548..0000000000
--- a/src/SignalR/clients/cpp/.nuget/NuGet.targets
+++ /dev/null
@@ -1,144 +0,0 @@
-
-
-
- $(MSBuildProjectDirectory)\..\
-
-
- false
-
-
- false
-
-
- true
-
-
- false
-
-
-
-
-
-
-
-
-
-
- $([System.IO.Path]::Combine($(SolutionDir), ".nuget"))
-
-
-
-
- $(SolutionDir).nuget
-
-
-
- $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config
- $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config
-
-
-
- $(MSBuildProjectDirectory)\packages.config
- $(PackagesProjectConfig)
-
-
-
-
- $(NuGetToolsPath)\NuGet.exe
- @(PackageSource)
-
- "$(NuGetExePath)"
- mono --runtime=v4.0.30319 "$(NuGetExePath)"
-
- $(TargetDir.Trim('\\'))
-
- -RequireConsent
- -NonInteractive
-
- "$(SolutionDir) "
- "$(SolutionDir)"
-
-
- $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)
- $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols
-
-
-
- RestorePackages;
- $(BuildDependsOn);
-
-
-
-
- $(BuildDependsOn);
- BuildPackage;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/SignalR/clients/cpp/Build/SignalRClient.Build.Settings b/src/SignalR/clients/cpp/Build/SignalRClient.Build.Settings
index 56950923dd..33e61e1fa2 100644
--- a/src/SignalR/clients/cpp/Build/SignalRClient.Build.Settings
+++ b/src/SignalR/clients/cpp/Build/SignalRClient.Build.Settings
@@ -19,7 +19,7 @@
14.0
true
Windows Store
- 10.0.10586.0
+ 10.0.17134.0
10.0.10240.0
10.0
False
diff --git a/src/SignalR/clients/cpp/samples/HubConnectionSample/HubConnectionSample.vcxproj b/src/SignalR/clients/cpp/samples/HubConnectionSample/HubConnectionSample.vcxproj
index 9cd2afbbb8..d3f7026e48 100644
--- a/src/SignalR/clients/cpp/samples/HubConnectionSample/HubConnectionSample.vcxproj
+++ b/src/SignalR/clients/cpp/samples/HubConnectionSample/HubConnectionSample.vcxproj
@@ -18,7 +18,7 @@
..\..\
true
true
- 10.0.16299.0
+ 10.0.17134.0
diff --git a/src/SignalR/clients/cpp/src/signalrclient/Build/VS/packages.config b/src/SignalR/clients/cpp/src/signalrclient/Build/VS/packages.config
deleted file mode 100644
index dd2f50310f..0000000000
--- a/src/SignalR/clients/cpp/src/signalrclient/Build/VS/packages.config
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/SignalR/clients/cpp/src/signalrclient/Build/VS/signalrclient.vcxproj b/src/SignalR/clients/cpp/src/signalrclient/Build/VS/signalrclient.vcxproj
index e57dab08a6..580a58da4f 100644
--- a/src/SignalR/clients/cpp/src/signalrclient/Build/VS/signalrclient.vcxproj
+++ b/src/SignalR/clients/cpp/src/signalrclient/Build/VS/signalrclient.vcxproj
@@ -1,4 +1,4 @@
-
+
@@ -12,7 +12,7 @@
$(OutDir)lib\
$(Configuration)\lib\
StaticLibrary
- 10.0.16299.0
+ 10.0.17763.0
@@ -95,35 +95,14 @@
-
-
-
-
- {18377ae8-e372-40ce-94fd-7f65008d39a3}
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/src/SignalR/clients/cpp/src/signalrclient/CMakeLists.txt b/src/SignalR/clients/cpp/src/signalrclient/CMakeLists.txt
index a508128e55..2a48428ef0 100644
--- a/src/SignalR/clients/cpp/src/signalrclient/CMakeLists.txt
+++ b/src/SignalR/clients/cpp/src/signalrclient/CMakeLists.txt
@@ -8,8 +8,6 @@ set (SOURCES
http_sender.cpp
hub_connection.cpp
hub_connection_impl.cpp
- hub_proxy.cpp
- internal_hub_proxy.cpp
logger.cpp
request_sender.cpp
signalr_client_config.cpp
diff --git a/src/SignalR/clients/cpp/src/signalrclient/connection_impl.cpp b/src/SignalR/clients/cpp/src/signalrclient/connection_impl.cpp
index c960ad2e82..558fcd717f 100644
--- a/src/SignalR/clients/cpp/src/signalrclient/connection_impl.cpp
+++ b/src/SignalR/clients/cpp/src/signalrclient/connection_impl.cpp
@@ -208,7 +208,7 @@ namespace signalr
pplx::create_task([negotiation_response, connect_request_tce, disconnect_cts, weak_connection]()
{
- //std::this_thread::sleep_for(std::chrono::milliseconds(negotiation_response.transport_connect_timeout));
+ // TODO? std::this_thread::sleep_for(std::chrono::milliseconds(negotiation_response.transport_connect_timeout));
std::this_thread::sleep_for(std::chrono::milliseconds(5000));
// if the disconnect_cts is canceled it means that the connection has been stopped or went out of scope in
@@ -307,6 +307,7 @@ namespace signalr
}
m_handshakeReceived = true;
connect_request_tce.set();
+ return;
}
}
@@ -328,7 +329,7 @@ namespace signalr
{
if (result.has_field(_XPLATSTR("error")) && result.has_field(_XPLATSTR("result")))
{
- //error
+ // TODO: error
}
invoke_message_received(result);
break;
diff --git a/src/SignalR/clients/cpp/src/signalrclient/hub_connection.cpp b/src/SignalR/clients/cpp/src/signalrclient/hub_connection.cpp
index 3867e37e11..88ec2ef4dc 100644
--- a/src/SignalR/clients/cpp/src/signalrclient/hub_connection.cpp
+++ b/src/SignalR/clients/cpp/src/signalrclient/hub_connection.cpp
@@ -41,7 +41,7 @@ namespace signalr
{
if (!m_pImpl)
{
- throw signalr_exception(_XPLATSTR("invoke() cannot be called on uninitialized hub_proxy instance"));
+ throw signalr_exception(_XPLATSTR("invoke() cannot be called on uninitialized hub_connection instance"));
}
return m_pImpl->invoke_json(method_name, arguments);
@@ -51,7 +51,7 @@ namespace signalr
{
if (!m_pImpl)
{
- throw signalr_exception(_XPLATSTR("invoke() cannot be called on uninitialized hub_proxy instance"));
+ throw signalr_exception(_XPLATSTR("invoke() cannot be called on uninitialized hub_connection instance"));
}
return m_pImpl->invoke_void(method_name, arguments);
diff --git a/src/SignalR/clients/cpp/src/signalrclient/hub_connection_impl.cpp b/src/SignalR/clients/cpp/src/signalrclient/hub_connection_impl.cpp
index 09605ad33f..17d8083781 100644
--- a/src/SignalR/clients/cpp/src/signalrclient/hub_connection_impl.cpp
+++ b/src/SignalR/clients/cpp/src/signalrclient/hub_connection_impl.cpp
@@ -103,10 +103,8 @@ namespace signalr
auto type = message.at(_XPLATSTR("type")).as_integer();
if (type == 3)
{
- if (invoke_callback(message))
- {
- return;
- }
+ invoke_callback(message);
+ return;
}
else if (type == 1)
{
diff --git a/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/packages.config b/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/packages.config
deleted file mode 100644
index 6394bb8e22..0000000000
--- a/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/packages.config
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj b/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj
index 4576776992..2fba0aff2f 100644
--- a/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj
+++ b/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj
@@ -1,4 +1,4 @@
-
+
@@ -12,7 +12,7 @@
$(OutDir)dll\
$(Configuration)\dll\
DynamicLibrary
- 10.0.16299.0
+ 10.0.17134.0
@@ -46,7 +46,6 @@
-
@@ -58,7 +57,6 @@
-
@@ -106,19 +104,16 @@
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
$(build_number)
@@ -138,17 +133,4 @@
-
-
- This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj.filters b/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj.filters
index 4835bce0e0..f4a449e511 100644
--- a/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj.filters
+++ b/src/SignalR/clients/cpp/src/signalrclientdll/Build/VS/signalrclientdll.vcxproj.filters
@@ -33,9 +33,6 @@
Header Files
-
- Header Files
-
Header Files
@@ -96,9 +93,6 @@
Header Files
-
- Header Files
-
Header Files
diff --git a/src/SignalR/clients/cpp/test/gtest/gtest.vcxproj b/src/SignalR/clients/cpp/test/gtest/gtest.vcxproj
index 70deb273f8..41b0f95a4f 100644
--- a/src/SignalR/clients/cpp/test/gtest/gtest.vcxproj
+++ b/src/SignalR/clients/cpp/test/gtest/gtest.vcxproj
@@ -26,7 +26,7 @@
{CAC1267B-8778-4257-AAC6-CAF481723B01}
Win32Proj
gtest
- 10.0.16299.0
+ 10.0.17134.0
diff --git a/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/packages.config b/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/packages.config
deleted file mode 100644
index dd2f50310f..0000000000
--- a/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/packages.config
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/signalrclient-e2e-tests.vcxproj b/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/signalrclient-e2e-tests.vcxproj
index 225b2ead3d..0cb16d4a30 100644
--- a/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/signalrclient-e2e-tests.vcxproj
+++ b/src/SignalR/clients/cpp/test/signalrclient-e2e-tests/Build/VS/signalrclient-e2e-tests.vcxproj
@@ -1,4 +1,4 @@
-
+
@@ -8,7 +8,7 @@
signalrclient-e2e-tests
..\..\..\..\
Application
- 10.0.16299.0
+ 10.0.17134.0
@@ -62,33 +62,17 @@
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/packages.config b/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/packages.config
deleted file mode 100644
index 6394bb8e22..0000000000
--- a/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/packages.config
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj b/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj
index 13f4da38e7..150f9487d9 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj
@@ -1,4 +1,4 @@
-
+
@@ -8,7 +8,7 @@
signalrclienttests
..\..\..\..\
Application
- 10.0.16299.0
+ 10.0.17134.0
@@ -58,7 +58,6 @@
-
@@ -84,33 +83,20 @@
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
- This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+ true
+
+
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj.filters b/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj.filters
index ed3d672946..ff4d349b3b 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj.filters
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/Build/VS/signalrclienttests.vcxproj.filters
@@ -89,9 +89,6 @@
Source Files
-
- Source Files
-
Source Files
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/CMakeLists.txt b/src/SignalR/clients/cpp/test/signalrclienttests/CMakeLists.txt
index bb306152ed..fce4abdbae 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/CMakeLists.txt
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/CMakeLists.txt
@@ -7,7 +7,6 @@ set (SOURCES
http_sender_tests.cpp
hub_connection_impl_tests.cpp
hub_exception_tests.cpp
- internal_hub_proxy_tests.cpp
logger_tests.cpp
memory_log_writer.cpp
request_sender_tests.cpp
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/connection_impl_tests.cpp b/src/SignalR/clients/cpp/test/signalrclienttests/connection_impl_tests.cpp
index d5b0c402ee..54cd737383 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/connection_impl_tests.cpp
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/connection_impl_tests.cpp
@@ -12,6 +12,7 @@
#include "memory_log_writer.h"
#include "cpprest/ws_client.h"
#include "signalrclient/signalr_exception.h"
+#include "signalrclient/web_exception.h"
using namespace signalr;
@@ -189,34 +190,34 @@ TEST(connection_impl_start, start_fails_if_transport_connect_throws)
ASSERT_EQ(_XPLATSTR("[error ] transport could not connect due to: connecting failed\n"), entry);
}
-TEST(connection_impl_start, start_fails_if_TryWebsockets_false_and_no_fallback_transport)
-{
- auto web_request_factory = std::make_unique([](const web::uri &) -> std::unique_ptr
- {
- utility::string_t response_body(
- _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
- _XPLATSTR("\"KeepAliveTimeout\" : 20.0, \"DisconnectTimeout\" : 30.0, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : false, ")
- _XPLATSTR("\"ProtocolVersion\" : \"1.4\", \"TransportConnectTimeout\" : 5.0, \"LongPollDelay\" : 0.0}"));
-
- return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
- });
-
- auto websocket_client = std::make_shared();
- auto connection =
- connection_impl::create(create_uri(), _XPLATSTR(""), trace_level::errors, std::make_shared(),
- std::move(web_request_factory), std::make_unique(websocket_client));
-
- try
- {
- connection->start().get();
- ASSERT_TRUE(false); // exception not thrown
- }
- catch (const std::exception &e)
- {
- ASSERT_EQ(_XPLATSTR("websockets not supported on the server and there is no fallback transport"),
- utility::conversions::to_string_t(e.what()));
- }
-}
+// TODO
+//TEST(connection_impl_start, start_fails_if_no_available_transports)
+//{
+// auto web_request_factory = std::make_unique([](const web::uri &) -> std::unique_ptr
+// {
+// auto response_body =
+// _XPLATSTR("{ \"connectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
+// _XPLATSTR("\"availableTransports\" : [] }");
+//
+// return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
+// });
+//
+// auto websocket_client = std::make_shared();
+// auto connection =
+// connection_impl::create(create_uri(), _XPLATSTR(""), trace_level::errors, std::make_shared(),
+// std::move(web_request_factory), std::make_unique(websocket_client));
+//
+// try
+// {
+// connection->start().get();
+// ASSERT_TRUE(false); // exception not thrown
+// }
+// catch (const std::exception &e)
+// {
+// ASSERT_EQ(_XPLATSTR("websockets not supported on the server and there is no fallback transport"),
+// utility::conversions::to_string_t(e.what()));
+// }
+//}
#if defined(_WIN32) // https://github.com/aspnet/SignalR-Client-Cpp/issues/131
@@ -251,20 +252,13 @@ TEST(connection_impl_start, start_fails_if_transport_fails_when_receiving_messag
#endif
-TEST(connection_impl_start, start_fails_if_start_request_fails)
+TEST(connection_impl_start, start_fails_if_negotiate_request_fails)
{
std::shared_ptr writer(std::make_shared());
- auto web_request_factory = std::make_unique([](const web::uri& url)
+ auto web_request_factory = std::make_unique([](const web::uri&)
{
- auto response_body =
- url.path() == _XPLATSTR("/negotiate")
- ? _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
- _XPLATSTR("\"DisconnectTimeout\" : 30.0, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : true, ")
- _XPLATSTR("\"ProtocolVersion\" : \"1.4\", \"TransportConnectTimeout\" : 5.0, \"LongPollDelay\" : 0.0}")
- : _XPLATSTR("{ }");
-
- return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
+ return std::unique_ptr(new web_request_stub((unsigned short)400, _XPLATSTR("Bad Request")));
});
auto websocket_client = std::make_shared();
@@ -282,9 +276,9 @@ TEST(connection_impl_start, start_fails_if_start_request_fails)
connection->start().get();
ASSERT_TRUE(false); // exception not thrown
}
- catch (const signalr_exception &e)
+ catch (const web_exception &e)
{
- ASSERT_STREQ("start request failed due to unexpected response from the server: { }", e.what());
+ ASSERT_STREQ("web exception - 400 Bad Request", e.what());
}
}
@@ -296,10 +290,9 @@ TEST(connection_impl_start, start_fails_if_connect_request_times_out)
{
auto response_body =
url.path() == _XPLATSTR("/negotiate")
- ? _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
- _XPLATSTR("\"KeepAliveTimeout\" : 20.0, \"DisconnectTimeout\" : 30.0, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : true, ")
- _XPLATSTR("\"ProtocolVersion\" : \"1.4\", \"TransportConnectTimeout\" : 0.1, \"LongPollDelay\" : 0.0}")
- : _XPLATSTR("{ }");
+ ? _XPLATSTR("{ \"connectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
+ _XPLATSTR("\"availableTransports\" : [] }")
+ : _XPLATSTR("");
return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
});
@@ -325,36 +318,6 @@ TEST(connection_impl_start, start_fails_if_connect_request_times_out)
}
}
-TEST(connection_impl_start, start_fails_if_protocol_versions_not_compatible)
-{
- auto web_request_factory = std::make_unique([](const web::uri& url)
- {
- auto response_body =
- url.path() == _XPLATSTR("/negotiate")
- ? _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
- _XPLATSTR("\"KeepAliveTimeout\" : 20.0, \"DisconnectTimeout\" : 30.0, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : true, ")
- _XPLATSTR("\"ProtocolVersion\" : \"1.2\", \"TransportConnectTimeout\" : 0.1, \"LongPollDelay\" : 0.0}")
- : _XPLATSTR("{ }");
-
- return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
- });
-
- auto websocket_client = std::make_shared();
- auto connection =
- connection_impl::create(create_uri(), _XPLATSTR(""), trace_level::all, std::make_shared(),
- std::move(web_request_factory), std::make_unique(websocket_client));
-
- try
- {
- connection->start().get();
- ASSERT_TRUE(false); // exception not thrown
- }
- catch (const signalr_exception &e)
- {
- ASSERT_STREQ("incompatible protocol version. client protocol version: 1.4, server protocol version: 1.2", e.what());
- }
-}
-
TEST(connection_impl_process_response, process_response_logs_messages)
{
std::shared_ptr writer(std::make_shared());
@@ -368,7 +331,7 @@ TEST(connection_impl_process_response, process_response_logs_messages)
ASSERT_FALSE(log_entries.empty());
auto entry = remove_date_from_log_entry(log_entries[0]);
- ASSERT_EQ(_XPLATSTR("[message ] processing message: {\"C\":\"x\", \"S\":1, \"M\":[] }\n"), entry);
+ ASSERT_EQ(_XPLATSTR("[message ] processing message: { }\x1e\n"), entry);
}
TEST(connection_impl_send, message_sent)
@@ -416,9 +379,30 @@ TEST(connection_impl_send, exceptions_from_send_logged_and_propagated)
{
std::shared_ptr writer(std::make_shared());
+ int call_number = -1;
+ bool hasSentHandshake = false;
auto websocket_client = create_test_websocket_client(
- /* receive function */ []() { return pplx::task_from_result(std::string("{ }\x1e")); },
- /* send function */ [](const utility::string_t&){ return pplx::task_from_exception(std::runtime_error("error")); });
+ /* receive function */ [call_number]()
+ mutable {
+ std::string responses[]
+ {
+ "{ }\x1e",
+ "{}"
+ };
+
+ call_number = std::min(call_number + 1, 1);
+
+ return pplx::task_from_result(responses[call_number]);
+ },
+ /* send function */ [&hasSentHandshake](const utility::string_t&)
+ {
+ if (hasSentHandshake)
+ {
+ return pplx::task_from_exception(std::runtime_error("error"));
+ }
+ hasSentHandshake = true;
+ return pplx::task_from_result();
+ });
auto connection = create_connection(websocket_client, writer, trace_level::errors);
@@ -453,13 +437,12 @@ TEST(connection_impl_set_message_received, callback_invoked_when_message_receive
std::string responses[]
{
"{ }\x1e",
- "{ \"C\":\"x\", \"G\":\"gr0\", \"M\":[]}",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"Test\"] }",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"release\"] }",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"Test\"] }\x1e",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"release\"] }\x1e",
"{}"
};
- call_number = std::min(call_number + 1, 4);
+ call_number = std::min(call_number + 1, 3);
return pplx::task_from_result(responses[call_number]);
});
@@ -469,13 +452,15 @@ TEST(connection_impl_set_message_received, callback_invoked_when_message_receive
auto message = std::make_shared();
auto message_received_event = std::make_shared();
- connection->set_message_received_string([message, message_received_event](const utility::string_t &m){
- if (m == _XPLATSTR("Test"))
+ connection->set_message_received_string([message, message_received_event](const utility::string_t &m)
+ {
+ auto value = web::json::value::parse(m).at(_XPLATSTR("arguments")).as_array()[0].as_string();
+ if (value == _XPLATSTR("Test"))
{
- *message = m;
+ *message = value;
}
- if (m == _XPLATSTR("release"))
+ if (value == _XPLATSTR("release"))
{
message_received_event->set();
}
@@ -497,8 +482,8 @@ TEST(connection_impl_set_message_received, exception_from_callback_caught_and_lo
std::string responses[]
{
"{ }\x1e",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"throw\"] }",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"release\"] }",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"throw\"] }\x1e",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"release\"] }\x1e",
"{}"
};
@@ -511,13 +496,15 @@ TEST(connection_impl_set_message_received, exception_from_callback_caught_and_lo
auto connection = create_connection(websocket_client, writer, trace_level::errors);
auto message_received_event = std::make_shared();
- connection->set_message_received_string([message_received_event](const utility::string_t &m){
- if (m == _XPLATSTR("throw"))
+ connection->set_message_received_string([message_received_event](const utility::string_t &m)
+ {
+ auto value = web::json::value::parse(m).at(_XPLATSTR("arguments")).as_array()[0].as_string();
+ if (value == _XPLATSTR("throw"))
{
throw std::runtime_error("oops");
}
- if (m == _XPLATSTR("release"))
+ if (value == _XPLATSTR("release"))
{
message_received_event->set();
}
@@ -543,8 +530,8 @@ TEST(connection_impl_set_message_received, non_std_exception_from_callback_caugh
std::string responses[]
{
"{ }\x1e",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"throw\"] }",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"release\"] }",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"throw\"] }\x1e",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"release\"] }\x1e",
"{}"
};
@@ -559,12 +546,13 @@ TEST(connection_impl_set_message_received, non_std_exception_from_callback_caugh
auto message_received_event = std::make_shared();
connection->set_message_received_string([message_received_event](const utility::string_t &m)
{
- if (m == _XPLATSTR("throw"))
+ auto value = web::json::value::parse(m).at(_XPLATSTR("arguments")).as_array()[0].as_string();
+ if (value == _XPLATSTR("throw"))
{
throw 42;
}
- if (m == _XPLATSTR("release"))
+ if (value == _XPLATSTR("release"))
{
message_received_event->set();
}
@@ -590,8 +578,8 @@ TEST(connection_impl_set_message_received, error_logged_for_malformed_payload)
std::string responses[]
{
"{ }\x1e",
- "{ 42",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"release\"] }",
+ "{ 42\x1e",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"release\"] }\x1e",
"{}"
};
@@ -618,7 +606,7 @@ TEST(connection_impl_set_message_received, error_logged_for_malformed_payload)
ASSERT_FALSE(log_entries.empty());
auto entry = remove_date_from_log_entry(log_entries[0]);
- ASSERT_EQ(_XPLATSTR("[error ] error occured when parsing response: * Line 1, Column 4 Syntax error: Malformed object literal. response: { 42\n"), entry);
+ ASSERT_EQ(_XPLATSTR("[error ] error occured when parsing response: * Line 1, Column 4 Syntax error: Malformed object literal. response: { 42\x1e\n"), entry);
}
TEST(connection_impl_set_message_received, unexpected_responses_logged)
@@ -630,8 +618,8 @@ TEST(connection_impl_set_message_received, unexpected_responses_logged)
std::string responses[]
{
"{ }\x1e",
- "42",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"release\"] }",
+ "42\x1e",
+ "{ \"type\": 1, \"target\": \"something\", \"arguments\" : [\"release\"] }\x1e",
"{}"
};
@@ -896,15 +884,14 @@ TEST(connection_impl_stop, stop_cancels_ongoing_start_request)
ASSERT_EQ(_XPLATSTR("[state change] connecting -> disconnected\n"), remove_date_from_log_entry(log_entries[4]));
}
-TEST(connection_impl_stop, ongoing_start_request_cancelled_if_connection_stopped_before_init_message_received)
+TEST(connection_impl_stop, ongoing_start_request_canceled_if_connection_stopped_before_init_message_received)
{
auto web_request_factory = std::make_unique([](const web::uri& url)
{
auto response_body =
url.path() == _XPLATSTR("/negotiate")
- ? _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
- _XPLATSTR("\"DisconnectTimeout\" : 0.5, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : true, ")
- _XPLATSTR("\"ProtocolVersion\" : \"1.4\", \"TransportConnectTimeout\" : 0.1, \"LongPollDelay\" : 0.0}")
+ ? _XPLATSTR("{ \"connectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
+ _XPLATSTR("\"availableTransports\" : [] }")
: _XPLATSTR("");
return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
@@ -942,49 +929,6 @@ TEST(connection_impl_stop, ongoing_start_request_cancelled_if_connection_stopped
ASSERT_EQ(_XPLATSTR("[state change] connecting -> disconnected\n"), remove_date_from_log_entry(log_entries[4]));
}
-TEST(connection_impl_stop, stop_ignores_exceptions_from_abort_requests)
-{
- auto writer = std::shared_ptr{std::make_shared()};
-
- auto web_request_factory = std::make_unique([](const web::uri& url)
- {
- auto response_body =
- url.path() == _XPLATSTR("/negotiate")
- ? _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
- _XPLATSTR("\"KeepAliveTimeout\" : 20.0, \"DisconnectTimeout\" : 30.0, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : true, ")
- _XPLATSTR("\"ProtocolVersion\" : \"1.4\", \"TransportConnectTimeout\" : 5.0, \"LongPollDelay\" : 0.0}")
- : url.path() == _XPLATSTR("/start")
- ? _XPLATSTR("{\"Response\":\"started\" }")
- : _XPLATSTR("");
-
- return url.path() == _XPLATSTR("/abort")
- ? std::unique_ptr(new web_request_stub((unsigned short)503, _XPLATSTR("Bad request"), response_body))
- : std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
- });
-
- auto websocket_client = create_test_websocket_client(
- /* receive function */ []() { return pplx::task_from_result(std::string("{ }\x1e")); });
-
- auto connection =
- connection_impl::create(create_uri(), _XPLATSTR(""), trace_level::state_changes,
- writer, std::move(web_request_factory), std::make_unique(websocket_client));
-
- connection->start()
- .then([connection]()
- {
- return connection->stop();
- }).get();
-
- ASSERT_EQ(connection_state::disconnected, connection->get_connection_state());
-
- auto log_entries = std::dynamic_pointer_cast(writer)->get_log_entries();
- ASSERT_EQ(4U, log_entries.size());
- ASSERT_EQ(_XPLATSTR("[state change] disconnected -> connecting\n"), remove_date_from_log_entry(log_entries[0]));
- ASSERT_EQ(_XPLATSTR("[state change] connecting -> connected\n"), remove_date_from_log_entry(log_entries[1]));
- ASSERT_EQ(_XPLATSTR("[state change] connected -> disconnecting\n"), remove_date_from_log_entry(log_entries[2]));
- ASSERT_EQ(_XPLATSTR("[state change] disconnecting -> disconnected\n"), remove_date_from_log_entry(log_entries[3]));
-}
-
TEST(connection_impl_stop, stop_invokes_disconnected_callback)
{
auto websocket_client = create_test_websocket_client(
@@ -1007,8 +951,20 @@ TEST(connection_impl_stop, std_exception_for_disconnected_callback_caught_and_lo
{
auto writer = std::shared_ptr{std::make_shared()};
+ int call_number = -1;
auto websocket_client = create_test_websocket_client(
- /* receive function */ []() { return pplx::task_from_result(std::string("{ \"C\":\"x\", \"S\":1, \"M\":[] }")); });
+ /* receive function */ [call_number]()
+ mutable {
+ std::string responses[]
+ {
+ "{ }\x1e",
+ "{}"
+ };
+
+ call_number = std::min(call_number + 1, 1);
+
+ return pplx::task_from_result(responses[call_number]);
+ });
auto connection = create_connection(websocket_client, writer, trace_level::errors);
connection->set_disconnected([](){ throw std::runtime_error("exception from disconnected"); });
@@ -1028,8 +984,20 @@ TEST(connection_impl_stop, exception_for_disconnected_callback_caught_and_logged
{
auto writer = std::shared_ptr{std::make_shared()};
+ int call_number = -1;
auto websocket_client = create_test_websocket_client(
- /* receive function */ []() { return pplx::task_from_result(std::string("{ }\x1e")); });
+ /* receive function */ [call_number]()
+ mutable {
+ std::string responses[]
+ {
+ "{ }\x1e",
+ "{}"
+ };
+
+ call_number = std::min(call_number + 1, 1);
+
+ return pplx::task_from_result(responses[call_number]);
+ });
auto connection = create_connection(websocket_client, writer, trace_level::errors);
connection->set_disconnected([](){ throw 42; });
@@ -1045,53 +1013,50 @@ TEST(connection_impl_stop, exception_for_disconnected_callback_caught_and_logged
ASSERT_EQ(_XPLATSTR("[error ] disconnected callback threw an unknown exception\n"), remove_date_from_log_entry(log_entries[0]));
}
-//TEST(connection_impl_config, custom_headers_set_in_requests)
-//{
-// auto writer = std::shared_ptr{std::make_shared()};
-//
-// auto web_request_factory = std::make_unique([](const web::uri& url)
-// {
-// auto response_body =
-// url.path() == _XPLATSTR("/negotiate")
-// ? _XPLATSTR("{\"Url\":\"/signalr\", \"ConnectionToken\" : \"A==\", \"ConnectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
-// _XPLATSTR("\"KeepAliveTimeout\" : 20.0, \"DisconnectTimeout\" : 30.0, \"ConnectionTimeout\" : 110.0, \"TryWebSockets\" : true, ")
-// _XPLATSTR("\"ProtocolVersion\" : \"1.4\", \"TransportConnectTimeout\" : 5.0, \"LongPollDelay\" : 0.0}")
-// : url.path() == _XPLATSTR("/start")
-// ? _XPLATSTR("{\"Response\":\"started\" }")
-// : _XPLATSTR("");
-//
-// auto request = new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body);
-// request->on_get_response = [](web_request_stub& request)
-// {
-// auto http_headers = request.m_signalr_client_config.get_http_headers();
-// ASSERT_EQ(1, http_headers.size());
-// ASSERT_EQ(_XPLATSTR("42"), http_headers[_XPLATSTR("Answer")]);
-// };
-//
-// return std::unique_ptr(request);
-// });
-//
-// auto websocket_client = create_test_websocket_client(
-// /* receive function */ []() { return pplx::task_from_result(std::string("{ \"C\":\"x\", \"S\":1, \"M\":[] }")); });
-//
-// auto connection =
-// connection_impl::create(create_uri(), _XPLATSTR(""), trace_level::state_changes,
-// writer, std::move(web_request_factory), std::make_unique(websocket_client));
-//
-// signalr::signalr_client_config signalr_client_config{};
-// auto http_headers = signalr_client_config.get_http_headers();
-// http_headers[_XPLATSTR("Answer")] = _XPLATSTR("42");
-// signalr_client_config.set_http_headers(http_headers);
-// connection->set_client_config(signalr_client_config);
-//
-// connection->start()
-// .then([connection]()
-// {
-// return connection->stop();
-// }).get();
-//
-// ASSERT_EQ(connection_state::disconnected, connection->get_connection_state());
-//}
+TEST(connection_impl_config, custom_headers_set_in_requests)
+{
+ auto writer = std::shared_ptr{std::make_shared()};
+
+ auto web_request_factory = std::make_unique([](const web::uri& url)
+ {
+ auto response_body =
+ url.path() == _XPLATSTR("/negotiate")
+ ? _XPLATSTR("{ \"connectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
+ _XPLATSTR("\"availableTransports\" : [] }")
+ : _XPLATSTR("");
+
+ auto request = new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body);
+ request->on_get_response = [](web_request_stub& request)
+ {
+ auto http_headers = request.m_signalr_client_config.get_http_headers();
+ ASSERT_EQ(1U, http_headers.size());
+ ASSERT_EQ(_XPLATSTR("42"), http_headers[_XPLATSTR("Answer")]);
+ };
+
+ return std::unique_ptr(request);
+ });
+
+ auto websocket_client = create_test_websocket_client(
+ /* receive function */ []() { return pplx::task_from_result(std::string("{ }\x1e")); });
+
+ auto connection =
+ connection_impl::create(create_uri(), _XPLATSTR(""), trace_level::state_changes,
+ writer, std::move(web_request_factory), std::make_unique(websocket_client));
+
+ signalr::signalr_client_config signalr_client_config{};
+ auto http_headers = signalr_client_config.get_http_headers();
+ http_headers[_XPLATSTR("Answer")] = _XPLATSTR("42");
+ signalr_client_config.set_http_headers(http_headers);
+ connection->set_client_config(signalr_client_config);
+
+ connection->start()
+ .then([connection]()
+ {
+ return connection->stop();
+ }).get();
+
+ ASSERT_EQ(connection_state::disconnected, connection->get_connection_state());
+}
TEST(connection_impl_set_config, config_can_be_set_only_in_disconnected_state)
{
@@ -1204,9 +1169,7 @@ TEST(connection_id, connection_id_reset_when_starting_connection)
url.path() == _XPLATSTR("/negotiate")
? _XPLATSTR("{ \"connectionId\" : \"f7707523-307d-4cba-9abf-3eef701241e8\", ")
_XPLATSTR("\"availableTransports\" : [] }")
- : url.path() == _XPLATSTR("/start") || url.path() == _XPLATSTR("/signalr/start")
- ? _XPLATSTR("{\"Response\":\"started\" }")
- : _XPLATSTR("");
+ : _XPLATSTR("");
return std::unique_ptr(new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body));
}
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/http_sender_tests.cpp b/src/SignalR/clients/cpp/test/signalrclienttests/http_sender_tests.cpp
index 0e46b9bfae..32419b5114 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/http_sender_tests.cpp
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/http_sender_tests.cpp
@@ -65,28 +65,28 @@ TEST(http_sender_get_response, user_agent_set)
ASSERT_EQ(response_body, http_sender::get(*web_request_factory, _XPLATSTR("url")).get());
}
-//TEST(http_sender_get_response, headers_set)
-//{
-// utility::string_t response_body{ _XPLATSTR("response body") };
-//
-// auto web_request_factory = std::make_unique([response_body](const web::uri &) -> std::unique_ptr
-// {
-// auto request = new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body);
-// request->on_get_response = [](web_request_stub& request)
-// {
-// auto http_headers = request.m_signalr_client_config.get_http_headers();
-// ASSERT_EQ(1, http_headers.size());
-// ASSERT_EQ(_XPLATSTR("123"), http_headers[_XPLATSTR("abc")]);
-// };
-//
-// return std::unique_ptr(request);
-// });
-//
-// signalr::signalr_client_config signalr_client_config;
-// auto http_headers = signalr_client_config.get_http_headers();
-// http_headers[_XPLATSTR("abc")] = _XPLATSTR("123");
-// signalr_client_config.set_http_headers(http_headers);
-//
-// // ensures that web_request.get_response() was invoked
-// ASSERT_EQ(response_body, http_sender::get(*web_request_factory, _XPLATSTR("url"), signalr_client_config).get());
-//}
\ No newline at end of file
+TEST(http_sender_get_response, headers_set)
+{
+ utility::string_t response_body{ _XPLATSTR("response body") };
+
+ auto web_request_factory = std::make_unique([response_body](const web::uri &) -> std::unique_ptr
+ {
+ auto request = new web_request_stub((unsigned short)200, _XPLATSTR("OK"), response_body);
+ request->on_get_response = [](web_request_stub& request)
+ {
+ auto http_headers = request.m_signalr_client_config.get_http_headers();
+ ASSERT_EQ(1U, http_headers.size());
+ ASSERT_EQ(_XPLATSTR("123"), http_headers[_XPLATSTR("abc")]);
+ };
+
+ return std::unique_ptr(request);
+ });
+
+ signalr::signalr_client_config signalr_client_config;
+ auto http_headers = signalr_client_config.get_http_headers();
+ http_headers[_XPLATSTR("abc")] = _XPLATSTR("123");
+ signalr_client_config.set_http_headers(http_headers);
+
+ // ensures that web_request.get_response() was invoked
+ ASSERT_EQ(response_body, http_sender::get(*web_request_factory, _XPLATSTR("url"), signalr_client_config).get());
+}
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/hub_connection_impl_tests.cpp b/src/SignalR/clients/cpp/test/signalrclienttests/hub_connection_impl_tests.cpp
index 324a1d51d1..767b6ad81a 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/hub_connection_impl_tests.cpp
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/hub_connection_impl_tests.cpp
@@ -223,84 +223,6 @@ TEST(hub_invocation, hub_connection_invokes_users_code_on_hub_invocations)
ASSERT_EQ(_XPLATSTR("[\"message\",1]"), *payload);
}
-TEST(hub_invocation, hub_connection_discards_persistent_connection_message_primitive_value)
-{
- int call_number = -1;
- auto websocket_client = create_test_websocket_client(
- /* receive function */ [call_number]()
- mutable {
- std::string responses[]
- {
- "{ }\x1e",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [\"Test\"] }",
- "{ \"C\":\"d- F430FB19\", \"M\" : [{\"H\":\"my_hub\", \"M\":\"broadcast\", \"A\" : [\"signal event\", 1]}] }",
- "{}"
- };
-
- call_number = std::min(call_number + 1, 2);
-
- return pplx::task_from_result(responses[call_number]);
- });
-
- std::shared_ptr writer(std::make_shared());
- auto hub_connection = create_hub_connection(websocket_client, writer, trace_level::info);
-
- auto on_broadcast_event = std::make_shared();
- hub_connection->on(_XPLATSTR("broadcast"), [on_broadcast_event](const json::value&)
- {
- on_broadcast_event->set();
- });
-
- hub_connection->start().get();
- ASSERT_FALSE(on_broadcast_event->wait(5000));
-
- auto memory_writer = std::dynamic_pointer_cast(writer);
- auto log_entries = memory_writer->get_log_entries();
- ASSERT_TRUE(log_entries.size() >= 1);
-
- ASSERT_EQ(_XPLATSTR("[info ] non-hub message received and will be discarded. message: \"Test\"\n"),
- remove_date_from_log_entry(log_entries[1]));
-}
-
-TEST(hub_invocation, hub_connection_invokes_persistent_connection_message_object)
-{
- int call_number = -1;
- auto websocket_client = create_test_websocket_client(
- /* receive function */ [call_number]()
- mutable {
- std::string responses[]
- {
- "{ }\x1e",
- "{ \"C\":\"d-486F0DF9-BAO,5|BAV,1|BAW,0\", \"M\" : [{\"Name\": \"Test\"}] }",
- "{ \"C\":\"d- F430FB19\", \"M\" : [{\"H\":\"my_hub\", \"M\":\"broadcast\", \"A\" : [\"signal event\", 1]}] }",
- "{}"
- };
-
- call_number = std::min(call_number + 1, 2);
-
- return pplx::task_from_result(responses[call_number]);
- });
-
- std::shared_ptr writer(std::make_shared());
- auto hub_connection = create_hub_connection(websocket_client, writer, trace_level::info);
-
- auto on_broadcast_event = std::make_shared();
- hub_connection->on(_XPLATSTR("broadcast"), [on_broadcast_event](const json::value&)
- {
- on_broadcast_event->set();
- });
-
- hub_connection->start().get();
- ASSERT_FALSE(on_broadcast_event->wait(5000));
-
- auto memory_writer = std::dynamic_pointer_cast(writer);
- auto log_entries = memory_writer->get_log_entries();
- ASSERT_TRUE(log_entries.size() >= 1);
-
- ASSERT_EQ(_XPLATSTR("[info ] non-hub message received and will be discarded. message: {\"Name\":\"Test\"}\n"),
- remove_date_from_log_entry(log_entries[1]));
-}
-
TEST(invoke, invoke_creates_correct_payload)
{
utility::string_t payload;
@@ -523,7 +445,7 @@ TEST(invoke_void, invoke_logs_if_callback_for_given_id_not_found)
std::string responses[]
{
"{ }\x1e",
- "{\"I\":\"not tracked\"}\x1e",
+ "{ \"type\": 3, \"invocationId\": \"0\", \"error\": \"Ooops\" }\x1e"
"{}"
};
@@ -546,187 +468,192 @@ TEST(invoke_void, invoke_logs_if_callback_for_given_id_not_found)
auto log_entries = std::dynamic_pointer_cast(writer)->get_log_entries();
ASSERT_TRUE(log_entries.size() > 1);
- auto entry = remove_date_from_log_entry(log_entries[2]);
- ASSERT_EQ(_XPLATSTR("[info ] no callback found for id: not tracked\n"), entry);
+ auto entry = remove_date_from_log_entry(log_entries[1]);
+ ASSERT_EQ(_XPLATSTR("[info ] no callback found for id: 0\n"), entry);
}
-TEST(invoke_void, invoke_propagates_errors_from_server_as_exceptions)
-{
- auto callback_registered_event = std::make_shared();
+// TODO Flaky until hub_connection.start waits for handshake response
+//TEST(invoke_void, invoke_propagates_errors_from_server_as_exceptions)
+//{
+// auto callback_registered_event = std::make_shared();
+//
+// int call_number = -1;
+// auto websocket_client = create_test_websocket_client(
+// /* receive function */ [call_number, callback_registered_event]()
+// mutable {
+// std::string responses[]
+// {
+// "{ }\x1e",
+// "{ \"type\": 3, \"invocationId\": \"0\", \"error\": \"Ooops\" }\x1e"
+// "{}"
+// };
+//
+// call_number = std::min(call_number + 1, 2);
+//
+// if (call_number > 0)
+// {
+// callback_registered_event->wait();
+// }
+//
+// return pplx::task_from_result(responses[call_number]);
+// });
+//
+// auto hub_connection = create_hub_connection(websocket_client);
+// try
+// {
+// hub_connection->start()
+// .then([hub_connection, callback_registered_event]()
+// {
+// auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
+// callback_registered_event->set();
+// return t;
+// }).get();
+//
+// ASSERT_TRUE(false); // exception expected but not thrown
+// }
+// catch (const std::runtime_error& e)
+// {
+// ASSERT_STREQ("\"Ooops\"", e.what());
+// }
+//}
- int call_number = -1;
- auto websocket_client = create_test_websocket_client(
- /* receive function */ [call_number, callback_registered_event]()
- mutable {
- std::string responses[]
- {
- "{ }\x1e",
- "{\"I\":\"0\", \"E\" : \"Ooops\"}\x1e",
- "{}"
- };
+// TODO Flaky until hub_connection.start waits for handshake response
+//TEST(invoke_void, invoke_propagates_hub_errors_from_server_as_hub_exceptions)
+//{
+// auto callback_registered_event = std::make_shared();
+//
+// int call_number = -1;
+// auto websocket_client = create_test_websocket_client(
+// /* receive function */ [call_number, callback_registered_event]()
+// mutable {
+// std::string responses[]
+// {
+// "{ }\x1e",
+// "{ \"type\": 3, \"invocationId\": \"0\", \"error\": \"Ooops\" }\x1e"
+// "{}"
+// };
+//
+// call_number = std::min(call_number + 1, 2);
+//
+// if (call_number > 0)
+// {
+// callback_registered_event->wait();
+// }
+//
+// return pplx::task_from_result(responses[call_number]);
+// });
+//
+// auto hub_connection = create_hub_connection(websocket_client);
+// try
+// {
+// hub_connection->start()
+// .then([hub_connection, callback_registered_event]()
+// {
+// auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
+// callback_registered_event->set();
+// return t;
+// }).get();
+//
+// ASSERT_TRUE(false); // exception expected but not thrown
+// }
+// catch (const hub_exception& e)
+// {
+// ASSERT_STREQ("\"Ooops\"", e.what());
+// }
+//}
- call_number = std::min(call_number + 1, 2);
+// TODO Flaky until hub_connection.start waits for handshake response
+//TEST(invoke_void, invoke_creates_hub_exception_even_if_no_error_data)
+//{
+// auto callback_registered_event = std::make_shared();
+//
+// int call_number = -1;
+// auto websocket_client = create_test_websocket_client(
+// /* receive function */ [call_number, callback_registered_event]()
+// mutable {
+// std::string responses[]
+// {
+// "{ }\x1e",
+// "{ \"type\": 3, \"invocationId\": \"0\", \"error\": \"Ooops\" }\x1e"
+// "{}"
+// };
+//
+// call_number = std::min(call_number + 1, 2);
+//
+// if (call_number > 0)
+// {
+// callback_registered_event->wait();
+// }
+//
+// return pplx::task_from_result(responses[call_number]);
+// });
+//
+// auto hub_connection = create_hub_connection(websocket_client);
+// try
+// {
+// hub_connection->start()
+// .then([hub_connection, callback_registered_event]()
+// {
+// auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
+// callback_registered_event->set();
+// return t;
+// }).get();
+//
+// ASSERT_TRUE(false); // exception expected but not thrown
+// }
+// catch (const hub_exception& e)
+// {
+// ASSERT_STREQ("\"Ooops\"", e.what());
+// }
+//}
- if (call_number > 0)
- {
- callback_registered_event->wait();
- }
-
- return pplx::task_from_result(responses[call_number]);
- });
-
- auto hub_connection = create_hub_connection(websocket_client);
- try
- {
- hub_connection->start()
- .then([hub_connection, callback_registered_event]()
- {
- auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
- callback_registered_event->set();
- return t;
- }).get();
-
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const std::runtime_error& e)
- {
- ASSERT_STREQ("\"Ooops\"", e.what());
- }
-}
-
-TEST(invoke_void, invoke_propagates_hub_errors_from_server_as_hub_exceptions)
-{
- auto callback_registered_event = std::make_shared();
-
- int call_number = -1;
- auto websocket_client = create_test_websocket_client(
- /* receive function */ [call_number, callback_registered_event]()
- mutable {
- std::string responses[]
- {
- "{ }\x1e",
- "{\"I\":\"0\", \"E\" : \"Ooops\", \"H\": true, \"D\": { \"ErrorNumber\" : 42 }}\x1e",
- "{}"
- };
-
- call_number = std::min(call_number + 1, 2);
-
- if (call_number > 0)
- {
- callback_registered_event->wait();
- }
-
- return pplx::task_from_result(responses[call_number]);
- });
-
- auto hub_connection = create_hub_connection(websocket_client);
- try
- {
- hub_connection->start()
- .then([hub_connection, callback_registered_event]()
- {
- auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
- callback_registered_event->set();
- return t;
- }).get();
-
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const hub_exception& e)
- {
- ASSERT_STREQ("\"Ooops\"", e.what());
- }
-}
-
-TEST(invoke_void, invoke_creates_hub_exception_even_if_no_error_data)
-{
- auto callback_registered_event = std::make_shared();
-
- int call_number = -1;
- auto websocket_client = create_test_websocket_client(
- /* receive function */ [call_number, callback_registered_event]()
- mutable {
- std::string responses[]
- {
- "{ }\x1e",
- "{\"I\":\"0\", \"E\" : \"Ooops\", \"H\": true }\x1e",
- "{}"
- };
-
- call_number = std::min(call_number + 1, 2);
-
- if (call_number > 0)
- {
- callback_registered_event->wait();
- }
-
- return pplx::task_from_result(responses[call_number]);
- });
-
- auto hub_connection = create_hub_connection(websocket_client);
- try
- {
- hub_connection->start()
- .then([hub_connection, callback_registered_event]()
- {
- auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
- callback_registered_event->set();
- return t;
- }).get();
-
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const hub_exception& e)
- {
- ASSERT_STREQ("\"Ooops\"", e.what());
- }
-}
-
-TEST(invoke_void, invoke_creates_runtime_error_when_hub_exception_indicator_false)
-{
- auto callback_registered_event = std::make_shared();
-
- int call_number = -1;
- auto websocket_client = create_test_websocket_client(
- /* receive function */ [call_number, callback_registered_event]()
- mutable {
- std::string responses[]
- {
- "{ }\x1e",
- "{\"I\":\"0\", \"E\" : \"Ooops\", \"H\": false }\x1e",
- "{}"
- };
-
- call_number = std::min(call_number + 1, 2);
-
- if (call_number > 0)
- {
- callback_registered_event->wait();
- }
-
- return pplx::task_from_result(responses[call_number]);
- });
-
- auto hub_connection = create_hub_connection(websocket_client);
- try
- {
- hub_connection->start()
- .then([hub_connection, callback_registered_event]()
- {
- auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
- callback_registered_event->set();
- return t;
- }).get();
-
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const signalr_exception& e)
- {
- ASSERT_STREQ("\"Ooops\"", e.what());
- ASSERT_TRUE(dynamic_cast(&e) == nullptr);
- }
-}
+// TODO Flaky until hub_connection.start waits for handshake response
+//TEST(invoke_void, invoke_creates_runtime_error_when_hub_exception_indicator_false)
+//{
+// auto callback_registered_event = std::make_shared();
+//
+// int call_number = -1;
+// auto websocket_client = create_test_websocket_client(
+// /* receive function */ [call_number, callback_registered_event]()
+// mutable {
+// std::string responses[]
+// {
+// "{ }\x1e",
+// "{ \"type\": 3, \"invocationId\": \"0\", \"error\": \"Ooops\" }\x1e"
+// "{}"
+// };
+//
+// call_number = std::min(call_number + 1, 2);
+//
+// if (call_number > 0)
+// {
+// callback_registered_event->wait();
+// }
+//
+// return pplx::task_from_result(responses[call_number]);
+// });
+//
+// auto hub_connection = create_hub_connection(websocket_client);
+// try
+// {
+// hub_connection->start()
+// .then([hub_connection, callback_registered_event]()
+// {
+// auto t = hub_connection->invoke_void(_XPLATSTR("method"), json::value::array());
+// callback_registered_event->set();
+// return t;
+// }).get();
+//
+// ASSERT_TRUE(false); // exception expected but not thrown
+// }
+// catch (const signalr_exception& e)
+// {
+// ASSERT_STREQ("\"Ooops\"", e.what());
+// ASSERT_TRUE(dynamic_cast(&e) == nullptr);
+// }
+//}
+// TODO Flaky until hub_connection.start waits for handshake response
//TEST(invoke_void, invoke_creates_runtime_error)
//{
// auto callback_registered_event = std::make_shared();
@@ -786,3 +713,84 @@ TEST(connection_id, can_get_connection_id)
ASSERT_EQ(_XPLATSTR("f7707523-307d-4cba-9abf-3eef701241e8"), connection_id);
ASSERT_EQ(_XPLATSTR("f7707523-307d-4cba-9abf-3eef701241e8"), hub_connection->get_connection_id());
}
+
+TEST(on, event_name_must_not_be_empty_string)
+{
+ auto hub_connection = create_hub_connection();
+ try
+ {
+ hub_connection->on(_XPLATSTR(""), [](const json::value&) {});
+
+ ASSERT_TRUE(false); // exception expected but not thrown
+ }
+ catch (const std::invalid_argument& e)
+ {
+ ASSERT_STREQ("event_name cannot be empty", e.what());
+ }
+}
+
+TEST(on, cannot_register_multiple_handlers_for_event)
+{
+ auto hub_connection = create_hub_connection();
+ hub_connection->on(_XPLATSTR("ping"), [](const json::value&) {});
+
+ try
+ {
+ hub_connection->on(_XPLATSTR("ping"), [](const json::value&) {});
+ ASSERT_TRUE(false); // exception expected but not thrown
+ }
+ catch (const signalr_exception& e)
+ {
+ ASSERT_STREQ("an action for this event has already been registered. event name: ping", e.what());
+ }
+}
+
+TEST(on, cannot_register_handler_if_connection_not_in_disconnected_state)
+{
+ try
+ {
+ auto websocket_client = create_test_websocket_client(
+ /* receive function */ []() { return pplx::task_from_result(std::string("{ }\x1e")); });
+ auto hub_connection = create_hub_connection(websocket_client);
+
+ hub_connection->start().get();
+
+ hub_connection->on(_XPLATSTR("myfunc"), [](const web::json::value&) {});
+
+ ASSERT_TRUE(false); // exception expected but not thrown
+ }
+ catch (const signalr_exception& e)
+ {
+ ASSERT_STREQ("can't register a handler if the connection is in a disconnected state", e.what());
+ }
+}
+
+TEST(invoke_json, invoke_throws_when_the_underlying_connection_is_not_valid)
+{
+ auto hub_connection = create_hub_connection();
+
+ try
+ {
+ hub_connection->invoke_json(_XPLATSTR("method"), json::value::array()).get();
+ ASSERT_TRUE(true); // exception expected but not thrown
+ }
+ catch (const signalr_exception& e)
+ {
+ ASSERT_STREQ("cannot send data when the connection is not in the connected state. current connection state: disconnected", e.what());
+ }
+}
+
+TEST(invoke_void, send_throws_when_the_underlying_connection_is_not_valid)
+{
+ auto hub_connection = create_hub_connection();
+
+ try
+ {
+ hub_connection->invoke_void(_XPLATSTR("method"), json::value::array()).get();
+ ASSERT_TRUE(true); // exception expected but not thrown
+ }
+ catch (const signalr_exception& e)
+ {
+ ASSERT_STREQ("cannot send data when the connection is not in the connected state. current connection state: disconnected", e.what());
+ }
+}
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/internal_hub_proxy_tests.cpp b/src/SignalR/clients/cpp/test/signalrclienttests/internal_hub_proxy_tests.cpp
deleted file mode 100644
index 11f1641e49..0000000000
--- a/src/SignalR/clients/cpp/test/signalrclienttests/internal_hub_proxy_tests.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-#include "stdafx.h"
-#include "trace_log_writer.h"
-#include "test_utils.h"
-#include "memory_log_writer.h"
-#include "test_transport_factory.h"
-#include "hub_connection_impl.h"
-#include "signalrclient/signalr_exception.h"
-#include "signalrclient/hub_connection.h"
-
-using namespace signalr;
-
-TEST(on, event_name_must_not_be_empty_string)
-{
- hub_connection hub_connection{ _XPLATSTR("") };
- try
- {
- hub_connection.on(_XPLATSTR(""), [](const json::value&){});
-
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const std::invalid_argument& e)
- {
- ASSERT_STREQ("event_name cannot be empty", e.what());
- }
-}
-
-TEST(on, cannot_register_multiple_handlers_for_event)
-{
- hub_connection hub_connection{ _XPLATSTR("") };
- hub_connection.on(_XPLATSTR("ping"), [](const json::value&){});
-
- try
- {
- hub_connection.on(_XPLATSTR("ping"), [](const json::value&){});
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const signalr_exception& e)
- {
- ASSERT_STREQ("an action for this event has already been registered. event name: ping", e.what());
- }
-}
-
-TEST(on, cannot_register_handler_if_connection_not_in_disconnected_state)
-{
- try
- {
- auto websocket_client = create_test_websocket_client(
- /* receive function */ []() { return pplx::task_from_result(std::string("{ }\x1e")); });
- auto hub_connection = hub_connection_impl::create(_XPLATSTR("http://fakeuri"), _XPLATSTR(""), trace_level::all,
- std::make_shared(), create_test_web_request_factory(),
- std::make_unique(websocket_client));
-
- hub_connection->start().get();
-
- hub_connection->on(_XPLATSTR("myfunc"), [](const web::json::value&){});
-
- ASSERT_TRUE(false); // exception expected but not thrown
- }
- catch (const signalr_exception& e)
- {
- ASSERT_STREQ("can't register a handler if the connection is in a disconnected state", e.what());
- }
-}
-
-//TEST(invoke_event, invoke_event_invokes_event_and_passes_arguments)
-//{
-// const auto payload = _XPLATSTR("{\"Contents\":\"My message\"}");
-//
-// hub_connection hub_connection{ _XPLATSTR("") };
-//
-// auto handler_invoked = false;
-// hub_connection.on(_XPLATSTR("message"), [&handler_invoked, payload](const json::value& arguments)
-// {
-// handler_invoked = true;
-// ASSERT_EQ(payload, arguments.serialize());
-// });
-//
-// hub_connection.invoke_event(_XPLATSTR("message"), json::value::parse(payload));
-//
-// ASSERT_TRUE(handler_invoked);
-//}
-
-//TEST(invoke_event, logs_if_no_handler_for_an_event)
-//{
-// std::shared_ptr writer(std::make_shared());
-// internal_hub_proxy hub_proxy{ std::weak_ptr(), _XPLATSTR("hub"),
-// logger{ writer, trace_level::info } };
-// hub_proxy.invoke_event(_XPLATSTR("message"), json::value::parse(_XPLATSTR("{}")));
-//
-// auto log_entries = std::dynamic_pointer_cast(writer)->get_log_entries();
-// ASSERT_FALSE(log_entries.empty());
-// auto entry = remove_date_from_log_entry(log_entries[0]);
-// ASSERT_EQ(_XPLATSTR("[info ] no handler found for event. hub name: hub, event name: message\n"), entry);
-//}
-
-TEST(invoke_json, invoke_throws_when_the_underlying_connection_is_not_valid)
-{
- hub_connection hub_connection{ _XPLATSTR("") };
-
- try
- {
- hub_connection.invoke(_XPLATSTR("method")).get();
- ASSERT_TRUE(true); // exception expected but not thrown
- }
- catch (const signalr_exception& e)
- {
- ASSERT_STREQ("the connection for which this hub proxy was created is no longer valid - it was either destroyed or went out of scope", e.what());
- }
-}
-
-TEST(invoke_void, send_throws_when_the_underlying_connection_is_not_valid)
-{
- hub_connection hub_connection{ _XPLATSTR("") };
-
- try
- {
- hub_connection.send(_XPLATSTR("method")).get();
- ASSERT_TRUE(true); // exception expected but not thrown
- }
- catch (const signalr_exception& e)
- {
- ASSERT_STREQ("the connection for which this hub proxy was created is no longer valid - it was either destroyed or went out of scope", e.what());
- }
-}
diff --git a/src/SignalR/clients/cpp/test/signalrclienttests/url_builder_tests.cpp b/src/SignalR/clients/cpp/test/signalrclienttests/url_builder_tests.cpp
index d15ce32a56..37e25254dd 100644
--- a/src/SignalR/clients/cpp/test/signalrclienttests/url_builder_tests.cpp
+++ b/src/SignalR/clients/cpp/test/signalrclienttests/url_builder_tests.cpp
@@ -6,196 +6,23 @@
using namespace signalr;
-//TEST(url_builder_negotiate, url_correct_if_query_string_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/negotiate")),
-// url_builder::build_negotiate(web::uri{ _XPLATSTR("http://fake/") }, _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_negotiate, url_correct_if_query_string_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/negotiate?q1=1&q2=2")),
-// url_builder::build_negotiate(web::uri{ _XPLATSTR("http://fake/signalr/") }, _XPLATSTR("q1=1&q2=2")));
-//}
-//
-//TEST(url_builder_negotiate, url_correct_if_connection_data_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D")),
-// url_builder::build_negotiate(web::uri{ _XPLATSTR("http://fake/signalr/") }, _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_connect_webSockets, url_correct_if_query_string_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/?q1=1&q2=2")),
-// url_builder::build_connect(web::uri{ _XPLATSTR("http://fake/") }, transport_type::websockets, _XPLATSTR("q1=1&q2=2")));
-//}
-//
-//TEST(url_builder_reconnect_longPolling, url_correct_if_query_string_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_reconnect_longPolling, url_correct_if_query_string_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("q1=1&q2=2")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("&q1=1&q2=2")));
-//}
-//
-//TEST(url_builder_reconnect_webSockets, url_correct_if_query_string_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("wss://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("https://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_reconnect_webSockets, url_correct_if_query_string_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("q1=1&q2=2")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("&q1=1&q2=2")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("wss://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("https://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("q1=1&q2=2")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("wss://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("https://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("&q1=1&q2=2")));
-//}
-//
-//TEST(url_builder_reconnect, url_correct_if_connection_data_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets, _XPLATSTR(""), _XPLATSTR(""), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_reconnect, url_correct_if_last_message_id_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D&messageId=L45T%20M355463_1D")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR("L45T M355463_1D"), _XPLATSTR(""), _XPLATSTR("")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D&messageId=L45T%20M355463_1D")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection token"), _XPLATSTR("L45T M355463_1D"), _XPLATSTR(""), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_reconnect, url_correct_if_groups_token_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D&groupsToken=G%207")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR(""), _XPLATSTR("G 7"), _XPLATSTR("")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D&groupsToken=G%207")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection token"), _XPLATSTR(""), _XPLATSTR("G 7"), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_reconnect, query_string_added_after_message_id_and_groups_token)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/reconnect?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D&messageId=L45T_M355463_1D&groupsToken=G7&X")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR("L45T_M355463_1D"), _XPLATSTR("G7"), _XPLATSTR("X")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("ws://fake/signalr/reconnect?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D&messageId=L45T_M355463_1D&groupsToken=G7&X")),
-// url_builder::build_reconnect(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection token"), _XPLATSTR("L45T_M355463_1D"), _XPLATSTR("G7"), _XPLATSTR("X")));
-//}
-//
-//TEST(url_builder_start, url_correct_if_query_string_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/start?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_start(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR("")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/start?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_start(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection token"), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_start, url_correct_if_query_string_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/start?transport=longPolling&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_start(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection-token"), _XPLATSTR("q1=1&q2=2")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/start?transport=webSockets&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_start(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection-token"), _XPLATSTR("&q1=1&q2=2")));
-//}
-//
-//TEST(url_builder_start, url_correct_if_connection_data_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/start?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D")),
-// url_builder::build_start(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_abort, url_correct_if_query_string_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/abort?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_abort(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR("")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/abort?transport=webSockets&clientProtocol=1.4&connectionToken=connection%20token")),
-// url_builder::build_abort(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection token"), _XPLATSTR("")));
-//}
-//
-//TEST(url_builder_abort, url_correct_if_query_string_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/abort?transport=longPolling&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_abort(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection-token"), _XPLATSTR("q1=1&q2=2")));
-//
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/abort?transport=webSockets&clientProtocol=1.4&connectionToken=connection-token&q1=1&q2=2")),
-// url_builder::build_abort(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::websockets,
-// _XPLATSTR("connection-token"), _XPLATSTR("&q1=1&q2=2")));
-//}
-//
-//TEST(url_builder_abort, url_correct_if_connection_data_not_empty)
-//{
-// ASSERT_EQ(
-// web::uri(_XPLATSTR("http://fake/signalr/abort?transport=longPolling&clientProtocol=1.4&connectionToken=connection%20token&connectionData=%5B%7B%22Name%22:%22ChatHub%22%7D%5D")),
-// url_builder::build_abort(web::uri{ _XPLATSTR("http://fake/signalr/") }, transport_type::long_polling,
-// _XPLATSTR("connection token"), _XPLATSTR("")));
-//}
\ No newline at end of file
+TEST(url_builder_negotiate, url_correct_if_query_string_empty)
+{
+ ASSERT_EQ(
+ web::uri(_XPLATSTR("http://fake/negotiate")),
+ url_builder::build_negotiate(web::uri{ _XPLATSTR("http://fake/") }, _XPLATSTR("")));
+}
+
+TEST(url_builder_negotiate, url_correct_if_query_string_not_empty)
+{
+ ASSERT_EQ(
+ web::uri(_XPLATSTR("http://fake/negotiate?q1=1&q2=2")),
+ url_builder::build_negotiate(web::uri{ _XPLATSTR("http://fake/") }, _XPLATSTR("q1=1&q2=2")));
+}
+
+TEST(url_builder_connect_webSockets, url_correct_if_query_string_not_empty)
+{
+ ASSERT_EQ(
+ web::uri(_XPLATSTR("ws://fake/?q1=1&q2=2")),
+ url_builder::build_connect(web::uri{ _XPLATSTR("http://fake/") }, transport_type::websockets, _XPLATSTR("q1=1&q2=2")));
+}