From 5124ec1cf95a0782c7f032692e7b1049fd9daa99 Mon Sep 17 00:00:00 2001 From: sophia Date: Wed, 6 May 2020 13:09:31 -0400 Subject: [PATCH] Test docker installer and ensure that all caps are valid --- .../provisioners/docker/installer_test.rb | 47 +++++++++++++++++++ .../provisioners/docker/plugin_test.rb | 16 +++++++ 2 files changed, 63 insertions(+) create mode 100644 test/unit/plugins/provisioners/docker/installer_test.rb create mode 100644 test/unit/plugins/provisioners/docker/plugin_test.rb diff --git a/test/unit/plugins/provisioners/docker/installer_test.rb b/test/unit/plugins/provisioners/docker/installer_test.rb new file mode 100644 index 000000000..c21654b63 --- /dev/null +++ b/test/unit/plugins/provisioners/docker/installer_test.rb @@ -0,0 +1,47 @@ +require File.expand_path("../../../../base", __FILE__) + +require Vagrant.source_root.join("plugins/provisioners/docker/provisioner") + +describe VagrantPlugins::DockerProvisioner::Installer do + include_context "unit" + subject { described_class.new(machine) } + + let(:iso_env) do + # We have to create a Vagrantfile so there is a root path + env = isolated_environment + env.vagrantfile("") + env.create_vagrant_env + end + + let(:machine) { iso_env.machine(iso_env.machine_names[0], :dummy) } + let(:communicator) { double("comm") } + + before do + allow(machine).to receive(:communicate).and_return(communicator) + + allow(communicator).to receive(:ready?).and_return(true) + allow(communicator).to receive(:test).with(/Linux/).and_return(true) + end + + describe "#ensure_installed" do + it "returns if docker capability not present" do + allow(machine).to receive_message_chain(:guest, :capability?).with(:docker_installed).and_return(false) + expect(subject.ensure_installed()).to eq(false) + end + + it "does not install docker if already present" do + expect(communicator).to receive(:test).with(/docker/, {:sudo=>true}).and_return(true) + allow(communicator).to receive(:test).and_return(true) + expect(subject.ensure_installed()).to eq(true) + end + + it "installs docker if not present" do + expect(communicator).to receive(:test).with(/docker/, {:sudo=>true}).and_return(false).at_least(:twice) + # Will execute sudo commands to install + expect(communicator).to receive(:sudo).at_least(:once) + # Expect to raise error since we are mocking out the test for docker install to return false + expect {subject.ensure_installed()}.to raise_error(VagrantPlugins::DockerProvisioner::DockerError) + end + end + +end diff --git a/test/unit/plugins/provisioners/docker/plugin_test.rb b/test/unit/plugins/provisioners/docker/plugin_test.rb new file mode 100644 index 000000000..2c954d5f5 --- /dev/null +++ b/test/unit/plugins/provisioners/docker/plugin_test.rb @@ -0,0 +1,16 @@ +require File.expand_path("../../../../base", __FILE__) + +require Vagrant.source_root.join("plugins/provisioners/docker/provisioner") + +describe VagrantPlugins::DockerProvisioner::Plugin do + subject { described_class } + + it "has valid guest capabilities" do + subject.components.guest_capabilities.each do |guest, caps| + caps.each do |cap| + subject.components.guest_capabilities[guest][cap] + end + end + end + +end \ No newline at end of file