Skip to content

Commit

Permalink
Merge pull request #7 from Mercap/http_transport_improvements
Browse files Browse the repository at this point in the history
Fixed some HTTP transport related glitches
  • Loading branch information
juliendelplanque authored Jun 24, 2019
2 parents 2170fa2 + 503bbc7 commit 24ced74
Show file tree
Hide file tree
Showing 8 changed files with 129 additions and 24 deletions.
10 changes: 9 additions & 1 deletion src/BaselineOfJRPC/BaselineOfJRPC.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,20 @@ BaselineOfJRPC >> setUpPackages: spec [
spec
package: 'JRPC-Server' with: [ spec requires: 'JRPC-Common' ];
group: 'Server-Deployment' with: 'JRPC-Server'.
spec
for: #'pharo6.x'
do: [ spec
package: 'JRPC-Server-Pharo6';
group: 'Server-Deployment' with: 'JRPC-Server-Pharo6'
].
spec
package: 'JRPC-Client' with: [ spec requires: 'JRPC-Common' ];
group: 'Client-Deployment' with: 'JRPC-Client'.
spec group: 'Deployment' with: #('Server-Deployment' 'Client-Deployment').

spec
package: 'JRPC-Tests' with: [ spec requires: 'Deployment' ];
group: 'Tests' with: 'JRPC-Tests'
group: 'Tests' with: 'JRPC-Tests'.


]
35 changes: 20 additions & 15 deletions src/JRPC-Client/JRPCHTTPClient.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Class {
#name : #JRPCHTTPClient,
#superclass : #JRPCClient,
#instVars : [
'url'
'httpClient'
],
#category : #'JRPC-Client'
}
Expand All @@ -19,31 +19,36 @@ JRPCHTTPClient class >> url: anObject [
yourself
]

{ #category : #private }
JRPCHTTPClient >> httpClient [
^ ZnClient new
{ #category : #options }
JRPCHTTPClient >> ifFail: block [

httpClient ifFail: block
]

{ #category : #initialization }
JRPCHTTPClient >> initialize [

super initialize.
httpClient := ZnClient new
systemPolicy;
http;
url: self url;
yourself
]

{ #category : #'private - sending' }
JRPCHTTPClient >> sendRequest: aJRPCRequestObject [

| result |
result := self httpClient
contents: (self convertJRPCJsonableObjectToJSON: aJRPCRequestObject asJRPCJSON);
get.

^ self parseSupposedJRPCMessageObjectFromString: (result ifNil: [ '' ] ifNotNil: #contents).
]

{ #category : #accessing }
JRPCHTTPClient >> url [
^ url
result := httpClient
contents: ( self convertJRPCJsonableObjectToJSON: aJRPCRequestObject asJRPCJSON );
post.

^ self parseSupposedJRPCMessageObjectFromString: ( result ifNil: [ '' ] ifNotNil: #contents )
]

{ #category : #accessing }
JRPCHTTPClient >> url: anObject [
url := anObject asZnUrl

httpClient url: anObject asZnUrl
]
5 changes: 4 additions & 1 deletion src/JRPC-Common/JRPCParser.trait.st
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@ JRPCParser >> parseSupposedJRPCMessageObjectFromStream: aStream [

{ #category : #parsing }
JRPCParser >> parseSupposedJRPCMessageObjectFromString: aString [

| readStream |

readStream := aString readStream.
[ ^ self parseSupposedJRPCMessageObjectFromStream: readStream ] ensure: [ readStream close ]
^ [ self parseSupposedJRPCMessageObjectFromStream: readStream ]
ensure: [ readStream close ]
]
7 changes: 7 additions & 0 deletions src/JRPC-Server-Pharo6/ZnEntity.extension.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Extension { #name : #ZnEntity }

{ #category : #'*JRPC-Server-Pharo6' }
ZnEntity class >> json: text [

^ self stringEntityClass json: text
]
8 changes: 8 additions & 0 deletions src/JRPC-Server-Pharo6/ZnStringEntity.extension.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Extension { #name : #ZnStringEntity }

{ #category : #'*JRPC-Server-Pharo6' }
ZnStringEntity class >> json: string [
^ (self type: ZnMimeType applicationJson)
string: string;
yourself
]
1 change: 1 addition & 0 deletions src/JRPC-Server-Pharo6/package.st
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Package { #name : #'JRPC-Server-Pharo6' }
13 changes: 6 additions & 7 deletions src/JRPC-Server/JRPCHTTPServer.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,18 @@ JRPCHTTPServer >> defaultPort [
^ self class defaultPort
]

{ #category : #'handling - http' }
JRPCHTTPServer >> handleRequest: aRequest [
^ ZnResponse ok: (ZnEntity json: (self handleJSON: aRequest contents))
]

{ #category : #initialization }
JRPCHTTPServer >> initialize [

super initialize.
server := ZnServer defaultServerClass new.

server
port: self defaultPort;
delegate: self
delegate:
( ZnDispatcherDelegate new
map: '/'
to: [ :request :response | response entity: ( ZnEntity json: ( self handleJSON: request contents ) ) ] )
]

{ #category : #accessing }
Expand Down
74 changes: 74 additions & 0 deletions src/JRPC-Tests/JRPCHttpServerTest.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
"
I'm a test for JSON RPC over HTTP transport
"
Class {
#name : #JRPCHttpServerTest,
#superclass : #TestCase,
#instVars : [
'server'
],
#category : #'JRPC-Tests'
}

{ #category : #private }
JRPCHttpServerTest >> checkPortAvailability [

[ ( ZnNetworkingUtils serverSocketOn: self port ) close ]
on: Error
do: [ :error | self fail: ( 'Port <1p> is not available' expandMacrosWith: self port ) ]
]

{ #category : #private }
JRPCHttpServerTest >> port [

^ 7777
]

{ #category : #running }
JRPCHttpServerTest >> setUp [

super setUp.
self checkPortAvailability.
server := JRPCServer http.
server port: self port.
server start
]

{ #category : #running }
JRPCHttpServerTest >> tearDown [

server ifNotNil: [ server stop ].
server := nil.
super tearDown
]

{ #category : #accessing }
JRPCHttpServerTest >> testRequestOnInvalidEndpoint [

| httpClient failed |

server addHandlerNamed: 'sum' block: [ :a :b | a + b ].
failed := false.

httpClient := JRPCClient http: ( 'http://localhost' asUrl port: self port ) / 'bad'.
httpClient
ifFail: [ :error |
failed := true.
'{}'
].
self
should: [ httpClient callMethod: 'sum' arguments: #(1 3) withId: 1 ] raise: JRPCIncorrectJSON;
assert: failed
]

{ #category : #accessing }
JRPCHttpServerTest >> testValidRequest [

| httpClient |

server addHandlerNamed: 'sum' block: [ :a :b | a + b ].

httpClient := JRPCClient http: ( 'http://localhost' asUrl port: self port ).

self assert: ( httpClient callMethod: 'sum' arguments: #(1 3) withId: 1 ) result equals: 4
]

0 comments on commit 24ced74

Please sign in to comment.