From e21af4a0e89f10a943a3e87073d72a69c4142885 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Wed, 25 Sep 2013 15:22:57 -0300 Subject: [PATCH 1/4] Fixed Issue #75 CONNEG doesn't handle accept encodings correcty --- .../src/parsers/common_accept_header_parser.e | 5 +-- .../test/conneg_server_side_test.e | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/library/network/protocol/content_negotiation/src/parsers/common_accept_header_parser.e b/library/network/protocol/content_negotiation/src/parsers/common_accept_header_parser.e index 9a8e983f..172d0e58 100644 --- a/library/network/protocol/content_negotiation/src/parsers/common_accept_header_parser.e +++ b/library/network/protocol/content_negotiation/src/parsers/common_accept_header_parser.e @@ -1,7 +1,7 @@ note description: "[ COMMON_ACCEPT_HEADER_PARSER, this class allows to parse Accept-Charset and Accept-Encoding headers - + ]" date: "$Date$" revision: "$Revision$" @@ -88,7 +88,8 @@ feature -- Parser loop range := parsed_charsets.item_for_iteration if attached range.field as l_range_common then - if l_target_field.same_string (l_range_common) or l_target_field.same_string ("*") or l_range_common.same_string ("*") then + if l_target_field.same_string (l_range_common) or l_target_field.same_string ("*") or l_range_common.same_string ("*") + or l_target_field.same_string ("identity") then if l_range_common.same_string (l_target_field) then l_fitness := 100 else diff --git a/library/network/protocol/content_negotiation/test/conneg_server_side_test.e b/library/network/protocol/content_negotiation/test/conneg_server_side_test.e index e53d28c9..1b1c5114 100644 --- a/library/network/protocol/content_negotiation/test/conneg_server_side_test.e +++ b/library/network/protocol/content_negotiation/test/conneg_server_side_test.e @@ -123,6 +123,39 @@ feature -- Test routines assert ("Variants is dettached",compression_variants.supported_variants = Void) assert ("Variant Header", compression_variants.variant_header.is_equal ("Accept-Encoding")) assert ("Encoding Type is gzip", compression_variants.type.is_equal ("gzip")) + + + -- Scenario 4, the server set `identity' and the client doesn't mention identity + l_compression := "identity" + compression_supported := l_compression.split(',') + conneg.set_encoding_default("gzip") + compression_variants := conneg.encoding_preference (compression_supported, "gzip;q=0.7") + assert ("Expected Acceptable", compression_variants.is_acceptable) + assert ("Variants is dettached",compression_variants.supported_variants = Void) + assert ("Variant Header", compression_variants.variant_header.is_equal ("Accept-Encoding")) + assert ("Encoding Type is identity", compression_variants.type.is_equal ("identity")) + + -- Scenario 5, the server set `identity' and the client mention identity,q=0 + l_compression := "identity" + compression_supported := l_compression.split(',') + conneg.set_encoding_default("gzip") + compression_variants := conneg.encoding_preference (compression_supported, "identity;q=0") + assert ("Expected Not Acceptable", not compression_variants.is_acceptable) + assert ("Variants is attached",attached compression_variants.supported_variants ) + assert ("Variant Header is void", compression_variants.variant_header = Void) + assert ("Encoding Type is Void", compression_variants.type = Void) + + -- Scenario 6, the server set `identity' and the client mention *,q=0 + l_compression := "identity" + compression_supported := l_compression.split(',') + conneg.set_encoding_default("gzip") + compression_variants := conneg.encoding_preference (compression_supported, "*;q=0") + assert ("Expected Not Acceptable", not compression_variants.is_acceptable) + assert ("Variants is attached",attached compression_variants.supported_variants ) + assert ("Variant Header is void", compression_variants.variant_header = Void) + assert ("Encoding Type is Void", compression_variants.type = Void) + + end From 295e6e919871bbf8e10ba09438aa48488f2b5331 Mon Sep 17 00:00:00 2001 From: jvelilla Date: Wed, 25 Sep 2013 16:15:27 -0300 Subject: [PATCH 2/4] Added more scenarios to test accept encoding with identity. --- .../test/conneg_server_side_test.e | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/library/network/protocol/content_negotiation/test/conneg_server_side_test.e b/library/network/protocol/content_negotiation/test/conneg_server_side_test.e index 1b1c5114..55d29e79 100644 --- a/library/network/protocol/content_negotiation/test/conneg_server_side_test.e +++ b/library/network/protocol/content_negotiation/test/conneg_server_side_test.e @@ -156,6 +156,28 @@ feature -- Test routines assert ("Encoding Type is Void", compression_variants.type = Void) + -- Scenario 7, the server set `identity' and the client mention identity;q=0.5, gzip;q=0.7,compress + l_compression := "identity" + compression_supported := l_compression.split(',') + conneg.set_encoding_default("gzip") + compression_variants := conneg.encoding_preference (compression_supported, "identity;q=0.5, gzip;q=0.7,compress") + assert ("Expected Acceptable",compression_variants.is_acceptable) + assert ("Variants is void",compression_variants.supported_variants = Void) + assert ("Variant Header", compression_variants.variant_header.is_equal ("Accept-Encoding")) + assert ("Encoding Type is identity", compression_variants.type.is_equal ("identity")) + + + -- Scenario 8, the server set `identity' and the client mention identity;q=0.5 + l_compression := "identity" + compression_supported := l_compression.split(',') + conneg.set_encoding_default("gzip") + compression_variants := conneg.encoding_preference (compression_supported, "identity;q=0.5") + assert ("Expected Acceptable",compression_variants.is_acceptable) + assert ("Variants is void",compression_variants.supported_variants = Void) + assert ("Variant Header", compression_variants.variant_header.is_equal ("Accept-Encoding")) + assert ("Encoding Type is identity", compression_variants.type.is_equal ("identity")) + + end From 8fe7f4db82fc4ceb6d291bd8927070c273d04950 Mon Sep 17 00:00:00 2001 From: Colin Adams Date: Tue, 1 Oct 2013 08:40:16 +0100 Subject: [PATCH 3/4] When custom error is created in check_resource_exists, use it --- library/server/wsf/policy_driven/wsf_skeleton_handler.e | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/server/wsf/policy_driven/wsf_skeleton_handler.e b/library/server/wsf/policy_driven/wsf_skeleton_handler.e index e2c92fb2..0e22817d 100644 --- a/library/server/wsf/policy_driven/wsf_skeleton_handler.e +++ b/library/server/wsf/policy_driven/wsf_skeleton_handler.e @@ -484,6 +484,8 @@ feature -- Execution check_resource_exists (req, a_helper) if a_helper.resource_exists then a_helper.execute_existing_resource (req, res, Current) + elseif req.error_handler.has_error then + a_helper.write_error_response (req, res) else if attached req.http_if_match as l_if_match and then l_if_match.same_string ("*") then a_helper.handle_precondition_failed (req, res) From 60d77892e57c377cea5d4f8caf901eb17b1c438f Mon Sep 17 00:00:00 2001 From: jvelilla Date: Fri, 4 Oct 2013 10:24:19 -0300 Subject: [PATCH 4/4] Fixed issue# 79 Bug in CONNEG_SERVER_SIDE --- .../protocol/content_negotiation/src/conneg_server_side.e | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/network/protocol/content_negotiation/src/conneg_server_side.e b/library/network/protocol/content_negotiation/src/conneg_server_side.e index 620fbed8..7440a799 100644 --- a/library/network/protocol/content_negotiation/src/conneg_server_side.e +++ b/library/network/protocol/content_negotiation/src/conneg_server_side.e @@ -34,7 +34,7 @@ feature -- Initialization set_charset_default (a_charset) set_encoding_default (a_encoding) ensure - mime_default_set: mime = a_mime + mime_default_set: mime_default = a_mime language_default_set: language_default = a_language charset_default_set: charset_default = a_charset encoding_default_set: encoding_default = a_encoding