diff options
-rw-r--r-- | lib/chef/cookbook_uploader.rb | 1 | ||||
-rw-r--r-- | lib/chef/sandbox.rb | 20 | ||||
-rw-r--r-- | spec/unit/json_compat_spec.rb | 8 |
3 files changed, 29 insertions, 0 deletions
diff --git a/lib/chef/cookbook_uploader.rb b/lib/chef/cookbook_uploader.rb index 8dd50ac043..90c9ee9996 100644 --- a/lib/chef/cookbook_uploader.rb +++ b/lib/chef/cookbook_uploader.rb @@ -7,6 +7,7 @@ require 'chef/checksum_cache' require 'chef/cookbook_version' require 'chef/cookbook/syntax_check' require 'chef/cookbook/file_system_file_vendor' +require 'chef/sandbox' class Chef class CookbookUploader diff --git a/lib/chef/sandbox.rb b/lib/chef/sandbox.rb new file mode 100644 index 0000000000..28bc4ffa12 --- /dev/null +++ b/lib/chef/sandbox.rb @@ -0,0 +1,20 @@ +class Chef + class Sandbox + # I DO NOTHING!! + + # So, the reason we have a completely empty class here is so that + # Chef 11 clients do not choke when interacting with Chef 10 + # servers. The original Chef::Sandbox class (that actually did + # things) has been removed since its functionality is no longer + # needed for Chef 11. However, since we still use the JSON gem + # and make use of its "auto-inflation" of classes (driven by the + # contents of the 'json_class' key in all of our JSON), any + # sandbox responses from a Chef 10 server to a Chef 11 client + # would cause knife to crash. The JSON gem would attempt to + # auto-inflate based on a "json_class": "Chef::Sandbox" hash + # entry, but would not be able to find a Chef::Sandbox class! + # + # This is a workaround until such time as we can completely remove + # the reliance on the "json_class" field. + end +end diff --git a/spec/unit/json_compat_spec.rb b/spec/unit/json_compat_spec.rb index 674e2ae17a..f21493e060 100644 --- a/spec/unit/json_compat_spec.rb +++ b/spec/unit/json_compat_spec.rb @@ -28,6 +28,14 @@ describe Chef::JSONCompat do end end + describe 'with JSON containing "Chef::Sandbox" as a json_class value' do + require 'chef/sandbox' # Only needed for this test + let(:json){'{"json_class": "Chef::Sandbox", "arbitrary": "data"}'} + it "returns a Hash, because Chef::Sandbox is a dummy class" do + Chef::JSONCompat.from_json(json).should eq({"json_class" => "Chef::Sandbox", "arbitrary" => "data"}) + end + end + describe "with a file with 1000 or less nested entries" do before(:all) do @json = IO.read(File.join(CHEF_SPEC_DATA, 'big_json.json')) |