From bf1db231dbc15747460d9d9f592d630307dc0904 Mon Sep 17 00:00:00 2001 From: Alex Dukhno Date: Fri, 10 Apr 2020 20:29:15 +0300 Subject: [PATCH 1/6] first raw version of high level design --- doc/10-04-2020-High-Level-Design.md | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 doc/10-04-2020-High-Level-Design.md diff --git a/doc/10-04-2020-High-Level-Design.md b/doc/10-04-2020-High-Level-Design.md new file mode 100644 index 0000000..0ecd19d --- /dev/null +++ b/doc/10-04-2020-High-Level-Design.md @@ -0,0 +1,42 @@ +# Summary + +The goal of the RSocket TCK is to allow developers implement RSocket protocol in +their favoured programming language and be sure, that it follows RSocket +specification. + +#Motivation + +Reactive programming is becoming popular since 2015. That year, the design of +RSocket protocol had been started. Protocol pushes reactive semantic to the +network. Lots of engineers worked on implementations of RSocket protocol in +different language. There is no way to check if implementation is compliant with +protocol specification. + +# Detailed Design + +To address issues that implementations were compliant with protocol +specification we have to introduce a tool (TCK). TCK should use black-box +testing against different implementations. + +## Testing network communication + +As RSocket implementation is a library that allows two applications talk to each +other reactively over the network TCK should support both `client` and `server` +compatibility tests. For that reason TCK should be a separate application that +can be run either as RSocket `client` or as RSocket `server`. + +## Tests as specification + +TCK should provide `DSL` language to allow programmatically describe cases from +protocol specification. Each case should have separate code section that allow +to validate an implementation in full and in case by case scenarios. Convenient +`dsl` also allows describing specification in more precise way and catch any +issues in specification itself. + +## Test Reports + +As the main goal of TCK development is to help engineers in implementing RSocket +protocol, the most critical feature of TCK is to well described reports on +which specification sections an implementation is not covering. Reports should +contain information about failures of not following the specification (e.g. +precise frames ordering and format if states otherwise in spec) \ No newline at end of file From ae3087ffad6da842b138b6ce5926da2f558d16c2 Mon Sep 17 00:00:00 2001 From: Alex Dukhno <5074607+alex-dukhno@users.noreply.github.com> Date: Sun, 12 Apr 2020 10:42:31 +0300 Subject: [PATCH 2/6] Update doc/10-04-2020-High-Level-Design.md Co-Authored-By: Oleh Dokuka --- doc/10-04-2020-High-Level-Design.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/10-04-2020-High-Level-Design.md b/doc/10-04-2020-High-Level-Design.md index 0ecd19d..d916140 100644 --- a/doc/10-04-2020-High-Level-Design.md +++ b/doc/10-04-2020-High-Level-Design.md @@ -1,8 +1,6 @@ # Summary -The goal of the RSocket TCK is to allow developers implement RSocket protocol in -their favoured programming language and be sure, that it follows RSocket -specification. +The purpose of the RSocket Technology Compatibility Kit (from here on referred to as: the TCK) is to guide and help RSocket library implementers to validate their implementations against the rules defined in [the Protocol Specification](https://github.com/rsocket/rsocket). #Motivation @@ -39,4 +37,4 @@ As the main goal of TCK development is to help engineers in implementing RSocket protocol, the most critical feature of TCK is to well described reports on which specification sections an implementation is not covering. Reports should contain information about failures of not following the specification (e.g. -precise frames ordering and format if states otherwise in spec) \ No newline at end of file +precise frames ordering and format if states otherwise in spec) From e4c105c00f9a93da25583446b1775e7afe158222 Mon Sep 17 00:00:00 2001 From: Alex Dukhno <5074607+alex-dukhno@users.noreply.github.com> Date: Sun, 12 Apr 2020 10:42:48 +0300 Subject: [PATCH 3/6] Update doc/10-04-2020-High-Level-Design.md Co-Authored-By: Oleh Dokuka --- doc/10-04-2020-High-Level-Design.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/doc/10-04-2020-High-Level-Design.md b/doc/10-04-2020-High-Level-Design.md index d916140..9b63ffb 100644 --- a/doc/10-04-2020-High-Level-Design.md +++ b/doc/10-04-2020-High-Level-Design.md @@ -2,13 +2,6 @@ The purpose of the RSocket Technology Compatibility Kit (from here on referred to as: the TCK) is to guide and help RSocket library implementers to validate their implementations against the rules defined in [the Protocol Specification](https://github.com/rsocket/rsocket). -#Motivation - -Reactive programming is becoming popular since 2015. That year, the design of -RSocket protocol had been started. Protocol pushes reactive semantic to the -network. Lots of engineers worked on implementations of RSocket protocol in -different language. There is no way to check if implementation is compliant with -protocol specification. # Detailed Design From 95ed5e75e6c2a8c8a6f53a30057b7f20162ccb1a Mon Sep 17 00:00:00 2001 From: Alex Dukhno <5074607+alex-dukhno@users.noreply.github.com> Date: Sun, 12 Apr 2020 10:43:53 +0300 Subject: [PATCH 4/6] Update doc/10-04-2020-High-Level-Design.md Co-Authored-By: Oleh Dokuka --- doc/10-04-2020-High-Level-Design.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/10-04-2020-High-Level-Design.md b/doc/10-04-2020-High-Level-Design.md index 9b63ffb..38d0ca6 100644 --- a/doc/10-04-2020-High-Level-Design.md +++ b/doc/10-04-2020-High-Level-Design.md @@ -5,9 +5,8 @@ The purpose of the RSocket Technology Compatibility Kit (from here on referred t # Detailed Design -To address issues that implementations were compliant with protocol -specification we have to introduce a tool (TCK). TCK should use black-box -testing against different implementations. +The TCK designed to have two independent parts. +The first one is a test runner in the form of a CLI tool along with a form of extendable test suites. The second part is a driver, or simply saying a set of responses to logical interactions which allows ensuring protocol correctness. Please note, that the first part is well specified, where the second part lies on the implementors. ## Testing network communication From 9c2669704b9bb7449bac0d40ffaf32e97918c375 Mon Sep 17 00:00:00 2001 From: Alex Dukhno Date: Mon, 13 Apr 2020 10:21:51 +0300 Subject: [PATCH 5/6] split readme and for-contributors files --- README.md | 24 +++++++++++++++---- ...gh-Level-Design.md => For-Contributors.md} | 18 +++++++------- 2 files changed, 27 insertions(+), 15 deletions(-) rename doc/{10-04-2020-High-Level-Design.md => For-Contributors.md} (61%) diff --git a/README.md b/README.md index 01da753..79c21bc 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,22 @@ Previous scala implementation is in [master branch](https://github.com/rsocket/r ## Outline -The challenge of creating any test suite for network protocols is that we must -have a wait for one side to behave according to how we expect, so we can check -that the appropriate outputs are received given a certain input. Another -challenge is that the tests must be polyglot (support multiple languages), -as this network protocol can, and will be, implemented in various languages. +# Summary + +The purpose of the RSocket Technology Compatibility Kit (from here on referred +to as: the TCK) is to guide and help RSocket library implementers to validate +their implementations against the rules defined in +[the Protocol Specification](https://github.com/rsocket/rsocket). + + +# Detailed Design + +The TCK designed to have two independent parts: + + * the first one is a test runner in the form of a CLI tool along with a form of + extendable test suites + * the second part is a driver, or simply saying a set of responses to logical + interactions which allows ensuring protocol correctness. + +Please note, that the first part is well specified, where the second part lies +on the implementors. diff --git a/doc/10-04-2020-High-Level-Design.md b/doc/For-Contributors.md similarity index 61% rename from doc/10-04-2020-High-Level-Design.md rename to doc/For-Contributors.md index 38d0ca6..b0f788d 100644 --- a/doc/10-04-2020-High-Level-Design.md +++ b/doc/For-Contributors.md @@ -1,13 +1,3 @@ -# Summary - -The purpose of the RSocket Technology Compatibility Kit (from here on referred to as: the TCK) is to guide and help RSocket library implementers to validate their implementations against the rules defined in [the Protocol Specification](https://github.com/rsocket/rsocket). - - -# Detailed Design - -The TCK designed to have two independent parts. -The first one is a test runner in the form of a CLI tool along with a form of extendable test suites. The second part is a driver, or simply saying a set of responses to logical interactions which allows ensuring protocol correctness. Please note, that the first part is well specified, where the second part lies on the implementors. - ## Testing network communication As RSocket implementation is a library that allows two applications talk to each @@ -30,3 +20,11 @@ protocol, the most critical feature of TCK is to well described reports on which specification sections an implementation is not covering. Reports should contain information about failures of not following the specification (e.g. precise frames ordering and format if states otherwise in spec) + +## Testing Client-Server Implementations + +![](https://www.websequencediagrams.com/files/render?link=wg2HRdSALIB370a8r8Gymyf6V9wXFj6xFwfnV3IenlNP9mFadX5ZztaRBxkS298j) + +## Testing Client Only Implementations + +![](https://www.websequencediagrams.com/files/render?link=2ULQtZY1gDjOeuVlezjuWNFzxfUhQehUMEfSx4kqXJadK3RZgjpXYC4UvsqR3W9p) From 03a2a7e865fb6acaa6bcf86b0fac7c6c0ae318d3 Mon Sep 17 00:00:00 2001 From: Alex Dukhno Date: Mon, 13 Apr 2020 10:27:45 +0300 Subject: [PATCH 6/6] update diagram style --- doc/For-Contributors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/For-Contributors.md b/doc/For-Contributors.md index b0f788d..780b356 100644 --- a/doc/For-Contributors.md +++ b/doc/For-Contributors.md @@ -27,4 +27,4 @@ precise frames ordering and format if states otherwise in spec) ## Testing Client Only Implementations -![](https://www.websequencediagrams.com/files/render?link=2ULQtZY1gDjOeuVlezjuWNFzxfUhQehUMEfSx4kqXJadK3RZgjpXYC4UvsqR3W9p) +![](https://www.websequencediagrams.com/files/render?link=Fww0YouzGBbr9it9lWK89uGnpqkaNdCqWp3rlUcx6wQ6AdlHwF22QsYHcbSiHYRP)