providers/docker: Allow TCP and UDP ports on same number

This commit changes the way ports are aggregated in the Docker provider.
Previously ports were aggregated by their "number", but that is not a
truly unique representation. Instead, the protocol is now taken into
account when generating the port map.

Fixes GH-5527
This commit is contained in:
Seth Vargo 2016-05-30 17:08:50 -04:00
parent 4236ddc021
commit 38f23fe001
No known key found for this signature in database
GPG Key ID: 905A90C2949E8787
2 changed files with 56 additions and 1 deletions

View File

@ -135,7 +135,7 @@ module VagrantPlugins
next
end
mappings[options[:host]] = options
mappings["#{options[:host]}/#{options[:protocol]}"] = options
end
# Build the results

View File

@ -0,0 +1,55 @@
require_relative "../../../../base"
require_relative "../../../../../../plugins/providers/docker/action/create"
describe VagrantPlugins::DockerProvider::Action::Create do
include_context "unit"
include_context "virtualbox"
let(:sandbox) { isolated_environment }
let(:iso_env) do
# We have to create a Vagrantfile so there is a root path
sandbox.vagrantfile("")
sandbox.create_vagrant_env
end
let(:machine) do
iso_env.machine(iso_env.machine_names[0], :virtualbox).tap do |m|
m.provider.stub(driver: driver)
end
end
let(:env) {{ machine: machine, ui: machine.ui, root_path: Pathname.new(".") }}
let(:app) { lambda { |*args| }}
let(:driver) { double("driver", create: "abcd1234") }
subject { described_class.new(app, env) }
after do
sandbox.close
end
describe "#call" do
it "calls the next action in the chain" do
called = false
app = ->(*args) { called = true }
action = described_class.new(app, env)
action.call(env)
expect(called).to eq(true)
end
end
describe "#forwarded_ports" do
it "does not clobber ports with different protocols" do
subject.instance_variable_set(:@machine, machine)
machine.config.vm.network "forwarded_port", guest: 8125, host: 8125, protocol: "tcp"
machine.config.vm.network "forwarded_port", guest: 8125, host: 8125, protocol: "udp"
result = subject.forwarded_ports(false)
expect(result).to eq(["8125:8125", "8125:8125/udp"])
end
end
end