From 434e6138564a8e9127ccbad28194b5a23802e2a6 Mon Sep 17 00:00:00 2001 From: sophia Date: Fri, 27 Aug 2021 16:19:42 -0500 Subject: [PATCH] Test has capability --- .../commands/serve/service/guest_service.rb | 2 +- .../serve/service/guest_service_test.rb | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/plugins/commands/serve/service/guest_service.rb b/plugins/commands/serve/service/guest_service.rb index 7a5a02633..149af76d6 100644 --- a/plugins/commands/serve/service/guest_service.rb +++ b/plugins/commands/serve/service/guest_service.rb @@ -102,7 +102,7 @@ module VagrantPlugins ServiceInfo.with_info(ctx) do |info| cap_name = req.args.detect { |a| a.type == "hashicorp.vagrant.sdk.Args.NamedCapability" - }&.value&.value.strip.gsub("\b", "") + }&.value&.value.strip.gsub("\b", "").gsub("\x05", "") plugin_name = info.plugin_name LOGGER.debug("checking for #{cap_name} capability in #{plugin_name}") diff --git a/test/unit/plugins/commands/serve/service/guest_service_test.rb b/test/unit/plugins/commands/serve/service/guest_service_test.rb index 413bf7545..bf711387f 100644 --- a/test/unit/plugins/commands/serve/service/guest_service_test.rb +++ b/test/unit/plugins/commands/serve/service/guest_service_test.rb @@ -112,4 +112,65 @@ describe VagrantPlugins::CommandServe::Service::GuestService do expect(d.detected).to be false end end + + context "requesting has capability" do + before do + cap_guest = Class.new(Vagrant.plugin("2", :guest)) do + def detect?(machine) + true + end + end + + register_plugin do |p| + p.guest(:cap_guest) { cap_guest } + p.guest_capability(:cap_guest, :mycap) do + "this is a capability" + end + end + end + + let(:named_cap_request){ + Hashicorp::Vagrant::Sdk::FuncSpec::Args.new( + args: [ + Hashicorp::Vagrant::Sdk::FuncSpec::Value.new( + name: "", + type: "hashicorp.vagrant.sdk.Args.NamedCapability", + value: Google::Protobuf::Any.pack(Hashicorp::Vagrant::Sdk::Args::NamedCapability.new(Capability:"mycap"))) + ] + ) + } + + let(:named_cap_bad_request){ + Hashicorp::Vagrant::Sdk::FuncSpec::Args.new( + args: [ + Hashicorp::Vagrant::Sdk::FuncSpec::Value.new( + name: "", + type: "hashicorp.vagrant.sdk.Args.NamedCapability", + value: Google::Protobuf::Any.pack(Hashicorp::Vagrant::Sdk::Args::NamedCapability.new(Capability:"notacapability"))) + ] + ) + } + + it "generates a spec" do + spec = subject.has_capability_spec + expect(spec).not_to be_nil + end + + it "raises an error for unknown plugins" do + ctx = DummyContext.new("idontexisthahaha") + expect { subject.has_capability(test_cap_name, ctx) }.to raise_error + end + + it "returns true for plugin with capability" do + ctx = DummyContext.new("cap_guest") + d = subject.has_capability(named_cap_request, ctx) + expect(d.has_capability).to be true + end + + it "returns false for plugin without capability" do + ctx = DummyContext.new("cap_guest") + d = subject.has_capability(named_cap_bad_request, ctx) + expect(d.has_capability).to be false + end + end end