blob: 3587d939e13950e47744edaf30d9454fc550b052 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require 'test_tools'
require 'qpid_proton'
class TestURI < MiniTest::Test
PARTS=[:scheme, :userinfo, :host, :port, :path] # Interesting URI components
def uri(u) Qpid::Proton::uri(u); end
def uri_parts(u) uri(u).select(*PARTS); end
# Extension to standard URI parser
def test_standard
u = URI("amqp://u:p@h/x")
assert_equal URI::AMQP, u.class
assert_equal ['amqp', 'u:p', 'h', 5672, '/x'], u.select(*PARTS)
u = URI("amqps://u:p@h/x")
assert_equal URI::AMQPS, u.class
assert_equal ['amqps', 'u:p', 'h', 5671, '/x'], u.select(*PARTS)
assert_equal ['amqp', nil, '[::1:2:3]', 5672, ""], URI('amqp://[::1:2:3]').select(*PARTS)
end
# Proton::uri on valid URIs
def test_valid
u = uri("amqp://u:p@h:1/x")
assert_equal URI::AMQP, u.class
assert_equal ['amqp', 'u:p', 'h', 1, '/x'], u.select(*PARTS)
u = uri("amqps://u:p@h:1/x")
assert_equal URI::AMQPS, u.class
assert_equal ['amqps', 'u:p', 'h', 1, '/x'], u.select(*PARTS)
# Schemeless string -> amqp
assert_equal ["amqp", nil, "h", 1, "/x"], uri_parts("//h:1/x")
assert_equal ["amqp", nil, "", 5672, "/x"], uri_parts("/x")
assert_equal ["amqp", nil, "[::1]", 5672, ""], uri_parts("//[::1]")
# Schemeless URI gets amqp: scheme
assert_equal ["amqp", nil, nil, 5672, "/x"], uri_parts(URI("/x"))
# Pass-through
u = uri('')
assert_same u, uri(u)
end
# Proton::uri non-standard shortcuts
def test_shortcut
assert_equal URI("amqp://u:p@h:1/x"), uri("u:p@h:1/x")
assert_equal URI("amqp://h:1"), uri("h:1")
assert_equal URI("amqp://h"), uri("h")
assert_equal URI("amqp://h"), uri("h:")
assert_equal ["amqp", nil, "", 5672, ""], uri_parts("")
assert_equal ["amqp", nil, "", 5672, ""], uri_parts(":")
assert_equal ["amqp", nil, "", 1, ""], uri_parts(":1")
assert_equal ["amqp", nil, "", 1, ""], uri_parts("amqp://:1")
assert_equal URI("amqp://[::1:2]:1"), uri("[::1:2]:1")
assert_equal URI("amqp://[::1:2]"), uri("[::1:2]")
end
def test_error
assert_raises(::ArgumentError) { uri(nil) }
assert_raises(URI::BadURIError) { uri(URI("http://x")) } # Don't re-parse a URI with wrong scheme
assert_raises(URI::InvalidURIError) { uri("x:y:z") } # Nonsense
assert_raises(URI::InvalidURIError) { uri("amqp://[foobar]") } # Bad host
end
end