diff --git a/3FD.sln b/3FD.sln
index 6cafe82..3ab36f4 100644
--- a/3FD.sln
+++ b/3FD.sln
@@ -57,7 +57,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IntegrationTestsApp.WinRT.W
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IntegrationTestsApp.WinRT.WindowsPhone", "IntegrationTestsApp.WinRT\IntegrationTestsApp.WinRT.WindowsPhone\IntegrationTestsApp.WinRT.WindowsPhone.vcxproj", "{CEB9F9FD-5E2A-49FB-AC14-2DEF01DC80B8}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestClient", "TestClient\TestClient.vcxproj", "{6ADF3A4B-1E22-41BA-9293-96593E6A45BE}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestRpcClient", "TestRpcClient\TestRpcClient.vcxproj", "{6ADF3A4B-1E22-41BA-9293-96593E6A45BE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestWwsClient", "TestWwsClient\TestWwsClient.vcxproj", "{4913E097-136E-4BC4-BF8C-D3341FB1425A}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
@@ -291,6 +293,20 @@ Global
{6ADF3A4B-1E22-41BA-9293-96593E6A45BE}.Release|Win32.Build.0 = Release|Win32
{6ADF3A4B-1E22-41BA-9293-96593E6A45BE}.Release|x64.ActiveCfg = Release|x64
{6ADF3A4B-1E22-41BA-9293-96593E6A45BE}.Release|x64.Build.0 = Release|x64
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|ARM.ActiveCfg = Debug|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|Win32.Build.0 = Debug|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|x64.ActiveCfg = Debug|x64
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Debug|x64.Build.0 = Debug|x64
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|ARM.ActiveCfg = Release|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|Win32.ActiveCfg = Release|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|Win32.Build.0 = Release|Win32
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|x64.ActiveCfg = Release|x64
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -315,6 +331,7 @@ Global
{09ED5B36-D345-4D62-9F01-DC41168BCB35} = {35A12F43-25FF-406A-8CCF-B203F688A791}
{CEB9F9FD-5E2A-49FB-AC14-2DEF01DC80B8} = {35A12F43-25FF-406A-8CCF-B203F688A791}
{6ADF3A4B-1E22-41BA-9293-96593E6A45BE} = {8E00B911-43B2-49D5-9B4A-AB6E1ED097A1}
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A} = {8E00B911-43B2-49D5-9B4A-AB6E1ED097A1}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
VisualSVNWorkingCopyRoot = .
diff --git a/IntegrationTests/IntegrationTests.vcxproj b/IntegrationTests/IntegrationTests.vcxproj
index a2ab4a5..adf7c71 100644
--- a/IntegrationTests/IntegrationTests.vcxproj
+++ b/IntegrationTests/IntegrationTests.vcxproj
@@ -107,7 +107,7 @@
copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
-copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
+copy "$(SolutionDir)TestShared\calculator.wsdl" "$(TargetDir)"
@@ -127,7 +127,7 @@ copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
-copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
+copy "$(SolutionDir)TestShared\calculator.wsdl" "$(TargetDir)"
@@ -151,7 +151,7 @@ copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
-copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
+copy "$(SolutionDir)TestShared\calculator.wsdl" "$(TargetDir)"
@@ -175,7 +175,7 @@ copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
-copy "$(ProjectDir)calculator.wsdl" "$(TargetDir)"
+copy "$(SolutionDir)TestShared\calculator.wsdl" "$(TargetDir)"
diff --git a/IntegrationTests/tests_rpc.cpp b/IntegrationTests/tests_rpc.cpp
index b70ba5a..211ca8c 100644
--- a/IntegrationTests/tests_rpc.cpp
+++ b/IntegrationTests/tests_rpc.cpp
@@ -220,7 +220,7 @@ namespace integration_tests
auto shutdownTimeSpan = duration_cast(
now - startTimeForSrvShutdown
- );
+ );
if (shutdownTimeSpan > maxTimeSpanForSrvShutdown)
maxTimeSpanForSrvShutdown = shutdownTimeSpan;
@@ -246,12 +246,15 @@ namespace integration_tests
///
static uint32_t GetMaxCycleTime()
{
- auto maxCycleTime = static_cast (
- maxTimeSpanForSrvShutdown.count()
- + maxTimeSpanForSrvSetupAndStart.count()
- );
-
- return maxCycleTime > 0 ? maxCycleTime : 32U;
+ auto maxCycleTime =
+ maxTimeSpanForSrvShutdown.count() +
+ maxTimeSpanForSrvSetupAndStart.count();
+
+ /* In practice, measured time must be linearly augmented
+ for adjustment (using field data), because apparently the
+ server takes longer to be available, which is a little
+ after RpcServer::Start returns... */
+ return maxCycleTime > 0 ? static_cast (100 + 1.2 * maxCycleTime) : 150;
}
};
@@ -325,6 +328,58 @@ namespace integration_tests
}
}
+ class Framework_RpcNoAuth2_TestCase : public ::testing::Test {};
+
+ ///
+ /// Tests the RPC server normal operation (responding requests), trying
+ /// several combinations of protocol sequence and authentication level.
+ ///
+ TEST_F(Framework_RpcNoAuth2_TestCase, ServerRun_ResponseTest)
+ {
+ // Ensures proper initialization/finalization of the framework
+ FrameworkInstance _framework;
+
+ CALL_STACK_TRACE;
+
+ try
+ {
+ // Initialize the RPC server (resource allocation takes place)
+ RpcServer::Initialize(ProtocolSequence::Local, "TestClient3FD");
+
+ // RPC interface implementation 1:
+ AcmeTesting_v1_0_epv_t intfImplFuncTable1 = { Operate, ChangeCase, WriteOnStorage, Shutdown };
+
+ // RPC interface implementation 2:
+ AcmeTesting_v1_0_epv_t intfImplFuncTable2 = { Operate2, ChangeCase2, WriteOnStorage, Shutdown };
+
+ std::vector objects;
+ objects.reserve(2);
+
+ // This object will run impl 1:
+ objects.emplace_back(
+ objectsUuidsImpl1[5],
+ AcmeTesting_v1_0_s_ifspec, // this is the interface (generated from IDL)
+ &intfImplFuncTable1
+ );
+
+ // This object will run impl 2:
+ objects.emplace_back(
+ objectsUuidsImpl2[5],
+ AcmeTesting_v1_0_s_ifspec, // this is the interface (generated from IDL)
+ &intfImplFuncTable2
+ );
+
+ EXPECT_EQ(STATUS_OKAY, RpcServer::Start(objects));
+ EXPECT_EQ(STATUS_OKAY, RpcServer::Wait());
+ EXPECT_EQ(STATUS_OKAY, RpcServer::Finalize());
+ }
+ catch (...)
+ {
+ RpcServer::Finalize();
+ HandleException();
+ }
+ }
+
// The set of options for some test template instantiations
struct AuthnTestOptions
{
@@ -418,13 +473,15 @@ namespace integration_tests
)
);
- class Framework_RpcNoAuth2_TestCase : public ::testing::Test {};
+ class Framework_RpcAuthn2_TestCase :
+ public ::testing::TestWithParam {};
///
/// Tests the RPC server normal operation (responding requests), trying
- /// several combinations of protocol sequence and authentication level.
+ /// several combinations of protocol sequence and authentication level
+ /// using Microsoft NTLM/Negotiate/Kerberos SSP's.
///
- TEST_F(Framework_RpcNoAuth2_TestCase, ServerRun_ResponseTest)
+ TEST_P(Framework_RpcAuthn2_TestCase, ServerRun_ResponseTest)
{
// Ensures proper initialization/finalization of the framework
FrameworkInstance _framework;
@@ -433,8 +490,12 @@ namespace integration_tests
try
{
- // Initialize the RPC server (resource allocation takes place)
- RpcServer::Initialize(ProtocolSequence::Local, "TestClient3FD");
+ // Initialize the RPC server (authn svc reg & resource allocation takes place)
+ RpcServer::Initialize(
+ GetParam().protocolSequence,
+ "TestClient3FD",
+ GetParam().authenticationLevel
+ );
// RPC interface implementation 1:
AcmeTesting_v1_0_epv_t intfImplFuncTable1 = { Operate, ChangeCase, WriteOnStorage, Shutdown };
@@ -447,14 +508,14 @@ namespace integration_tests
// This object will run impl 1:
objects.emplace_back(
- objectsUuidsImpl1[5],
+ GetParam().objectUUID1,
AcmeTesting_v1_0_s_ifspec, // this is the interface (generated from IDL)
&intfImplFuncTable1
);
// This object will run impl 2:
objects.emplace_back(
- objectsUuidsImpl2[5],
+ GetParam().objectUUID2,
AcmeTesting_v1_0_s_ifspec, // this is the interface (generated from IDL)
&intfImplFuncTable2
);
@@ -470,15 +531,42 @@ namespace integration_tests
}
}
- class Framework_RpcAuthn2_TestCase :
- public ::testing::TestWithParam {};
+ /* Implementation of test template takes care of switching
+ protocol sequences and authentication level: */
+ INSTANTIATE_TEST_CASE_P(
+ SwitchProtAndAuthLevel,
+ Framework_RpcAuthn2_TestCase,
+ ::testing::Values(
+ AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[6], objectsUuidsImpl2[6], AuthenticationLevel::Integrity },
+ AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[7], objectsUuidsImpl2[7], AuthenticationLevel::Privacy },
+ AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[8], objectsUuidsImpl2[8], AuthenticationLevel::Integrity },
+ AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[9], objectsUuidsImpl2[9], AuthenticationLevel::Privacy }
+ /*,
+ AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[10], objectsUuidsImpl2[10], AuthenticationLevel::Integrity },
+ AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[11], objectsUuidsImpl2[11], AuthenticationLevel::Privacy },
+ */
+ /*
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[6], objectsUuidsImpl2[6], AuthenticationLevel::Integrity },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[7], objectsUuidsImpl2[7], AuthenticationLevel::Privacy },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[8], objectsUuidsImpl2[8], AuthenticationLevel::Integrity },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[9], objectsUuidsImpl2[9], AuthenticationLevel::Privacy }
+ */
+ /*,
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[10], objectsUuidsImpl2[10], AuthenticationLevel::Integrity },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[11], objectsUuidsImpl2[11], AuthenticationLevel::Privacy }
+ */
+ )
+ );
+
+ class Framework_RpcSchannel_TestCase :
+ public ::testing::TestWithParam {};
///
- /// Tests the RPC server normal operation (responding requests), trying
- /// several combinations of protocol sequence and authentication level
- /// using Microsoft NTLM/Negotiate/Kerberos SSP's.
+ /// Tests the cycle init/start/stop/resume/stop/finalize of the RPC server,
+ /// for several combinations of protocol sequence and authentication level
+ /// using Schannel SSP.
///
- TEST_P(Framework_RpcAuthn2_TestCase, ServerRun_ResponseTest)
+ TEST_P(Framework_RpcSchannel_TestCase, ServerRun_StatesCycleTest)
{
// Ensures proper initialization/finalization of the framework
FrameworkInstance _framework;
@@ -487,10 +575,17 @@ namespace integration_tests
try
{
- // Initialize the RPC server (authn svc reg & resource allocation takes place)
+ CertInfo certInfo(
+ CERT_SYSTEM_STORE_LOCAL_MACHINE,
+ "My",
+ "MySelfSignedCert4DevTestsServer",
+ GetParam().useStrongSec
+ );
+
+ // Initialize the RPC server (resource allocation takes place)
RpcServer::Initialize(
- GetParam().protocolSequence,
"TestClient3FD",
+ &certInfo,
GetParam().authenticationLevel
);
@@ -517,9 +612,21 @@ namespace integration_tests
&intfImplFuncTable2
);
+ // Now cycle through the states:
+
EXPECT_EQ(STATUS_OKAY, RpcServer::Start(objects));
- EXPECT_EQ(STATUS_OKAY, RpcServer::Wait());
+ RpcTestTimer::StopTimeCountServerSetupAndStart();
+
+ EXPECT_EQ(STATUS_OKAY, RpcServer::Stop());
+ EXPECT_EQ(STATUS_OKAY, RpcServer::Resume());
+
+ RpcTestTimer::StartTimeCountServerShutdown();
+
+ // Upon finalization (shutdown), resources will be released:
+ EXPECT_EQ(STATUS_OKAY, RpcServer::Stop());
EXPECT_EQ(STATUS_OKAY, RpcServer::Finalize());
+
+ RpcTestTimer::StopTimeCountServerShutdown();
}
catch (...)
{
@@ -532,39 +639,16 @@ namespace integration_tests
protocol sequences and authentication level: */
INSTANTIATE_TEST_CASE_P(
SwitchProtAndAuthLevel,
- Framework_RpcAuthn2_TestCase,
+ Framework_RpcSchannel_TestCase,
::testing::Values(
- AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[6], objectsUuidsImpl2[6], AuthenticationLevel::Integrity },
- AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[7], objectsUuidsImpl2[7], AuthenticationLevel::Privacy },
- AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[8], objectsUuidsImpl2[8], AuthenticationLevel::Integrity },
- AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[9], objectsUuidsImpl2[9], AuthenticationLevel::Privacy }
- /*,
- AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[10], objectsUuidsImpl2[10], AuthenticationLevel::Integrity },
- AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[11], objectsUuidsImpl2[11], AuthenticationLevel::Privacy },
- */
- /*
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[6], objectsUuidsImpl2[6], AuthenticationLevel::Integrity },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[7], objectsUuidsImpl2[7], AuthenticationLevel::Privacy },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[8], objectsUuidsImpl2[8], AuthenticationLevel::Integrity },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[9], objectsUuidsImpl2[9], AuthenticationLevel::Privacy }
- */
- /*,
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[10], objectsUuidsImpl2[10], AuthenticationLevel::Integrity },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[11], objectsUuidsImpl2[11], AuthenticationLevel::Privacy }
- */
+ SchannelTestOptions{ objectsUuidsImpl1[12], objectsUuidsImpl2[12], AuthenticationLevel::Privacy, false },
+ SchannelTestOptions{ objectsUuidsImpl1[13], objectsUuidsImpl2[13], AuthenticationLevel::Privacy, true },
+ SchannelTestOptions{ objectsUuidsImpl1[14], objectsUuidsImpl2[14], AuthenticationLevel::Integrity, false },
+ SchannelTestOptions{ objectsUuidsImpl1[15], objectsUuidsImpl2[15], AuthenticationLevel::Integrity, true }
)
);
- // The set of options for some test template instantiations
- struct SchannelTestOptions
- {
- const char *objectUUID1;
- const char *objectUUID2;
- AuthenticationLevel authenticationLevel;
- bool useStrongSec;
- };
-
- class Framework_RpcSchannel_TestCase :
+ class Framework_RpcSchannel2_TestCase :
public ::testing::TestWithParam {};
///
@@ -572,7 +656,7 @@ namespace integration_tests
/// several combinations of protocol sequence and authentication level
/// using Schannel SSP.
///
- TEST_P(Framework_RpcSchannel_TestCase, ServerRun_Schannel_ResponseTest)
+ TEST_P(Framework_RpcSchannel2_TestCase, ServerRun_ResponseTest)
{
// Ensures proper initialization/finalization of the framework
FrameworkInstance _framework;
@@ -629,18 +713,13 @@ namespace integration_tests
}
}
- /* Implementation of test template takes care of switching
- protocol sequences and authentication level: */
+ // Implementation of test template takes care of switching parameters:
INSTANTIATE_TEST_CASE_P(
SwitchProtAndAuthLevel,
- Framework_RpcSchannel_TestCase,
- ::testing::Values(
- SchannelTestOptions{ objectsUuidsImpl1[12], objectsUuidsImpl2[12], AuthenticationLevel::Privacy, false },
- SchannelTestOptions{ objectsUuidsImpl1[13], objectsUuidsImpl2[13], AuthenticationLevel::Privacy, true },
- SchannelTestOptions{ objectsUuidsImpl1[14], objectsUuidsImpl2[14], AuthenticationLevel::Integrity, false },
- SchannelTestOptions{ objectsUuidsImpl1[15], objectsUuidsImpl2[15], AuthenticationLevel::Integrity, true }
- )
+ Framework_RpcSchannel2_TestCase,
+ paramsForSchannelTests // shared by both client & server side
);
+
}// end of namespace integration_tests
}// end of namespace _3fd
diff --git a/IntegrationTests/tests_wws.cpp b/IntegrationTests/tests_wws.cpp
index 9bb97b7..5579d75 100644
--- a/IntegrationTests/tests_wws.cpp
+++ b/IntegrationTests/tests_wws.cpp
@@ -174,7 +174,16 @@ namespace integration_tests
///
static uint32_t GetMaxCycleTime()
{
- return static_cast (maxTimeSpanForSvcCycle.count());
+ if (maxTimeSpanForSvcCycle.count() > 0)
+ {
+ /* In practice, measured time must be proportionally
+ augmented for adjustment (using field data), because
+ apparently the server takes longer to be available,
+ which is a little after WebServiceHost::Open returns... */
+ return static_cast (maxTimeSpanForSvcCycle.count() * 4);
+ }
+
+ return 500U;
}
///
diff --git a/MidlCompileRpcTestIDL.bat b/MidlCompileRpcTestIDL.bat
index f60703e..4c008d1 100644
--- a/MidlCompileRpcTestIDL.bat
+++ b/MidlCompileRpcTestIDL.bat
@@ -4,6 +4,6 @@ midl /Oicf /osf /use_epv /win32 /client none /out IntegrationTests /h AcmeTestin
midl /Oicf /osf /use_epv /amd64 /client none /out IntegrationTests /h AcmeTesting_x64.h /sstub AcmeTesting_x64_srv.c TestShared\AcmeTesting.idl
-midl /Oicf /osf /use_epv /win32 /server none /out TestClient /h AcmeTesting_w32.h /cstub AcmeTesting_w32_cli.c TestShared\AcmeTesting.idl
+midl /Oicf /osf /use_epv /win32 /server none /out TestRpcClient /h AcmeTesting_w32.h /cstub AcmeTesting_w32_cli.c TestShared\AcmeTesting.idl
-midl /Oicf /osf /use_epv /amd64 /server none /out TestClient /h AcmeTesting_x64.h /cstub AcmeTesting_x64_cli.c TestShared\AcmeTesting.idl
+midl /Oicf /osf /use_epv /amd64 /server none /out TestRpcClient /h AcmeTesting_x64.h /cstub AcmeTesting_x64_cli.c TestShared\AcmeTesting.idl
diff --git a/TestClient/AcmeTesting_w32.h b/TestRpcClient/AcmeTesting_w32.h
similarity index 100%
rename from TestClient/AcmeTesting_w32.h
rename to TestRpcClient/AcmeTesting_w32.h
diff --git a/TestClient/AcmeTesting_w32_cli.c b/TestRpcClient/AcmeTesting_w32_cli.c
similarity index 100%
rename from TestClient/AcmeTesting_w32_cli.c
rename to TestRpcClient/AcmeTesting_w32_cli.c
diff --git a/TestClient/AcmeTesting_x64.h b/TestRpcClient/AcmeTesting_x64.h
similarity index 100%
rename from TestClient/AcmeTesting_x64.h
rename to TestRpcClient/AcmeTesting_x64.h
diff --git a/TestClient/AcmeTesting_x64_cli.c b/TestRpcClient/AcmeTesting_x64_cli.c
similarity index 100%
rename from TestClient/AcmeTesting_x64_cli.c
rename to TestRpcClient/AcmeTesting_x64_cli.c
diff --git a/TestClient/ReadMe.txt b/TestRpcClient/ReadMe.txt
similarity index 82%
rename from TestClient/ReadMe.txt
rename to TestRpcClient/ReadMe.txt
index 8caf316..b8e678f 100644
--- a/TestClient/ReadMe.txt
+++ b/TestRpcClient/ReadMe.txt
@@ -1,27 +1,27 @@
========================================================================
- CONSOLE APPLICATION : TestClient Project Overview
+ CONSOLE APPLICATION : TestRpcClient Project Overview
========================================================================
-AppWizard has created this TestClient application for you.
+AppWizard has created this TestRpcClient application for you.
This file contains a summary of what you will find in each of the files that
-make up your TestClient application.
+make up your TestRpcClient application.
-TestClient.vcxproj
+TestRpcClient.vcxproj
This is the main project file for VC++ projects generated using an Application Wizard.
It contains information about the version of Visual C++ that generated the file, and
information about the platforms, configurations, and project features selected with the
Application Wizard.
-TestClient.vcxproj.filters
+TestRpcClient.vcxproj.filters
This is the filters file for VC++ projects generated using an Application Wizard.
It contains information about the association between the files in your project
and the filters. This association is used in the IDE to show grouping of files with
similar extensions under a specific node (for e.g. ".cpp" files are associated with the
"Source Files" filter).
-TestClient.cpp
+TestRpcClient.cpp
This is the main application source file.
/////////////////////////////////////////////////////////////////////////////
@@ -29,7 +29,7 @@ Other standard files:
StdAfx.h, StdAfx.cpp
These files are used to build a precompiled header (PCH) file
- named TestClient.pch and a precompiled types file named StdAfx.obj.
+ named TestRpcClient.pch and a precompiled types file named StdAfx.obj.
/////////////////////////////////////////////////////////////////////////////
Other notes:
diff --git a/TestClient/TestClient.cpp b/TestRpcClient/TestRpcClient.cpp
similarity index 88%
rename from TestClient/TestClient.cpp
rename to TestRpcClient/TestRpcClient.cpp
index 54d072a..4d602d5 100644
--- a/TestClient/TestClient.cpp
+++ b/TestRpcClient/TestRpcClient.cpp
@@ -1,4 +1,4 @@
-// TestClient.cpp : Defines the entry point for the console application.
+// TestRpcClient.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
@@ -9,7 +9,7 @@
int wmain(int argc, wchar_t *argv[])
{
- std::cout << "Running main() from \'TestClient.cpp\'\n";
+ std::cout << "Running main() from \'TestRpcClient.cpp\'\n";
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
diff --git a/TestClient/TestClient.vcxproj b/TestRpcClient/TestRpcClient.vcxproj
similarity index 95%
rename from TestClient/TestClient.vcxproj
rename to TestRpcClient/TestRpcClient.vcxproj
index bc7902b..746925b 100644
--- a/TestClient/TestClient.vcxproj
+++ b/TestRpcClient/TestRpcClient.vcxproj
@@ -21,8 +21,9 @@
{6ADF3A4B-1E22-41BA-9293-96593E6A45BE}
Win32Proj
- TestClient
+ TestRpcClient
8.1
+ TestRpcClient
@@ -180,7 +181,6 @@
-
@@ -203,21 +203,14 @@
NotUsing
NotUsing
-
- NotUsing
- NotUsing
- NotUsing
- NotUsing
-
Create
Create
Create
Create
-
+
-
diff --git a/TestClient/TestClient.vcxproj.filters b/TestRpcClient/TestRpcClient.vcxproj.filters
similarity index 87%
rename from TestClient/TestClient.vcxproj.filters
rename to TestRpcClient/TestRpcClient.vcxproj.filters
index 09fb15d..592e0a2 100644
--- a/TestClient/TestClient.vcxproj.filters
+++ b/TestRpcClient/TestRpcClient.vcxproj.filters
@@ -36,17 +36,11 @@
Shared
-
- Header Files
-
Source Files
-
- Source Files
-
Source Files
@@ -59,10 +53,7 @@
Shared
-
- Source Files
-
-
+
Source Files
diff --git a/TestClient/application.config b/TestRpcClient/application.config
similarity index 100%
rename from TestClient/application.config
rename to TestRpcClient/application.config
diff --git a/TestClient/stdafx.cpp b/TestRpcClient/stdafx.cpp
similarity index 81%
rename from TestClient/stdafx.cpp
rename to TestRpcClient/stdafx.cpp
index efecb69..08c6e2f 100644
--- a/TestClient/stdafx.cpp
+++ b/TestRpcClient/stdafx.cpp
@@ -1,5 +1,5 @@
// stdafx.cpp : source file that includes just the standard includes
-// TestClient.pch will be the pre-compiled header
+// TestRpcClient.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
diff --git a/TestClient/stdafx.h b/TestRpcClient/stdafx.h
similarity index 100%
rename from TestClient/stdafx.h
rename to TestRpcClient/stdafx.h
diff --git a/TestClient/targetver.h b/TestRpcClient/targetver.h
similarity index 100%
rename from TestClient/targetver.h
rename to TestRpcClient/targetver.h
diff --git a/TestClient/tests_rpc.cpp b/TestRpcClient/tests_rpc.cpp
similarity index 89%
rename from TestClient/tests_rpc.cpp
rename to TestRpcClient/tests_rpc.cpp
index ae05e20..b6b3571 100644
--- a/TestClient/tests_rpc.cpp
+++ b/TestRpcClient/tests_rpc.cpp
@@ -144,6 +144,8 @@ namespace integration_tests
auto timeout = client2.Shutdown();
+ /* Awaits for the setup and start of the RPC server in the
+ next test, using data measured in the server side... */
std::this_thread::sleep_for(std::chrono::milliseconds(timeout));
}
catch (...)
@@ -221,6 +223,8 @@ namespace integration_tests
auto timeout = client2.Shutdown();
+ /* Awaits for the setup and start of the RPC server in the
+ next test, using data measured in the server side... */
std::this_thread::sleep_for(std::chrono::milliseconds(timeout));
}
catch (...)
@@ -244,27 +248,18 @@ namespace integration_tests
AuthnTestOptions{ ProtocolSequence::Local, objectsUuidsImpl1[11], objectsUuidsImpl2[11], AuthenticationLevel::Privacy, AuthenticationSecurity::RequireMutualAuthn, ImpersonationLevel::Impersonate }
*/
/*,
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[5], objectsUuidsImpl2[5], AuthenticationLevel::Integrity, AuthenticationSecurity::NTLM, ImpersonationLevel::Impersonate },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[6], objectsUuidsImpl2[6], AuthenticationLevel::Privacy, AuthenticationSecurity::NTLM, ImpersonationLevel::Impersonate },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[7], objectsUuidsImpl2[7], AuthenticationLevel::Integrity, AuthenticationSecurity::TryKerberos, ImpersonationLevel::Impersonate },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[8], objectsUuidsImpl2[8], AuthenticationLevel::Privacy, AuthenticationSecurity::TryKerberos, ImpersonationLevel::Impersonate }
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[6], objectsUuidsImpl2[6], AuthenticationLevel::Integrity, AuthenticationSecurity::NTLM, ImpersonationLevel::Impersonate },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[7], objectsUuidsImpl2[7], AuthenticationLevel::Privacy, AuthenticationSecurity::NTLM, ImpersonationLevel::Impersonate },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[8], objectsUuidsImpl2[8], AuthenticationLevel::Integrity, AuthenticationSecurity::TryKerberos, ImpersonationLevel::Impersonate },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[9], objectsUuidsImpl2[9], AuthenticationLevel::Privacy, AuthenticationSecurity::TryKerberos, ImpersonationLevel::Impersonate }
*/
/*,
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[9], objectsUuidsImpl2[9], AuthenticationLevel::Integrity, AuthenticationSecurity::RequireMutualAuthn, ImpersonationLevel::Impersonate },
- AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[10], objectsUuidsImpl2[10], AuthenticationLevel::Privacy, AuthenticationSecurity::RequireMutualAuthn, ImpersonationLevel::Impersonate }
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[10], objectsUuidsImpl2[10], AuthenticationLevel::Integrity, AuthenticationSecurity::RequireMutualAuthn, ImpersonationLevel::Impersonate },
+ AuthnTestOptions{ ProtocolSequence::TCP, objectsUuidsImpl1[11], objectsUuidsImpl2[11], AuthenticationLevel::Privacy, AuthenticationSecurity::RequireMutualAuthn, ImpersonationLevel::Impersonate }
*/
)
);
- // The set of options for each test template instantiation
- struct SchannelTestOptions
- {
- const char *objectUUID1;
- const char *objectUUID2;
- AuthenticationLevel authenticationLevel;
- bool useStrongSec;
- };
-
///
/// Test case for RPC client with SCHANNEL authentication.
///
@@ -322,6 +317,8 @@ namespace integration_tests
auto timeout = client2.Shutdown();
+ /* Awaits for the setup and start of the RPC server in the
+ next test, using data measured in the server side... */
std::this_thread::sleep_for(std::chrono::milliseconds(timeout));
}
catch (...)
@@ -330,17 +327,11 @@ namespace integration_tests
}
}
- /* Implementation of test template takes care of switching
- protocol sequences and authentication level: */
+ // Implementation of test template takes care of switching parameters:
INSTANTIATE_TEST_CASE_P(
SwitchProtAndAuthLevel,
Framework_RpcSchannel_TestCase,
- ::testing::Values(
- SchannelTestOptions{ objectsUuidsImpl1[12], objectsUuidsImpl2[12], AuthenticationLevel::Privacy, false },
- SchannelTestOptions{ objectsUuidsImpl1[13], objectsUuidsImpl2[13], AuthenticationLevel::Privacy, true },
- SchannelTestOptions{ objectsUuidsImpl1[14], objectsUuidsImpl2[14], AuthenticationLevel::Integrity, false },
- SchannelTestOptions{ objectsUuidsImpl1[15], objectsUuidsImpl2[15], AuthenticationLevel::Integrity, true }
- )
+ paramsForSchannelTests // shared by both client & server side
);
}// end of namespace integration_tests
diff --git a/IntegrationTests/calculator.wsdl b/TestShared/calculator.wsdl
similarity index 100%
rename from IntegrationTests/calculator.wsdl
rename to TestShared/calculator.wsdl
diff --git a/TestShared/rpc_test_shared.cpp b/TestShared/rpc_test_shared.cpp
index 5628667..6e14c45 100644
--- a/TestShared/rpc_test_shared.cpp
+++ b/TestShared/rpc_test_shared.cpp
@@ -2,7 +2,7 @@
namespace _3fd
{
-namespace rpc
+namespace integration_tests
{
const std::array objectsUuidsImpl1 =
{
@@ -52,5 +52,5 @@ namespace rpc
"97273BD4-45CB-47B4-B03A-6C3597EB8F86"
};
-}// end of namespace rpc
+}// end of namespace integration_tests
}// end of namespace _3fd
\ No newline at end of file
diff --git a/TestShared/rpc_test_shared.h b/TestShared/rpc_test_shared.h
index 765b009..0293ad9 100644
--- a/TestShared/rpc_test_shared.h
+++ b/TestShared/rpc_test_shared.h
@@ -1,25 +1,46 @@
#ifndef RPC_TEST_SHARED_H // header guard
#define RPC_TEST_SHARED_H
+#include "rpc_helpers.h"
+#include
#include
namespace _3fd
{
- namespace rpc
+namespace integration_tests
+{
+ /* In this implementation:
+ Operate(left, right) = left * right
+ ChangeCase(input) = toUpper(input)
+ */
+ extern const std::array objectsUuidsImpl1;
+
+ /* In this implementation:
+ Operate(left, right) = left + right
+ ChangeCase(input) = toLower(input)
+ */
+ extern const std::array objectsUuidsImpl2;
+
+ ///
+ /// A set of options to be used as variable parameters of test cases
+ /// for RPC module with Schannel SSP in both server & client sides.
+ ///
+ struct SchannelTestOptions
{
- /* In this implementation:
- Operate(left, right) = left * right
- ChangeCase(input) = toUpper(input)
- */
- extern const std::array objectsUuidsImpl1;
+ const char *objectUUID1;
+ const char *objectUUID2;
+ rpc::AuthenticationLevel authenticationLevel;
+ bool useStrongSec;
+ };
- /* In this implementation:
- Operate(left, right) = left + right
- ChangeCase(input) = toLower(input)
- */
- extern const std::array objectsUuidsImpl2;
+ const auto paramsForSchannelTests = ::testing::Values(
+ SchannelTestOptions{ objectsUuidsImpl1[16], objectsUuidsImpl2[16], rpc::AuthenticationLevel::Privacy, false },
+ SchannelTestOptions{ objectsUuidsImpl1[17], objectsUuidsImpl2[17], rpc::AuthenticationLevel::Privacy, true },
+ SchannelTestOptions{ objectsUuidsImpl1[18], objectsUuidsImpl2[18], rpc::AuthenticationLevel::Integrity, false },
+ SchannelTestOptions{ objectsUuidsImpl1[19], objectsUuidsImpl2[19], rpc::AuthenticationLevel::Integrity, true }
+ );
- }// end of namespace rpc
+}// end of namespace integration_tests
}// end of namespace _3fd
#endif // end of header guard
diff --git a/TestWwsClient/ReadMe.txt b/TestWwsClient/ReadMe.txt
new file mode 100644
index 0000000..7ed8edb
--- /dev/null
+++ b/TestWwsClient/ReadMe.txt
@@ -0,0 +1,40 @@
+========================================================================
+ CONSOLE APPLICATION : TestWwsClient Project Overview
+========================================================================
+
+AppWizard has created this TestWwsClient application for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your TestWwsClient application.
+
+
+TestWwsClient.vcxproj
+ This is the main project file for VC++ projects generated using an Application Wizard.
+ It contains information about the version of Visual C++ that generated the file, and
+ information about the platforms, configurations, and project features selected with the
+ Application Wizard.
+
+TestWwsClient.vcxproj.filters
+ This is the filters file for VC++ projects generated using an Application Wizard.
+ It contains information about the association between the files in your project
+ and the filters. This association is used in the IDE to show grouping of files with
+ similar extensions under a specific node (for e.g. ".cpp" files are associated with the
+ "Source Files" filter).
+
+TestWwsClient.cpp
+ This is the main application source file.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+ These files are used to build a precompiled header (PCH) file
+ named TestWwsClient.pch and a precompiled types file named StdAfx.obj.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" comments to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/TestWwsClient/TestWwsClient.cpp b/TestWwsClient/TestWwsClient.cpp
new file mode 100644
index 0000000..99df39b
--- /dev/null
+++ b/TestWwsClient/TestWwsClient.cpp
@@ -0,0 +1,50 @@
+// TestWwsClient.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "exceptions.h"
+#include "logger.h"
+#include
+#include
+
+int wmain(int argc, wchar_t *argv[])
+{
+ std::cout << "Running main() from \'TestWwsClient.cpp\'\n";
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
+
+namespace _3fd
+{
+ namespace integration_tests
+ {
+ using namespace _3fd::core;
+
+ ///
+ /// Handles several types of exception.
+ ///
+ void HandleException()
+ {
+ try
+ {
+ throw;
+ }
+ catch (IAppException &appEx)
+ {
+ //std::cerr << appEx.ToString() << std::endl;
+ core::Logger::Write(appEx, core::Logger::PRIO_ERROR);
+ }
+ catch (std::exception &stdEx)
+ {
+ std::cerr << stdEx.what() << std::endl;
+ }
+ catch (...)
+ {
+ std::cerr << "An unexpected exception has been caught." << std::endl;
+ }
+
+ FAIL();
+ }
+
+ }// end of namespace integration_tests
+}// end of namespace _3fd
diff --git a/TestWwsClient/TestWwsClient.vcxproj b/TestWwsClient/TestWwsClient.vcxproj
new file mode 100644
index 0000000..5541090
--- /dev/null
+++ b/TestWwsClient/TestWwsClient.vcxproj
@@ -0,0 +1,210 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ {4913E097-136E-4BC4-BF8C-D3341FB1425A}
+ Win32Proj
+ TestWwsClient
+ 8.1
+
+
+
+ Application
+ true
+ v140
+ Unicode
+
+
+ Application
+ false
+ v140
+ true
+ Unicode
+
+
+ Application
+ true
+ v140
+ Unicode
+
+
+ Application
+ false
+ v140
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(BOOST_HOME);$(POCO_ROOT)\Foundation\include;$(POCO_ROOT)\XML\include;$(POCO_ROOT)\Util\include;C:\Program Files (x86)\Visual Leak Detector\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+ $(BOOST_HOME)\stage\lib\desktop\Win32;$(POCO_ROOT)\lib;C:\Program Files (x86)\Visual Leak Detector\lib\Win32;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86
+
+
+ true
+ $(BOOST_HOME);$(POCO_ROOT)\Foundation\include;$(POCO_ROOT)\XML\include;$(POCO_ROOT)\Util\include;C:\Program Files (x86)\Visual Leak Detector\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+ $(BOOST_HOME)\stage\lib\desktop\x64;$(POCO_ROOT)\lib64;C:\Program Files (x86)\Visual Leak Detector\lib\Win64;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64
+
+
+ false
+ $(BOOST_HOME);$(POCO_ROOT)\Foundation\include;$(POCO_ROOT)\XML\include;$(POCO_ROOT)\Util\include;C:\Program Files (x86)\Visual Leak Detector\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+ $(BOOST_HOME)\stage\lib\desktop\Win32;$(POCO_ROOT)\lib;C:\Program Files (x86)\Visual Leak Detector\lib\Win32;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86
+
+
+ false
+ $(BOOST_HOME);$(POCO_ROOT)\Foundation\include;$(POCO_ROOT)\XML\include;$(POCO_ROOT)\Util\include;C:\Program Files (x86)\Visual Leak Detector\include;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+ $(BOOST_HOME)\stage\lib\desktop\x64;$(POCO_ROOT)\lib64;C:\Program Files (x86)\Visual Leak Detector\lib\Win64;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64
+
+
+
+ Use
+ Level3
+ Disabled
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(SolutionDir)3FD;$(SolutionDir)TestShared;$(SolutionDir)gtest\include
+ /D POCO_STATIC %(AdditionalOptions)
+
+
+ Console
+ true
+
+
+ copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
+
+
+
+
+ Use
+ Level3
+ Disabled
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(SolutionDir)3FD;$(SolutionDir)TestShared;$(SolutionDir)gtest\include
+ /D POCO_STATIC %(AdditionalOptions)
+
+
+ Console
+ true
+
+
+ copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
+
+
+
+
+ Level3
+ Use
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(SolutionDir)3FD;$(SolutionDir)TestShared;$(SolutionDir)gtest\include
+ /D POCO_STATIC %(AdditionalOptions)
+
+
+ Console
+ true
+ true
+ true
+
+
+ copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
+
+
+
+
+ Level3
+ Use
+ MaxSpeed
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ $(SolutionDir)3FD;$(SolutionDir)TestShared;$(SolutionDir)gtest\include
+ /D POCO_STATIC %(AdditionalOptions)
+
+
+ Console
+ true
+ true
+ true
+
+
+ copy "$(ProjectDir)application.config" "$(TargetPath).3fd.config"
+
+
+
+
+
+
+
+
+
+
+
+
+ NotUsing
+ NotUsing
+ NotUsing
+ NotUsing
+
+
+ Create
+ Create
+ Create
+ Create
+
+
+
+
+
+
+
+
+
+ {ccc4a0a2-15fd-4a6e-ac6c-094aaaaec80b}
+
+
+ {c8f6c172-56f2-4e76-b5fa-c3b423b31be8}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TestWwsClient/TestWwsClient.vcxproj.filters b/TestWwsClient/TestWwsClient.vcxproj.filters
new file mode 100644
index 0000000..7f02fd4
--- /dev/null
+++ b/TestWwsClient/TestWwsClient.vcxproj.filters
@@ -0,0 +1,50 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Resource Files
+
+
+
\ No newline at end of file
diff --git a/TestWwsClient/application.config b/TestWwsClient/application.config
new file mode 100644
index 0000000..1a8f8a3
--- /dev/null
+++ b/TestWwsClient/application.config
@@ -0,0 +1,47 @@
+
+
+
+
+
+ false
+ 10
+
+ 30
+
+ 1024
+
+
+
+
+ true
+
+
+
+ 64
+
+
+ 100
+
+ 128
+ 1.0
+
+
+ 8
+
+ 0.7
+
+
+
+ 128
+ 5120
+
+
+ true
+
+
+
+
+
+
diff --git a/TestClient/calculator.wsdl.c b/TestWwsClient/calculator.wsdl.c
similarity index 100%
rename from TestClient/calculator.wsdl.c
rename to TestWwsClient/calculator.wsdl.c
diff --git a/TestClient/calculator.wsdl.h b/TestWwsClient/calculator.wsdl.h
similarity index 100%
rename from TestClient/calculator.wsdl.h
rename to TestWwsClient/calculator.wsdl.h
diff --git a/TestWwsClient/stdafx.cpp b/TestWwsClient/stdafx.cpp
new file mode 100644
index 0000000..a6b0469
--- /dev/null
+++ b/TestWwsClient/stdafx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : source file that includes just the standard includes
+// TestWwsClient.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/TestWwsClient/stdafx.h b/TestWwsClient/stdafx.h
new file mode 100644
index 0000000..81cf32b
--- /dev/null
+++ b/TestWwsClient/stdafx.h
@@ -0,0 +1,16 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#include
+#include
+
+
+
+// TODO: reference additional headers your program requires here
+#include
\ No newline at end of file
diff --git a/TestWwsClient/targetver.h b/TestWwsClient/targetver.h
new file mode 100644
index 0000000..87c0086
--- /dev/null
+++ b/TestWwsClient/targetver.h
@@ -0,0 +1,8 @@
+#pragma once
+
+// Including SDKDDKVer.h defines the highest available Windows platform.
+
+// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
+// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
+
+#include
diff --git a/TestClient/tests_wws.cpp b/TestWwsClient/tests_wws.cpp
similarity index 100%
rename from TestClient/tests_wws.cpp
rename to TestWwsClient/tests_wws.cpp
diff --git a/WsutilCompileWwsTestWsdl.bat b/WsutilCompileWwsTestWsdl.bat
index 6793a1d..9ef88e0 100644
--- a/WsutilCompileWwsTestWsdl.bat
+++ b/WsutilCompileWwsTestWsdl.bat
@@ -1,9 +1,9 @@
call "%VS140COMNTOOLS%\VsDevCmd.bat"
cd IntegrationTests
-wsutil /noclient /wsdl:calculator.wsdl
+wsutil /noclient /wsdl:..\TestShared\calculator.wsdl
-cd ..\TestClient
-wsutil /noservice /wsdl:..\IntegrationTests\calculator.wsdl
+cd ..\TestWwsClient
+wsutil /noservice /wsdl:..\TestShared\calculator.wsdl
cd ..
\ No newline at end of file