spec/vagrant-windows/winrmcommunicator_spec.rb in vagrant-windows-1.6.0 vs spec/vagrant-windows/winrmcommunicator_spec.rb in vagrant-windows-1.7.0.pre.1

- old
+ new

@@ -1,14 +1,14 @@ require 'spec_helper' describe VagrantWindows::Communication::WinRMCommunicator, :integration => true do before(:all) do - # This test requires you already have a running Windows Server 2008 R2 Vagrant VM - # Not ideal, but you have to start somewhere @communicator = VagrantWindows::Communication::WinRMCommunicator.new({}) - @communicator.winrmshell = VagrantWindows::Communication::WinRMShell.new("127.0.0.1", "vagrant", "vagrant") + port = (ENV['WINRM_PORT'] || 5985).to_i + @communicator.winrmshell = VagrantWindows::Communication::WinRMShell.new( + "127.0.0.1", "vagrant", "vagrant", { port: port }) end describe "execute" do it "should return 1 when error_check is false" do expect(@communicator.execute("exit 1", { :error_check => false })).to eq(1) @@ -26,22 +26,71 @@ describe "upload" do it "should upload the file and overwrite it if it exists" do test_file = Tempfile.new("uploadtest") IO.write(test_file, "hello world") - @communicator.upload(test_file, "c:\\vagrantuploadtest.txt") + @communicator.upload(test_file, "c:/tmp/winrm-test/vagrantuploadtest.txt") # ensure we can overwrite IO.write(test_file, "goodbye cruel world") - @communicator.upload(test_file, "c:\\vagrantuploadtest.txt") + @communicator.upload(test_file, "c:/tmp/winrm-test/vagrantuploadtest.txt") # get the uploaded file's contents to ensure it uploaded properly uploaded_file_content = '' - @communicator.execute("cat c:\\vagrantuploadtest.txt", {}) do |type, line| + @communicator.execute("cat c:/tmp/winrm-test/vagrantuploadtest.txt", {}) do |type, line| uploaded_file_content = uploaded_file_content + line end expect(uploaded_file_content.chomp).to eq("goodbye cruel world") + end + + it "should recursively upload directories" do + # create a some test data + host_src_dir = Dir.mktmpdir("winrm_comm") + + begin + IO.write(File.join(host_src_dir, 'root.txt'), "root\n") + + subdir2 = File.join(host_src_dir, '/subdir1/subdir2') + FileUtils.mkdir_p(subdir2) + + IO.write(File.join(subdir2, 'leaf1.txt'), "leaf1\n") + IO.write(File.join(subdir2, 'leaf2.txt'), "leaf2\n") + + @communicator.upload(host_src_dir, '/tmp/winrm-test-upload') #c:\tmp\winrm-test-upload + + @communicator.execute <<-EOH + function AssertExists($p) { + if (!(Test-Path $p)) { + exit 1 + } + } + + AssertExists 'c:/tmp/winrm-test-upload/root.txt' + AssertExists 'c:/tmp/winrm-test-upload/subdir1/subdir2/leaf2.txt' + AssertExists 'c:/tmp/winrm-test-upload/subdir1/subdir2/leaf1.txt' + EOH + ensure + FileUtils.remove_entry_secure host_src_dir + end + end + end + + describe 'test' do + it "should return true if directory exists" do + @communicator.execute('mkdir -p /tmp/winrm-test/1') + expect(@communicator.test('test -d /tmp/winrm-test/1')).to be_true + end + + it "should return false if directory does not exist" do + expect(@communicator.test('test -d /tmp/winrm-test/doesnotexit')).to be_false + end + + it "should differentiate between directories and files" do + @communicator.execute('mkdir -p /tmp/winrm-test/2') + @communicator.execute('Add-Content /tmp/winrm-test/2/file.txt "The content"') + expect(@communicator.test('test -d /tmp/winrm-test/2/file.txt')).to be_false + expect(@communicator.test('test -f /tmp/winrm-test/2/file.txt')).to be_true end end end