# 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, "", 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