Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
bac32faf
Commit
bac32faf
authored
Oct 01, 2011
by
csharptest
Committed by
rogerk
Oct 01, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added unit tests for Lite runtime services and serialization
parent
1f8a6220
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
247 additions
and
2 deletions
+247
-2
build.csproj
build/build.csproj
+4
-0
unittest_extras_lite.proto
protos/extest/unittest_extras_lite.proto
+0
-0
unittest_rpc_interop_lite.proto
protos/extest/unittest_rpc_interop_lite.proto
+35
-0
ProtocolBuffers.sln
src/ProtocolBuffers.sln
+2
-1
ProtocolBuffers2008.sln
src/ProtocolBuffers2008.sln
+2
-1
ProtocolBuffersLite.Test.csproj
src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj
+7
-0
UnitTestRpcInteropLite.cs
...ocolBuffersLite.Test/TestProtos/UnitTestRpcInteropLite.cs
+0
-0
TestRpcForMimeTypes.cs
src/ProtocolBuffersLite.Test/TestRpcForMimeTypes.cs
+0
-0
TestRpcGenerator.cs
src/ProtocolBuffersLite.Test/TestRpcGenerator.cs
+172
-0
copysolution.bat
src/copysolution.bat
+25
-0
No files found.
build/build.csproj
View file @
bac32faf
...
...
@@ -43,6 +43,7 @@
<Protos
Include=
"$(ProtosDirectory)\extest\unittest_extras_xmltest.proto"
/>
<Protos
Include=
"$(ProtosDirectory)\extest\unittest_generic_services.proto"
/>
<Protos
Include=
"$(ProtosDirectory)\extest\unittest_rpc_interop.proto"
/>
<Protos
Include=
"$(ProtosDirectory)\extest\unittest_rpc_interop_lite.proto"
/>
<Protos
Include=
"$(ProtosDirectory)\google\protobuf\descriptor.proto"
/>
<Protos
Include=
"$(ProtosDirectory)\google\protobuf\csharp_options.proto"
/>
<Protos
Include=
"$(ProtosDirectory)\google\protobuf\unittest.proto"
/>
...
...
@@ -115,6 +116,9 @@
<GeneratedSource
Include=
"$(BuildTempDirectory)\UnitTestRpcInterop.cs"
>
<TargetDirectory>
$(SourceDirectory)\ProtocolBuffers.Test\TestProtos
</TargetDirectory>
</GeneratedSource>
<GeneratedSource
Include=
"$(BuildTempDirectory)\UnitTestRpcInteropLite.cs"
>
<TargetDirectory>
$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos
</TargetDirectory>
</GeneratedSource>
<GeneratedSource
Include=
"$(BuildTempDirectory)\UnitTestGenericServices.cs"
>
<TargetDirectory>
$(SourceDirectory)\ProtocolBuffers.Test\TestProtos
</TargetDirectory>
</GeneratedSource>
...
...
protos/extest/unittest_extras_lite.proto
View file @
bac32faf
protos/extest/unittest_rpc_interop_lite.proto
0 → 100644
View file @
bac32faf
// Additional options required for C# generation. File from copyright
// line onwards is as per original distribution.
import
"google/protobuf/csharp_options.proto"
;
option
(
google.protobuf.csharp_file_options
)
.
namespace
=
"Google.ProtocolBuffers.TestProtos"
;
option
(
google.protobuf.csharp_file_options
)
.
umbrella_classname
=
"UnitTestRpcInteropLite"
;
option
(
google.protobuf.csharp_file_options
)
.
service_generator_type
=
IRPCDISPATCH
;
option
optimize_for
=
LITE_RUNTIME
;
package
unittest_rpc_interop_lite
;
message
SearchRequest
{
repeated
string
Criteria
=
1
;
}
message
SearchResponse
{
message
ResultItem
{
required
string
url
=
1
;
optional
string
name
=
2
;
}
repeated
ResultItem
results
=
1
;
}
message
RefineSearchRequest
{
repeated
string
Criteria
=
1
;
required
SearchResponse
previous_results
=
2
;
}
service
SearchService
{
option
(
google.protobuf.csharp_service_options
)
.
interface_id
=
"{A65F0925-FD11-4f94-B166-89AC4F027205}"
;
rpc
Search
(
SearchRequest
)
returns
(
SearchResponse
)
{
option
(
google.protobuf.csharp_method_options
)
.
dispatch_id
=
5
;
};
rpc
RefineSearch
(
RefineSearchRequest
)
returns
(
SearchResponse
);
}
src/ProtocolBuffers.sln
View file @
bac32faf
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "proto", "proto", "{1F896D5C-5FC2-4671-9216-781CB8187EC7}"
ProjectSection(SolutionItems) = preProject
..\protos\tutorial\addressbook.proto = ..\protos\tutorial\addressbook.proto
...
...
@@ -32,6 +32,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unittest", "unittest", "{C8
..\protos\google\protobuf\unittest_no_generic_services.proto = ..\protos\google\protobuf\unittest_no_generic_services.proto
..\protos\google\protobuf\unittest_optimize_for.proto = ..\protos\google\protobuf\unittest_optimize_for.proto
..\protos\extest\unittest_rpc_interop.proto = ..\protos\extest\unittest_rpc_interop.proto
..\protos\extest\unittest_rpc_interop_lite.proto = ..\protos\extest\unittest_rpc_interop_lite.proto
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"
...
...
src/ProtocolBuffers2008.sln
View file @
bac32faf
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "proto", "proto", "{1F896D5C-5FC2-4671-9216-781CB8187EC7}"
ProjectSection(SolutionItems) = preProject
..\protos\tutorial\addressbook.proto = ..\protos\tutorial\addressbook.proto
...
...
@@ -32,6 +32,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unittest", "unittest", "{C8
..\protos\google\protobuf\unittest_no_generic_services.proto = ..\protos\google\protobuf\unittest_no_generic_services.proto
..\protos\google\protobuf\unittest_optimize_for.proto = ..\protos\google\protobuf\unittest_optimize_for.proto
..\protos\extest\unittest_rpc_interop.proto = ..\protos\extest\unittest_rpc_interop.proto
..\protos\extest\unittest_rpc_interop_lite.proto = ..\protos\extest\unittest_rpc_interop_lite.proto
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"
...
...
src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj
View file @
bac32faf
...
...
@@ -66,8 +66,15 @@
<Compile
Include=
"TestProtos\UnitTestExtrasLiteProtoFile.cs"
/>
<Compile
Include=
"TestProtos\UnitTestImportLiteProtoFile.cs"
/>
<Compile
Include=
"TestProtos\UnitTestLiteProtoFile.cs"
/>
<Compile
Include=
"TestProtos\UnitTestRpcInteropLite.cs"
/>
<Compile
Include=
"TestRpcForMimeTypes.cs"
/>
<Compile
Include=
"TestRpcGenerator.cs"
/>
</ItemGroup>
<ItemGroup>
<ProjectReference
Include=
"..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.csproj"
>
<Project>
{E067A59D-9D0A-4A1F-92B1-38E4457241D1}
</Project>
<Name>
ProtocolBuffersLite.Serialization
</Name>
</ProjectReference>
<ProjectReference
Include=
"..\ProtocolBuffers\ProtocolBuffersLite.csproj"
>
<Project>
{6969BDCE-D925-43F3-94AC-A531E6DF2591}
</Project>
<Name>
ProtocolBuffersLite
</Name>
...
...
src/ProtocolBuffersLite.Test/TestProtos/UnitTestRpcInteropLite.cs
0 → 100644
View file @
bac32faf
This diff is collapsed.
Click to expand it.
src/ProtocolBuffersLite.Test/TestRpcForMimeTypes.cs
0 → 100644
View file @
bac32faf
This diff is collapsed.
Click to expand it.
src/ProtocolBuffersLite.Test/TestRpcGenerator.cs
0 → 100644
View file @
bac32faf
#region Copyright notice and license
// Protocol Buffers - Google's data interchange format
// Copyright 2008 Google Inc. All rights reserved.
// http://github.com/jskeet/dotnet-protobufs/
// Original C++/Java/Python code:
// http://code.google.com/p/protobuf/
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#endregion
using
System
;
using
Google.ProtocolBuffers
;
using
Google.ProtocolBuffers.TestProtos
;
using
NUnit.Framework
;
namespace
Google.ProtocolBuffers
{
/// <summary>
/// This class verifies the correct code is generated from unittest_rpc_interop.proto and provides a small demonstration
/// of using the new IRpcDispatch to write a client/server
/// </summary>
[
TestFixture
]
public
class
TestRpcGenerator
{
/// <summary>
/// A sample implementation of the ISearchService for testing
/// </summary>
private
class
ExampleSearchImpl
:
ISearchService
{
SearchResponse
ISearchService
.
Search
(
SearchRequest
searchRequest
)
{
if
(
searchRequest
.
CriteriaCount
==
0
)
{
throw
new
ArgumentException
(
"No criteria specified."
,
new
InvalidOperationException
());
}
SearchResponse
.
Builder
resp
=
SearchResponse
.
CreateBuilder
();
foreach
(
string
criteria
in
searchRequest
.
CriteriaList
)
{
resp
.
AddResults
(
SearchResponse
.
Types
.
ResultItem
.
CreateBuilder
().
SetName
(
criteria
).
SetUrl
(
"http://search.com"
).
Build
());
}
return
resp
.
Build
();
}
SearchResponse
ISearchService
.
RefineSearch
(
RefineSearchRequest
refineSearchRequest
)
{
SearchResponse
.
Builder
resp
=
refineSearchRequest
.
PreviousResults
.
ToBuilder
();
foreach
(
string
criteria
in
refineSearchRequest
.
CriteriaList
)
{
resp
.
AddResults
(
SearchResponse
.
Types
.
ResultItem
.
CreateBuilder
().
SetName
(
criteria
).
SetUrl
(
"http://refine.com"
).
Build
());
}
return
resp
.
Build
();
}
}
/// <summary>
/// An example extraction of the wire protocol
/// </summary>
private
interface
IWireTransfer
{
byte
[]
Execute
(
string
method
,
byte
[]
message
);
}
/// <summary>
/// An example of a server responding to a wire request
/// </summary>
private
class
ExampleServerHost
:
IWireTransfer
{
private
readonly
IRpcServerStub
_stub
;
public
ExampleServerHost
(
ISearchService
implementation
)
{
//on the server, we create a dispatch to call the appropriate method by name
IRpcDispatch
dispatch
=
new
SearchService
.
Dispatch
(
implementation
);
//we then wrap that dispatch in a server stub which will deserialize the wire bytes to the message
//type appropriate for the method name being invoked.
_stub
=
new
SearchService
.
ServerStub
(
dispatch
);
}
byte
[]
IWireTransfer
.
Execute
(
string
method
,
byte
[]
message
)
{
//now when we recieve a wire transmission to invoke a method by name with a byte[] or stream payload
//we just simply call the sub:
IMessageLite
response
=
_stub
.
CallMethod
(
method
,
CodedInputStream
.
CreateInstance
(
message
),
ExtensionRegistry
.
Empty
);
//now we return the expected response message:
return
response
.
ToByteArray
();
}
}
/// <summary>
/// An example of a client sending a wire request
/// </summary>
private
class
ExampleClient
:
IRpcDispatch
{
private
readonly
IWireTransfer
_wire
;
public
ExampleClient
(
IWireTransfer
wire
)
{
_wire
=
wire
;
}
TMessage
IRpcDispatch
.
CallMethod
<
TMessage
,
TBuilder
>(
string
method
,
IMessageLite
request
,
IBuilderLite
<
TMessage
,
TBuilder
>
response
)
{
byte
[]
rawResponse
=
_wire
.
Execute
(
method
,
request
.
ToByteArray
());
response
.
MergeFrom
(
rawResponse
);
return
response
.
Build
();
}
}
/// <summary>
/// Put it all together to create one seamless client/server experience full of rich-type goodness ;)
/// All you need to do is send/recieve the method name and message bytes across the wire.
/// </summary>
[
Test
]
public
void
TestClientServerDispatch
()
{
ExampleServerHost
server
=
new
ExampleServerHost
(
new
ExampleSearchImpl
());
//obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting
IWireTransfer
wire
=
server
;
ISearchService
client
=
new
SearchService
(
new
ExampleClient
(
wire
));
//now the client has a real, typed, interface to work with:
SearchResponse
result
=
client
.
Search
(
SearchRequest
.
CreateBuilder
().
AddCriteria
(
"Test"
).
Build
());
Assert
.
AreEqual
(
1
,
result
.
ResultsCount
);
Assert
.
AreEqual
(
"Test"
,
result
.
ResultsList
[
0
].
Name
);
Assert
.
AreEqual
(
"http://search.com"
,
result
.
ResultsList
[
0
].
Url
);
//The test part of this, call the only other method
result
=
client
.
RefineSearch
(
RefineSearchRequest
.
CreateBuilder
().
SetPreviousResults
(
result
).
AddCriteria
(
"Refine"
).
Build
());
Assert
.
AreEqual
(
2
,
result
.
ResultsCount
);
Assert
.
AreEqual
(
"Test"
,
result
.
ResultsList
[
0
].
Name
);
Assert
.
AreEqual
(
"http://search.com"
,
result
.
ResultsList
[
0
].
Url
);
Assert
.
AreEqual
(
"Refine"
,
result
.
ResultsList
[
1
].
Name
);
Assert
.
AreEqual
(
"http://refine.com"
,
result
.
ResultsList
[
1
].
Url
);
}
}
}
\ No newline at end of file
src/copysolution.bat
0 → 100644
View file @
bac32faf
@ECHO OFF
IF "%1" == "2008" GOTO COPY2008
IF "%1" == "2010" GOTO COPY2010
GOTO HELP
:COPY2008
type ProtocolBuffers.sln | FIND " Visual Studio " > Temp.sln
type ProtocolBuffers2008.sln | FIND /V " Visual Studio " >> Temp.sln
move /Y Temp.sln ProtocolBuffers.sln
GOTO EXIT
:COPY2010
type ProtocolBuffers2008.sln | FIND " Visual Studio " > Temp.sln
type ProtocolBuffers.sln | FIND /V " Visual Studio " >> Temp.sln
move /Y Temp.sln ProtocolBuffers2008.sln
GOTO EXIT
:HELP
ECHO.
ECHO Specify the Visiual Studio edition (2008/2010)
ECHO Example: %~nx0 2008
ECHO.
:EXIT
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment