diff --git a/lib/vagrant/action/builtin/box_add.rb b/lib/vagrant/action/builtin/box_add.rb index 1a53918a9..afedc4eb3 100644 --- a/lib/vagrant/action/builtin/box_add.rb +++ b/lib/vagrant/action/builtin/box_add.rb @@ -108,6 +108,14 @@ module Vagrant end end + is_error = is_metadata_results.find do |b| + b.is_a?(Errors::DownloaderError) + end + if is_error + raise Errors::BoxMetadataDownloadError, + message: is_error.extra_data[:message] + end + is_metadata = is_metadata_results.any? { |b| b === true } if is_metadata && url.length > 1 raise Errors::BoxAddMetadataMultiURL, diff --git a/test/unit/vagrant/action/builtin/box_add_test.rb b/test/unit/vagrant/action/builtin/box_add_test.rb index e7bdb8b39..4067777a2 100644 --- a/test/unit/vagrant/action/builtin/box_add_test.rb +++ b/test/unit/vagrant/action/builtin/box_add_test.rb @@ -735,6 +735,20 @@ describe Vagrant::Action::Builtin::BoxAdd, :skip_windows, :bsdtar do end end + it "raises an error if downloading metadata fails" do + path = Dir::Tmpname.create("vagrant-shorthand-invalid") {} + + with_web_server(Pathname.new(path)) do |port| + env[:box_url] = "http://127.0.0.1:#{port}/bad" + + expect(box_collection).to receive(:add).never + expect(app).to receive(:call).never + + expect { subject.call(env) }. + to raise_error(Vagrant::Errors::BoxMetadataDownloadError) + end + end + it "raises an error if multiple metadata URLs are given" do box_path = iso_env.box2_file(:virtualbox) tf = Tempfile.new(["vagrant-box-multi-metadata", ".json"]).tap do |f|