@@ -35,12 +35,72 @@ class HalRelationProxyApp
3535 RESPONSE_BODY_REPLACEMENTS = {
3636 }
3737
38+ # query strings sent from the v2 ruby pact, is re-ordered by the rust app?
39+ # so we need to re-order them here to match the expected query string
40+ # PASS
41+ # curl 'localhost:9292/matrix?ignore%5B%5D%5Bpacticipant%5D=Foo&ignore%5B%5D%5Bversion%5D=3.4.5&latestby=cvpv&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Btag%5D=prod' | jq .
42+ # FAIL
43+ # curl 'localhost:9292/matrix?ignore%5B%5D%5Bpacticipant%5D=Foo&ignore%5B%5D%5Bversion%5D=3.4.5&latestby=cvpv&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Btag%5D=prod&q%5B%5D%5Bversion%5D=4.5.6' | jq .
44+ QUERY_STRING_REPLACEMENTS = {
45+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v2
46+ "ignore%5B%5D%5Bpacticipant%5D=Foo&ignore%5B%5D%5Bversion%5D=3.4.5&latestby=cvpv&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Btag%5D=prod&q%5B%5D%5Bversion%5D=4.5.6" =>
47+ "q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Btag%5D=prod&latestby=cvpv&ignore%5B%5D%5Bpacticipant%5D=Foo&ignore%5B%5D%5Bversion%5D=3.4.5" ,
48+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v1
49+ "ignore[][pacticipant]=Foo&ignore[][version]=3%2e4%2e5&latestby=cvpv&q[][pacticipant]=Bar&q[][pacticipant]=Foo&q[][tag]=prod&q[][version]=4%2e5%2e6" =>
50+ "q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Btag%5D=prod&latestby=cvpv&ignore%5B%5D%5Bpacticipant%5D=Foo&ignore%5B%5D%5Bversion%5D=3.4.5" ,
51+
52+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v2
53+ "latestby=cvpv&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bversion%5D=4.5.6" =>
54+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&latestby=cvpv" ,
55+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v1
56+ "latestby=cvpv&q[][pacticipant]=Foo&q[][pacticipant]=Bar&q[][version]=1%2e2%2e3&q[][version]=4%2e5%2e6" =>
57+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&latestby=cvpv" ,
58+
59+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v2
60+ "latestby=cvpv&q%5B%5D%5Bpacticipant%5D=Foo+Thing&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bversion%5D=4.5.6" =>
61+ "q%5B%5D%5Bpacticipant%5D=Foo%20Thing&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&latestby=cvpv" ,
62+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v1
63+ "latestby=cvpv&q[][pacticipant]=Foo+Thing&q[][pacticipant]=Bar&q[][version]=1%2e2%2e3&q[][version]=4%2e5%2e6" =>
64+ "q%5B%5D%5Bpacticipant%5D=Foo%20Thing&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=4.5.6&latestby=cvpv" ,
65+
66+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v2
67+ "latestby=cvpv&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bversion%5D=9.9.9" =>
68+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=9.9.9&latestby=cvpv" ,
69+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v1
70+ "latestby=cvpv&q[][pacticipant]=Foo&q[][pacticipant]=Bar&q[][version]=1%2e2%2e3&q[][version]=9%2e9%2e9" =>
71+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=9.9.9&latestby=cvpv" ,
72+
73+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v2
74+ "latestby=cvpv&q%5B%5D%5Blatest%5D=true&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Btag%5D=prod&q%5B%5D%5Bversion%5D=1.2.3" =>
75+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Blatest%5D=true&q%5B%5D%5Btag%5D=prod&latestby=cvpv" ,
76+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v1
77+ "latestby=cvpv&q[][latest]=true&q[][pacticipant]=Foo&q[][pacticipant]=Bar&q[][tag]=prod&q[][version]=1%2e2%2e3" =>
78+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.3&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Blatest%5D=true&q%5B%5D%5Btag%5D=prod&latestby=cvpv" ,
79+
80+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v2
81+ "latestby=cvpv&q%5B%5D%5Blatest%5D=true&q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Bversion%5D=1.2.4" =>
82+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.4&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Blatest%5D=true&latestby=cvpv" ,
83+ # pact-ruby-v2 pact (as v2) verified by pact-ruby-v1
84+ "latestby=cvpv&q[][latest]=true&q[][pacticipant]=Foo&q[][pacticipant]=Bar&q[][version]=1%2e2%2e4" =>
85+ "q%5B%5D%5Bpacticipant%5D=Foo&q%5B%5D%5Bversion%5D=1.2.4&q%5B%5D%5Bpacticipant%5D=Bar&q%5B%5D%5Blatest%5D=true&latestby=cvpv" ,
86+ }
87+
3888 def initialize ( app )
3989 @app = app
4090 end
4191
4292 def call env
4393 original_path = env [ "PATH_INFO" ]
94+ original_query = env [ "QUERY_STRING" ]
95+
96+ QUERY_STRING_REPLACEMENTS . each do | ( find , replace ) |
97+ env [ "QUERY_STRING" ] = env [ "QUERY_STRING" ] . gsub ( find , replace )
98+ end
99+
100+ if env [ "QUERY_STRING" ] != original_query
101+ puts "Modified query string: #{ env [ "QUERY_STRING" ] } "
102+ end
103+
44104 env_with_modified_path = env
45105 PATH_REPLACEMENTS . each do | ( find , replace ) |
46106 env_with_modified_path [ "PATH_INFO" ] = env_with_modified_path [ "PATH_INFO" ] . gsub ( find , replace )
0 commit comments